我有一个应用程序,允许用户一次搜索数百万条记录。当搜索没有及时返回时,用户退出应用程序,重新登录并重新提交搜索。
SQL服务器不知道用户已注销,并且它不应该仍在运行搜索,因此我最终会同时执行许多相同的查询。现在我只运行一个脚本,向我显示已运行5分钟或更长时间的内容(请注意,这些搜索非常激烈且可以运行数小时),如何检测重复查询何时运行?
谢谢,
菲利普
答案 0 :(得分:1)
您可以运行此位SQL并检查文本值:
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
答案 1 :(得分:0)
作为@kell mentioned,通过该查询,您可以找到运行时间最长的查询,虽然它有一些问题,但如果您阅读this information,您还可以修复已知问题。
顺便说一下,我想你为什么不把这份工作留给sql-server。 Sql server具有内部功能,可以查找查询重复,优化和缓存。如果缓存了相同sql查询的结果,它会好得多。
微软发布了sql-server-2008缓存的最佳实践文章。 Read it。