Questions tagged «performance»

对系统是否运行良好以适合目标的评估。通常,性能是指系统随时间完成一个或一组操作的速度。

7
这些表设计中哪一个对性能更好?
我被要求创建一些东西来跟踪每天在帐户上收取的费用,而我正在尝试找出一个支持此目的的数据库表模式。 这就是我所知道的 公司拥有超过250万个帐户 其中,他们目前平均每月工作200,000(随着人员配备水平的变化而变化,目前水平很低) 他们想跟踪13种不同的费用类型,并且警告说,将来可能会增加更多的费用 他们希望每天跟踪费用 成本不会在整个库存中分配。它们可以分为每月工作的帐户数量(200,000),或者用户可以输入帐户标识符以将成本应用于一组帐户,或者可以仅指定将成本应用于哪个帐户。 我首先想到的是规范化的数据库: 帐户ID 日期 CostTypeId 量 我的问题是数学。该表将迅速变得庞大。假设所有13种成本类型都应用到了当月的所有工作帐户,即每月200k * 13 * N days in month大约75-8000万条记录,或者每年接近10亿条记录。 我的第二个想法是将其标准化 帐户ID 日期 总计花费 CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13 此方法更加不200k * N days in month规范,每月最多可以创建600万条记录(),或每年大约7200 万条。它比第一种方法少很多,但是,如果公司将来决定使用新的费用类型,则需要添加另一个数据库列。 在这两种方法中,您更喜欢哪一种?为什么?您是否可以想到另一种更好的选择? 我最感兴趣的是报告性能,包括总结报告和详细报告。当没有人在附近时,将费用分摊到各个帐户的工作将每晚进行。第二个问题是数据库大小。现有的数据库已经接近300GB,我相信磁盘上的空间约为500GB。 该数据库是SQL Server 2005

