Last active
October 18, 2018 05:19
-
-
Save odytrice/92a5a15cacc216f03d3a9f4eb4743b8f to your computer and use it in GitHub Desktop.
Troubleshooting SQL Server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# DANGER - Kills all processes for a specific database | |
-- DECLARE @SQL varchar(max); | |
-- SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, r.session_id) + ';' from sys.dm_exec_requests r left join sys.dm_os_waiting_tasks t | |
-- on r.session_id = t.session_id where r.session_id >= 50 and r.session_id <> @@spid | |
-- EXEC(@SQL) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Find queries that take the most CPU overall | |
SELECT TOP 50 | |
ObjectName = OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
,TextData = qt.text | |
,DiskReads = qs.total_physical_reads -- The worst reads, disk reads | |
,MemoryReads = qs.total_logical_reads --Logical Reads are memory reads | |
,Executions = qs.execution_count | |
,TotalCPUTime = qs.total_worker_time | |
,AverageCPUTime = qs.total_worker_time/qs.execution_count | |
,DiskWaitAndCPUTime = qs.total_elapsed_time | |
,MemoryWrites = qs.max_logical_writes | |
,DateCached = qs.creation_time | |
,DatabaseName = DB_Name(qt.dbid) | |
,LastExecutionTime = qs.last_execution_time | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
ORDER BY qs.total_worker_time DESC | |
-- Find queries that have the highest average CPU usage | |
SELECT TOP 50 | |
ObjectName = OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
,TextData = qt.text | |
,DiskReads = qs.total_physical_reads -- The worst reads, disk reads | |
,MemoryReads = qs.total_logical_reads --Logical Reads are memory reads | |
,Executions = qs.execution_count | |
,TotalCPUTime = qs.total_worker_time | |
,AverageCPUTime = qs.total_worker_time/qs.execution_count | |
,DiskWaitAndCPUTime = qs.total_elapsed_time | |
,MemoryWrites = qs.max_logical_writes | |
,DateCached = qs.creation_time | |
,DatabaseName = DB_Name(qt.dbid) | |
,LastExecutionTime = qs.last_execution_time | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
ORDER BY qs.total_worker_time/qs.execution_count DESC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************** | |
* top procedures memory consumption per execution | |
* (this will show mostly reports & jobs) | |
***********************************************************/ | |
SELECT TOP 100 * | |
FROM | |
( | |
SELECT | |
DatabaseName = DB_NAME(qt.dbid) | |
,qt.dbid | |
,ObjectName = OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
,DiskReads = SUM(qs.total_physical_reads) -- The worst reads, disk reads | |
,MemoryReads = SUM(qs.total_logical_reads) --Logical Reads are memory reads | |
,Executions = SUM(qs.execution_count) | |
,IO_Per_Execution = SUM((qs.total_physical_reads + qs.total_logical_reads) / qs.execution_count) | |
,CPUTime = SUM(qs.total_worker_time) | |
,DiskWaitAndCPUTime = SUM(qs.total_elapsed_time) | |
,MemoryWrites = SUM(qs.max_logical_writes) | |
,DateLastExecuted = MAX(qs.last_execution_time) | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
GROUP BY DB_NAME(qt.dbid), qt.dbid, OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
) T | |
ORDER BY IO_Per_Execution DESC | |
/********************************************************** | |
* top procedures memory consumption total | |
* (this will show more operational procedures) | |
***********************************************************/ | |
SELECT TOP 100 * | |
FROM | |
( | |
SELECT | |
DatabaseName = DB_NAME(qt.dbid) | |
,ObjectName = OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
,DiskReads = SUM(qs.total_physical_reads) -- The worst reads, disk reads | |
,MemoryReads = SUM(qs.total_logical_reads) --Logical Reads are memory reads | |
,Total_IO_Reads = SUM(qs.total_physical_reads + qs.total_logical_reads) | |
,Executions = SUM(qs.execution_count) | |
,IO_Per_Execution = SUM((qs.total_physical_reads + qs.total_logical_reads) / qs.execution_count) | |
,CPUTime = SUM(qs.total_worker_time) | |
,DiskWaitAndCPUTime = SUM(qs.total_elapsed_time) | |
,MemoryWrites = SUM(qs.max_logical_writes) | |
,DateLastExecuted = MAX(qs.last_execution_time) | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
GROUP BY DB_NAME(qt.dbid), OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
) T | |
ORDER BY Total_IO_Reads DESC | |
/********************************************************** | |
* top adhoc queries memory consumption total | |
***********************************************************/ | |
SELECT TOP 100 * | |
FROM | |
( | |
SELECT | |
DatabaseName = DB_NAME(qt.dbid) | |
,QueryText = qt.text | |
,DiskReads = SUM(qs.total_physical_reads) -- The worst reads, disk reads | |
,MemoryReads = SUM(qs.total_logical_reads) --Logical Reads are memory reads | |
,Total_IO_Reads = SUM(qs.total_physical_reads + qs.total_logical_reads) | |
,Executions = SUM(qs.execution_count) | |
,IO_Per_Execution = SUM((qs.total_physical_reads + qs.total_logical_reads) / qs.execution_count) | |
,CPUTime = SUM(qs.total_worker_time) | |
,DiskWaitAndCPUTime = SUM(qs.total_elapsed_time) | |
,MemoryWrites = SUM(qs.max_logical_writes) | |
,DateLastExecuted = MAX(qs.last_execution_time) | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
WHERE OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) IS NULL | |
GROUP BY DB_NAME(qt.dbid), qt.text, OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
) T | |
ORDER BY Total_IO_Reads DESC | |
/********************************************************** | |
* top adhoc queries memory consumption per execution | |
***********************************************************/ | |
SELECT TOP 100 * | |
FROM | |
( | |
SELECT | |
DatabaseName = DB_NAME(qt.dbid) | |
,QueryText = qt.text | |
,DiskReads = SUM(qs.total_physical_reads) -- The worst reads, disk reads | |
,MemoryReads = SUM(qs.total_logical_reads) --Logical Reads are memory reads | |
,Total_IO_Reads = SUM(qs.total_physical_reads + qs.total_logical_reads) | |
,Executions = SUM(qs.execution_count) | |
,IO_Per_Execution = SUM((qs.total_physical_reads + qs.total_logical_reads) / qs.execution_count) | |
,CPUTime = SUM(qs.total_worker_time) | |
,DiskWaitAndCPUTime = SUM(qs.total_elapsed_time) | |
,MemoryWrites = SUM(qs.max_logical_writes) | |
,DateLastExecuted = MAX(qs.last_execution_time) | |
FROM sys.dm_exec_query_stats AS qs | |
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt | |
WHERE OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) IS NULL | |
GROUP BY DB_NAME(qt.dbid), qt.text, OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) | |
) T | |
ORDER BY IO_Per_Execution DESC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;WITH src AS | |
( | |
SELECT | |
[Object] = o.name, | |
[Type] = o.type_desc, | |
[Index] = COALESCE(i.name, ''), | |
[Index_Type] = i.type_desc, | |
p.[object_id], | |
p.index_id, | |
au.allocation_unit_id | |
FROM | |
sys.partitions AS p | |
INNER JOIN | |
sys.allocation_units AS au | |
ON p.hobt_id = au.container_id | |
INNER JOIN | |
sys.objects AS o | |
ON p.[object_id] = o.[object_id] | |
INNER JOIN | |
sys.indexes AS i | |
ON o.[object_id] = i.[object_id] | |
AND p.index_id = i.index_id | |
WHERE | |
au.[type] IN (1,2,3) | |
AND o.is_ms_shipped = 0 | |
) | |
SELECT | |
src.[Object], | |
src.[Type], | |
src.[Index], | |
src.Index_Type, | |
buffer_pages = COUNT_BIG(b.page_id), | |
buffer_mb = COUNT_BIG(b.page_id) / 128 | |
FROM | |
src | |
INNER JOIN | |
sys.dm_os_buffer_descriptors AS b | |
ON src.allocation_unit_id = b.allocation_unit_id | |
WHERE | |
b.database_id = DB_ID() | |
GROUP BY | |
src.[Object], | |
src.[Type], | |
src.[Index], | |
src.Index_Type | |
ORDER BY | |
buffer_pages DESC; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select session_id, status, command, blocking_session_id, wait_type, wait_time, | |
last_wait_type, wait_resource, r.[user_id] , DB_NAME(r.database_id), r.[context_info] | |
from sys.dm_exec_requests r where r.session_id >= 50 and r.session_id <> @@spid | |
ORDER BY r.wait_time DESC | |
select r.session_id, status, command, r.blocking_session_id, r.wait_type as [request_wait_type], r.wait_time as [request_wait_time], t.wait_type as [task_wait_type], | |
t.wait_duration_ms as [task_wait_time], t.blocking_session_id, t.resource_description from sys.dm_exec_requests r left join sys.dm_os_waiting_tasks t | |
on r.session_id = t.session_id where r.session_id >= 50 and r.session_id <> @@spid | |
DECLARE @sqltext VARBINARY(128) | |
SELECT @sqltext = sql_handle | |
FROM sys.sysprocesses | |
WHERE spid = 1645 | |
SELECT TEXT | |
FROM sys.dm_exec_sql_text(@sqltext) | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment