SQL Server 2005存储过程性能问题

Ang*_*ker 4 sql sql-server performance stored-procedures sql-server-2005

我有以下问题:当从我的应用程序中调用存储过程时,不时(如1000次调用中的1次),需要10-30秒才能完成.通常,sproc在一秒钟内运行.这是一个相当简单的proc,只有一个选择将几个表连接在一起.所有表名都设置了一个(NOLOCK)提示,因此可能没有锁定.索引也都到位,否则它会一直很慢.

问题是我无法在SSMS中复制这个问题(因为它总是在亚秒运行),无论它运行多少次sproc,但是当我将探查器指向正在运行我的应用程序的用户时,我看到了问题.SSMS中的查询计划似乎是正确的,但问题仍然存在.

我从哪里开始?我该如何调试此问题?

gbn*_*gbn 5

一些选择:

  • 探究者或SET STATISTICS xx ON说什么?CPU说,是否只是资源匮乏?

  • 引擎决定统计数据已过期.表格是否按行数改变10%(经验法则).去测试:

    SELECT
        name AS stats_name, 
        STATS_DATE(object_id, stats_id) AS statistics_update_date
    FROM
        sys.stats 
    WHERE
        object_id IN (OBJECT_ID('relevanttable1'), OBJECT_ID('relevanttable2'))
    
    Run Code Online (Sandbox Code Playgroud)
  • 服务器上还发生了什么?示例:索引重建:不阻塞,只是资源密集型.

通常我建议参数嗅探,但你说每个调用的参数都是相同的.我也期望它更频繁地发生.