Sql Server 2008性能
问题描述:
我在不同的机器上安装了2个Sql Server 2008。我在每台机器上执行相同的sql查询(从500000行的表中选择)。 第一台机器执行时间为1分9秒。在第二台机器上,这次是2:45。第二台机器上的硬件比第一台硬件要好。 为什么第二台机器的执行时间更长?也许有什么选择Sql Server的性能取决于?Sql Server 2008性能
问题可能出在硬盘上?我如何检查硬盘问题?
见下面的查询统计:
1:
Client Execution Time 16:25:21
Query Profile Statistics
Number of INSERT, DELETE and UPDATE statements 0 0.0000
Rows affected by INSERT, DELETE, or UPDATE statements 0 0.0000
Number of SELECT statements 2 2.0000
Rows returned by SELECT statements 407354 407354.0000
Number of transactions 0 0.0000
Network Statistics
Number of server roundtrips 3 3.0000
TDS packets sent from client 3 3.0000
TDS packets received from server 18077 18077.0000
Bytes sent from client 738 738.0000
Bytes received from server 7.403454E+07 74034540.0000
Time Statistics
Client processing time 3859 3859.0000
Total execution time 3859 3859.0000
Wait time on server replies 0 0.0000
第二:
Client Execution Time 08:21:24
Query Profile Statistics
Number of INSERT, DELETE and UPDATE statements 0 0.0000
Rows affected by INSERT, DELETE, or UPDATE statements 0 0.0000
Number of SELECT statements 2 2.0000
Rows returned by SELECT statements 399952 399952.0000
Number of transactions 0 0.0000
Network Statistics
Number of server roundtrips 3 3.0000
TDS packets sent from client 3 3.0000
TDS packets received from server 17833 17833.0000
Bytes sent from client 738 738.0000
Bytes received from server 7.29937E+07 72993700.0000
Time Statistics
Client processing time 5688 5688.0000
Total execution time 5734 5734.0000
Wait time on server replies 46 46.0000
答
可能存在物理磁盘碎片问题。在一台服务器上,数据库文件存储在连续的块/扇区中,而另一台服务器上的文件分散在所有盘片上。 (如果你的数据库在数周或数月内增长10%,达到巨大的大小,然后备份并在大多空白的磁盘上恢复,可能会发生。)
答
统计数据可能是过时的。索引可能不同。符合标准的记录数量可能更多。
答
检索两台服务器上的执行计划并查找差异。
我也猜测它与统计有关,因为它可能对最终执行计划产生很大影响。
答
检查两台机器上的性能监视器。检查是否有应用程序在后台运行。检查处理器的亲和力掩码。
答
最好的方法是比较计划。如果两者完全相同,并且实际行数相同,则可以将其解释为服务器问题。
即使它可能与网络问题有关,如果您返回大量的行。当你说硬件比第一台机器好,这意味着更好的IO系统,更多的CPU和更多的内存。
另外,两台机器上的工作负载可能不一样。
我已经在同一时间检查过(1小时前)。相同的记录数(第一个Sql Server甚至更少的行)。数据库方案是相同的(包括索引)。所以,数据库几乎是一致的。我认为这个问题可能出现在服务器设置中。 – Egor4eg 2011-02-16 14:34:15
相同的行和索引并不意味着相同的统计数据。您必须检查统计信息上次更新的时间(DBCC Show_Statistics)。即便如此,SQL在保持最新状态方面通常也不错。 – 2011-02-16 14:47:10
我在两台服务器上执行了DBCC Show_Statistics并且是,我有不同的结果。你能否向我解释这是什么意思,以及如何在第二台服务器上对性能进行责备? – Egor4eg 2011-02-16 15:11:08