存在一个生产问题,其中一个存储过程表明花费了太多时间 - 平均需要15-20秒,但在一天中花费超过100秒。
它发生在上周一,周一也在本周再次重演 - 周二。我们检查了数据库上的负载是否一致,周一或周二没有高容量。
同一个数据库上的所有其他存储过程按预期工作。但只有这个存储过程会触及几个额外的表占用太多时间。重新编制索引后,它才会恢复正常。这个存储过程在内部调用很少的其他存储过程和函数。
可能出现什么问题?
它不能与网络相关,因为影响仅在一个存储过程上。
它不能与数据库负载或CPU利用率相关,因为影响仅在一个存储过程上。
没有预定的工作只在星期一或星期二运行。
答案 0 :(得分:0)
我会查看活动,了解占用大多数CPU的进程,并使用SQL事件探查器查看查询占用的资源量。由于您确定存储过程占用了太多CPU,因此您必须检查查询的执行方式。
在查询分析器中,启用“显示实际执行计划”。这是我将检查如何执行查询,是否使用索引或表扫描,排序算法等的地方。它显示消耗最多CPU的功能。如果它是读取查询,我将检查表并查看表的内部碎片以及检索数据所需的传递次数。如果它是写查询,那么我将检查行/表锁和日志。如果将恢复模型从简单更改为完整,则写入可能需要相当长的时间。
如果您已完成执行计划,请在此处粘贴执行带有存储过程的图片,以便我可以看到实际上会降低执行速度的速度。
通过更改SQL查询,索引,查询提示和表分区来修复它们。