我有一个 SQL Server 2005 实例,它运行速度有些慢。这关联显示 perfmon 详细信息。由于我并不每天分析此类数据,因此我想知道 I/O 系统是否存在一些实际问题。
服务器使用 SAN,DB 文件和 Tempdb 文件位于同一驱动器 (E:)。这不是最好的架构,但我无法控制服务器。该服务器用于使用 Cognos 运行报告,因此它主要是只读数据库。
谢谢
这里有一些有趣的代码需要修正。
select "tempSalesRpt_SubRgnDist"."Region" AS "Region",
min("tempSalesRpt_SubRgnDist"."RegionName") AS "Region_Text"
from "SalesReporting"."dbo"."tempSalesRpt_SubRgnDist" "tempSalesRpt_SubRgnDist",
(select "SecurityMaster"."Userid" AS "Userid", "SecurityMaster"."SoldTo" AS "SoldTo"
from "SalesReporting"."dbo"."SecurityMaster" "SecurityMaster"
where "SecurityMaster"."Userid" = lower ('USTGACA')) "SecurityMaster4"
where NOT "SecurityMaster4"."Userid" is null
and "tempSalesRpt_SubRgnDist"."SoldTo" ="SecurityMaster4"."SoldTo"
group by "tempSalesRpt_SubRgnDist"."Region"
order by 1 asc , 2 asc
每次查询都会访问 securitymaster 表,并且该表最近有所增加。
我认为该代码包含不可搜索的代码,但执行计划显示使用了索引查找和键查找。
我确实看到一些新的指数可能会有所帮助,但需要进一步挖掘。
答案1
根据提供的数据,您一定遇到了一些问题。您的磁盘队列的读取秒数和写入秒数计数器比您想要的要高得多。现在,问题在于,这并不意味着磁盘存在问题,只是磁盘正在受到冲击。您可能存在索引问题或统计问题,这导致 SQL Server 对磁盘的负载超过其需要的程度。
首先查看数据库中的索引,看看是否需要创建新的索引。这将增加数据库的大小,但您会看到磁盘流量减少,查询运行时间也缩短了。
您可以首先查看长时间运行的查询的执行计划,它将告诉您需要在哪里添加索引。
答案2
除了 Denny 的回答之外,您的机器上还有大约 5GB 的可用内存 - 您是否正确配置了 SQL 的内存?
如果您有 32 位系统,则可以通过启用 AWE 来处理更多内存:
http://technet.microsoft.com/en-us/library/ms190673(SQL.90).aspx
SQL 将使用这些额外的内存来缓存更多的数据库表/索引(假设您的数据库大于您的可用内存)。