2
偶尔查询缓慢的原因?
我们在Windows Server 2008 R2上运行MySQL 5.1。 我们最近在数据库上进行了一些诊断,发现了一些无法解释的令人不安的工件。当查询花费很长时间(> 2000ms)时,我们添加了一些代码来记录日志。结果令人惊讶(并且可能解释了我们的僵局)。 有时,查询通常花费很少的时间(<10毫秒),而这需要4到13秒。需要明确的是,这些查询持续不断地运行(每秒几次),并且不受这些查询时间尖峰的影响。 我们已经通过索引查找任何明显的错误,并且运气不高。 更新资料 人员表: | people | CREATE TABLE `people` ( `people_id` bigint(20) NOT NULL AUTO_INCREMENT, `company_id` bigint(20) NOT NULL, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `temp_password` varchar(10) DEFAULT NULL, `reset_password_hash` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `phone` varchar(32) DEFAULT …

4
SQL Server发生I / O请求的时间超过15秒
在生产SQL Server上,我们具有以下配置: 将3台Dell PowerEdge R630服务器组合到可用性组中,所有3台都连接到单个RAID SAN存储单元,该存储单元是一个RAID阵列 有时,在PRIMARY上,我们会看到类似以下的消息: SQL Server在数据库ID 8 的文件[F:\ Data \ MyDatabase.mdf]中遇到11次I / O请求,而这些请求花费的时间超过15秒。OS文件句柄为0x0000000000001FBC。 最新的长I / O的偏移量是:0x000004295d0000。 长I / O的持续时间为:37397毫秒。 我们是性能故障排除的新手 解决与存储相关的特定问题的最常用方法或最佳做法是什么?必须使用哪些性能计数器,工具,监视器,应用程序等来缩小此类消息的根本原因?可能会有可以提供帮助的扩展事件,或者某种审计/日志记录?

4
CHAR与VARCHAR(Postgres)的索引性能
在这个答案(/programming/517579/strings-as-primary-keys-in-sql-database)中,有一条话引起了我的注意: 还请记住,进行索引比较时,CHAR和VARCHAR之间通常会有很大的差异 这是否适用/仍适用于Postgres? 我发现Oracle上的页面声称CHAR或多或少是别名VARCHAR,因此索引性能是相同的,但是在Postgres上没有确定的定义。

3
如何通过数据库获取特定实例的CPU使用率?
我发现以下查询可按数据库检测CPU使用率,但它们显示不同的结果: WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

6
SQL Server 2012慢于2008
我将大型网站和数据库从旧服务器(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz四核/ SAS磁盘)迁移到了更好的新服务器(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16核处理器/ SSD磁盘)。 我分离了旧服务器上的数据库文件,将它们复制并附加到新服务器上。一切进展顺利。 之后,我将兼容性级别更改为110,更新了统计信息,并重建了索引。 令我感到非常失望的是,我注意到,在新的SQL 2012服务器上,大多数SQL查询的速度要比旧的SQL 2008服务器慢得多(慢2-3-4倍)。 例如,在具有约70万条记录的表上,在旧服务器上,对索引的查询花费了约100毫秒。在新服务器上,相同的查询大约需要350毫秒。 所有查询都一样。 我会在这里有所帮助。让我知道要检查/验证的内容。因为我很难相信,在具有更新的SQL Server的更好的服务器上,性能会更差。 更多细节: 内存设置为最大。 我有此表和索引: CREATE TABLE [dbo].[Answer_Details_23]( [ID] [int] IDENTITY(1,1) …

4
大索引INCLUDE字段将如何影响系统性能?
这个问题是关于SQL Server索引性能的,其中包含a varchar(2000)作为INCLUDE索引。 我试图在缓慢而不稳定的数据库应用程序中提高性能。在某些情况下,数据是通过大VARCHAR字符串来访问的,与查询包括像multple字符串操作SUBSTRING(),SPACE()和DATALENGTH()。这是访问的简化示例; update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 模式如下所示: CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 定义了以下索引,并在大文本列上覆盖了一个字段。 CREATE NONCLUSTERED INDEX …

5
在不返回任何行的查询中包含ORDER BY会严重影响性能
给定一个简单的三表联接,即使没有返回任何行,当包含ORDER BY时,查询性能也会发生巨大变化。实际问题场景需要30秒才能返回零行,但是当不包括ORDER BY时即刻发生。为什么? SELECT * FROM tinytable t /* one narrow row */ JOIN smalltable s on t.id=s.tinyId /* one narrow row */ JOIN bigtable b on b.smallGuidId=s.GuidId /* a million narrow rows */ WHERE t.foreignId=3 /* doesn't match */ ORDER BY b.CreatedUtc /* try with and without this ORDER …


10
您的SQL Server遇到的前3个性能问题是什么?
我是埃因霍温丰提斯大学的一名学生,我目前正在进行一系列访谈,以帮助开发SQL Server工具,并且我希望获得该领域专家的反馈。 我的问题之一是: 您的SQL Server实例遇到的前3个性能问题是什么?如何识别这些问题? 我特别对用于测量此内容的脚本和工具感兴趣。

1
在INSERT上使用WITH TABLOCK的好处
在某些情况下,INSERT INTO <tablename> (WITH TABLOCK)由于记录最少,因此执行操作会更快。这些情况包括将数据库包含在BULK_LOGGED恢复模型中。 当数据库(tempdb)使用恢复模型时,在空表上使用WITH TABLOCKon 还有其他潜在的性能优势吗?INSERTSIMPLE 我正在使用SQL Server 2012 Standard Edition。 我的用例是使用来创建然后立即在存储过程中填充临时表INSERT...SELECT,该表可能包含多达几百万行。我尝试避免这种tempdb滥用,但是有时是需要的。 我正在尝试建立一个需要的案例TABLOCK。似乎它不会伤害任何东西,并且可能会有好处。我试图弄清楚是否有足够的潜在优势可以将其添加到我们整个代码库中的任何位置,我敢肯定没有其他进程要写到表中。 我通常将其插入具有群集PK的新创建的本地临时表中,但有时会使用堆。

2
使用索引日期时间列的MySQL性能问题
我试图解决以下问题大约一个小时,但仍然没有解决任何问题。 好的,我有一张桌子(MyISAM): +---------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | http | smallint(3) | YES | MUL | 200 | | | elapsed | float(6,3) | NO | | …

5
如何在大表上使用LEFT JOIN优化非常慢的SELECT
我正在谷歌搜索,自我教育和寻找解决方案数小时,但没有运气。我在这里找到了一些类似的问题,但不是这种情况。 我的桌子: 人(约1000万行) 属性(位置,年龄,...) 人与属性之间的链接(M:M)(约4000万行) 完整转储〜280MB 情况: 我尝试person_id从某些位置(location.attribute_value BETWEEN 3000 AND 7000),性别(gender.attribute_value = 1),出生年份(bornyear.attribute_value BETWEEN 1980 AND 2000)和眼睛颜色(eyecolor.attribute_value IN (2,3))选择所有人的身份()。 这是我的询问女巫用了3〜4 分钟。我想优化: SELECT person_id FROM person LEFT JOIN attribute location ON location.attribute_type_id = 1 AND location.person_id = person.person_id LEFT JOIN attribute gender ON gender.attribute_type_id = 2 AND gender.person_id = person.person_id …


2
SQL Server 2016 vs 2012插入性能
我在同一台服务器上有两个SQL Server实例: Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)标准版(64位) Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)企业版(64位) 两个实例上的sp_configure结果相同(新的2016选项除外)。 我已经在同一磁盘文件夹上的两个实例上创建了新数据库。自动增长参数是相同的。 自动创建和自动更新统计信息选项已关闭。 然后,我对堆中的10000个插入进行了测试: set nocount on go create table dbo.TestInsert ( i int not null, s varchar(50) not null ) declare @d1 datetime, @d2 datetime, @i int set @d1 = getdate() set @i = 1 while @i <= 10000 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.