sql-server – 如何找出是谁/什么是锤击SQL Server TempDB

前端之家收集整理的这篇文章主要介绍了sql-server – 如何找出是谁/什么是锤击SQL Server TempDB前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用sql Server 2012 Enterprise.服务器配置了一个可用性组.
实例上有不同工具的几个数据库.这些工具都属于一起,因此推出了.在推出后,我认识到TempDB的perfmon计数器Transaction / sec有所上升.在推出之前,计数器的平均值是30,现在大约是300.
在过去,我已经遇到了类似的问题,并发现一个工具的新版本实现了一直被调用的游标.但这次这似乎不是问题.我使用sql分析器跟踪游标事件但没有找到任何有趣的东西.我还尝试使用tempDB本身的过滤器进行跟踪,但看起来没有任何进展.

有谁知道如何在TempDB中找出造成这些高交易率的人或者是什么?

我不确定这可能是一个性能问题,但我想知道为什么这个数字改变了那么多.

解决方法

我过去曾使用过这个脚本来查看哪个spid在tempdb中有很多页面
;WITH s AS
(
    SELECT 
        s.session_id,[pages] = SUM(s.user_objects_alloc_page_count 
          + s.internal_objects_alloc_page_count) 
    FROM sys.dm_db_session_space_usage AS s
    GROUP BY s.session_id
    HAVING SUM(s.user_objects_alloc_page_count 
      + s.internal_objects_alloc_page_count) > 0
)
SELECT s.session_id,s.[pages],t.[text],[statement] = COALESCE(NULLIF(
    SUBSTRING(
        t.[text],r.statement_start_offset / 2,CASE WHEN r.statement_end_offset < r.statement_start_offset 
        THEN 0 
        ELSE( r.statement_end_offset - r.statement_start_offset ) / 2 END
      ),''
    ),t.[text])
FROM s
LEFT OUTER JOIN 
sys.dm_exec_requests AS r
ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(r.plan_handle) AS t
ORDER BY s.[pages] DESC;

(不记得我从哪里得到它,对不起).这不会给你带来罪魁祸首(因为他可能一遍又一遍地写同样的页面).

使用此脚本可以为您提供执行大量IO操作的人员:

SELECT TOP 10 SUBSTRING(qt.TEXT,(qs.statement_start_offset/2)+1,((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),qs.execution_count,qs.total_logical_reads,qs.last_logical_reads,qs.total_logical_writes,qs.last_logical_writes,qs.total_worker_time,qs.last_worker_time,qs.total_elapsed_time/1000000 total_elapsed_time_in_S,qs.last_elapsed_time/1000000 last_elapsed_time_in_S,qs.last_execution_time,qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- cpu time

(Thanks Dave!)

结合这两个应该给你一个好主意.

猜你在找的MsSQL相关文章