Sql
確定使用查詢鎖定 SQL Server 的最佳方法是什麼?
最近我們的 SQL Server 陷入了困境。我想知道通過查詢數據庫來檢查可能導致問題的最佳方法是什麼。這是迄今為止我發現的最好的:
SELECT SPID = s.spid , BlockingSPID = s.blocked , DatabaseName = DB_NAME(s.dbid) , ProgramName = s.program_name , [Status] = s.[status] , LoginName = s.loginame , ObjectName = OBJECT_NAME(objectid, s.dbid) , [Definition] = CAST([text] AS VARCHAR(MAX)) FROM sys.sysprocesses s CROSS APPLY sys.dm_exec_sql_text (sql_handle) WHERE s.spid > 50 ORDER BY DatabaseName , loginName
這是一個很好的起點。您還應該使用 sys.dm_os_waiting_tasks DMV 查看等待情況,它會告訴您哪個資源導致每個程序等待。
select wait_type, sum(wait_duration_ms) sum_wait_duration_ms, avg(wait_duration_ms) avg_wait_duration_ms, count(*) waits from sys.dm_os_waiting_tasks group by wait_type