6
相同(?)SQL Server 2005计算机;一个查询需要2秒,而另一个查询需要15分钟
环境: 我们有两台运行SQL Server 2005的32位Windows Server 2003 R2计算机。硬件配置是具有Xeon 5160 CPU,4GB RAM和13GB RAID0的相同服务器。未启用AWE和/ 3GB标志。 使用预定义的安装清单并排设置服务器,并且两台计算机上所有已安装的软件均相同。 我们知道要检查的每个SQL Server安装设置和补丁程序级别都是相同的。一个区别是,TEMPDB在快速计算机上为400MB,在慢速计算机上为1.2GB。但是,在两种情况下,我们都看不到任何TEMPDB分配。 问题: 有一个存储过程,其中一个运行2秒,而另一个运行15分钟。在接下来的15分钟内,几乎没有磁盘活动,没有内存使用情况发生变化,但是一个CPU核心始终固定为100%。 即使数据库从一个备份并还原到另一个数据库,此行为仍然存在。 由于这是一个存储过程,因此活动监视器和事件探查器不会向我们显示有关此高CPU活动在存储过程中何处发生的任何详细信息。 问题: 我们还要看什么? 跟进: 对于以下游标定义,慢速发生在FETCH NEXT语句中: DECLARE C CURSOR FOR SELECT X, Y FROM dbo.A WHERE X NOT IN (SELECT X FROM dbo.B) AND Z <=0 ... <snip> ... FETCH NEXT FROM …