有一个生产问题,其中一个存储过程表示花费了太多时间-平均需要15-20秒,但其中一天需要超过100秒。
这种情况发生在上周,周一,本周也再次发生——周二。我们检查了DB上的负载,一切都是一致的,周一或周二没有高容量。
同一个数据库上的所有其他存储过程都按预期工作。但只有这个存储过程,它只涉及很少的额外表,占用了太多时间。在重新索引之后,它才恢复正常。此存储过程在内部很少调用其他存储过程和函数。
可能出了什么问题?
它不可能和网络有关,因为它只影响一个存储过程。
它不可能与数据库负载或CPU利用率有关,因为影响仅限于一个存储过程。
没有只在周一或周二运行的计划作业。
我会查看活动,看看哪个进程占用了最多的CPU,并使用SQL探查器来查看查询占用了多少资源。由于您确信存储过程占用了太多的CPU,因此必须检查查询是如何执行的
在查询分析器中,启用"显示实际执行计划"。在这里,我将检查查询是如何执行的,是使用索引还是表扫描,排序算法等。它显示了消耗最多CPU的函数。如果是读取查询,我将检查表,看看表内部的碎片程度,以及检索数据需要多少次传递。如果是写查询,那么我将检查行/表锁和日志。如果将恢复模式从简单模式更改为完全模式,则写入可能需要相当长的时间
如果您已经完成了执行计划,请在此处粘贴带有存储过程的执行图片,这样我就可以看到实际减慢执行速度的原因
通过更改SQL查询、索引、查询提示和表分区来修复它们。