我们目前管理运行存储过程的网络应用程序,其中一个存储过程在用户搜索特定项目时被触发。不幸的是,有一天我们遇到了一个非常严重的问题,因为这个存储过程变得很慢,导致数据库性能非常差。最终这给我们的应用程序带来了许多问题。我通过运行以下数据库脚本发现长时间运行的查询是引起问题的原因:
SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
where
sqltext.[Text] NOT LIKE '--''check%'
ORDER BY req.cpu_time DESC
所以,我们为了解决这个问题,执行了KILL [SESSION_ID]命令,几秒钟后,应用程序就恢复正常了。现在,我们希望能够主动处理这种类型的问题。当我说“控制”时,我想知道是否可能使Web应用程序能够在一定时间后优雅地终止会话(不会导致后续问题),或者它应该由SQL Server自己来处理?如果还需要进一步澄清,请随意发表评论。