Skip to content

Instantly share code, notes, and snippets.

@gwalkey
Created October 12, 2022 14:21
Show Gist options
  • Save gwalkey/a3a740b59d3dd0fef21ddd3b4f2c7a32 to your computer and use it in GitHub Desktop.
Save gwalkey/a3a740b59d3dd0fef21ddd3b4f2c7a32 to your computer and use it in GitHub Desktop.
Azure Data Studio Notebook for DBAs
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"kernelspec": {
"name": "SQL",
"display_name": "SQL",
"language": "sql"
},
"language_info": {
"name": "sql",
"version": ""
}
},
"nbformat_minor": 2,
"nbformat": 4,
"cells": [
{
"cell_type": "markdown",
"source": [
"# Query Store - Queries that run longer than 30 Seconds"
],
"metadata": {
"azdata_cell_guid": "2b0f009d-af26-4b63-9b2e-15b153683186"
},
"attachments": {}
},
{
"cell_type": "code",
"source": [
"SELECT TOP (100)\r\n",
" p.query_id query_id,\r\n",
"\tp.plan_id plan_id,\r\n",
" q.object_id,\r\n",
"\tISNULL(OBJECT_NAME(q.object_id),'Unknown') object_name,\r\n",
" qt.query_sql_text query_sql_text,\r\n",
"\tROUND(CONVERT(float, SUM(rs.max_duration*rs.count_executions))/NULLIF(SUM(rs.count_executions), 0)*0.001,2) max_duration_ms,\r\n",
"\tMAX(rs.last_execution_time) AS 'LastExecutiontime',\r\n",
" SUM(rs.count_executions) count_executions,\r\n",
" COUNT(DISTINCT p.plan_id) num_plans\r\n",
"FROM sys.query_store_runtime_stats rs\r\n",
" JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id\r\n",
" JOIN sys.query_store_query q ON q.query_id = p.query_id\r\n",
" JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id\r\n",
"WHERE \r\n",
"\t(rs.last_execution_time >= '01-01-2022' AND rs.last_execution_time <= getdate())\r\n",
"GROUP BY \r\n",
"\tp.query_id, p.plan_id, qt.query_sql_text, q.object_id\r\n",
"-- 15 Second Timeouts\r\n",
"HAVING \r\n",
"\tROUND(CONVERT(float, SUM(rs.max_duration*rs.count_executions))/NULLIF(SUM(rs.count_executions), 0)*0.001,2)>15000\r\n",
"ORDER BY \r\n",
"\t6 DESC\r\n",
""
],
"metadata": {
"azdata_cell_guid": "c7d5d61a-2d46-470e-b537-c886397b6f13",
"language": "sql",
"tags": []
},
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"source": [
"# Whats Running Now"
],
"metadata": {
"azdata_cell_guid": "c2b58876-52ea-46e5-bf1f-e49564ae7b4f"
},
"attachments": {}
},
{
"cell_type": "code",
"source": [
"--- 1 Work In Process\r\n",
"--- Ignore me - This is not the query you are looking for\r\n",
"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED\r\n",
"USE master\r\n",
"GO\r\n",
"\r\n",
"SELECT\r\n",
"\tsp.session_Id AS 'Spid'\r\n",
"\t,er.blocking_session_id AS 'BlockedBy'\r\n",
"\t,DB_NAME(er.database_id) AS 'Database'\r\n",
"\t,Host_name AS 'HostName'\r\n",
"\t,sp.login_name AS 'User'\r\n",
"\t,er.command AS 'Command'\r\n",
"\t,CASE er.transaction_isolation_level\r\n",
"\t\tWHEN 1 THEN 'ReadUncommitted'\r\n",
"\t\tWHEN 2 THEN 'ReadCommitted'\r\n",
"\t\tWHEN 3 THEN 'Repeatable'\r\n",
"\t\tWHEN 4 THEN 'Serializable'\r\n",
"\t\tWHEN 5 THEN 'Snapshot'\r\n",
"\t\tELSE 'Unspecified'\r\n",
"\tEND\tAS TrnIsoLevel\r\n",
"\t,er.dop AS 'Dop'\r\n",
"\t,sp.open_transaction_count AS 'OpenTrans'\r\n",
"\t,er.cpu_time AS 'CPUTime'\r\n",
"\t,er.Logical_reads AS 'Logical Reads'\r\n",
"\t,er.reads\r\n",
"\t,er.writes\r\n",
"\t,er.row_count AS 'Rows'\r\n",
"\t,er.granted_query_memory as 'MemGrantKB'\r\n",
"\t,er.status AS [Status]\r\n",
"\t,er.wait_type AS [WaitType]\r\n",
"\t,program_name AS 'Application'\r\n",
"\t,p.query_plan as 'QueryPlan'\r\n",
"\t,CAST('<?query --'+CHAR(13)+SUBSTRING(qt.text,\r\n",
"\t(er.statement_start_offset / 2)+1,\r\n",
"\t((CASE er.statement_end_offset\r\n",
"\t\tWHEN -1 THEN DATALENGTH(qt.text)\r\n",
"\t\tELSE er.statement_end_offset\r\n",
"\t END - er.statement_start_offset)/2) + 1)+CHAR(13)+'--?>' AS XML) AS SqlStmt\r\n",
"\t, qt.text AS [ParentQuery]\r\n",
"\t,er.request_id AS 'RequestID'\r\n",
"\t,er.percent_complete\r\n",
"\t,start_time AS 'Started'\r\n",
"\t,DATEADD(ms,er.estimated_completion_time,GETDATE()) AS [ETA Completion]\r\n",
"\t,CONVERT(NUMERIC(10,2),er.estimated_completion_time/1000.0/60.0) AS [ETA Mins]\r\n",
"FROM\r\n",
"\tsys.dm_exec_requests er\r\n",
"INNER JOIN\r\n",
"\tsys.dm_exec_sessions sp\r\n",
"ON\r\n",
"\ter.session_id = sp.session_id\r\n",
"OUTER APPLY\r\n",
"\tsys.dm_exec_sql_text(er.sql_handle)AS qt\r\n",
"OUTER APPLY\r\n",
"\tsys.dm_exec_query_plan(er.plan_handle) p\r\n",
"WHERE\r\n",
"\tsp.is_user_process = 1\r\n",
"\t/* sp.session_Id > 50\r\n",
"\t-- Ignore system spids. -- */\r\n",
"\tAND sp.session_Id <> @@SPID\r\n",
"\t-- Search for Specific Query Text\r\n",
"\t-- AND qt.text like N'%'+N'vStatement'+N'%'\r\n",
"\t--ORDER BY \r\n",
"\t--1, 2\r\n",
"\t--cpu_time desc\r\n",
"\tAND\tsp.program_name NOT LIKE 'DatabaseMail%'\r\n",
"\r\n",
"--- 2 Locking\r\n",
"--- Look for any Locks blocking others \r\n",
"SELECT\r\n",
"\t*\r\n",
"FROM\r\n",
"\tsys.dm_os_waiting_tasks t\r\n",
"inner join\r\n",
"\tsys.dm_exec_connections c\r\n",
"ON\r\n",
"\tc.session_id = t.blocking_session_id\r\n",
"cross apply\r\n",
"\tsys.dm_exec_sql_text(c.most_recent_sql_handle) as h1\r\n",
"\r\n",
"--- 3 Current Sessions\r\n",
"exec sp_who2\r\n",
"\r\n",
"--- 4 show all threads, use Process Explorer to suspend the thread KPID\r\n",
"--select * from master..sysprocesses --where spid = 64\r\n",
""
],
"metadata": {
"azdata_cell_guid": "22349c03-a5c8-4a3c-a436-1027dfb3fc76",
"language": "sql",
"tags": []
},
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"source": [
"# Current Locks"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "c4c59a0f-cb3d-4ab0-bf96-f0da5513ef56"
},
"attachments": {}
},
{
"cell_type": "code",
"source": [
"SELECT \r\n",
" HostName,\r\n",
" \"OS UserName\",\r\n",
" Login, \r\n",
" spid, \r\n",
" \"Database\", \r\n",
" TableID,\r\n",
" \"Table Name\", \r\n",
" IndID, \r\n",
" \"Lock Type\", \r\n",
" \"Lock Mode\", \r\n",
"\tLM,\r\n",
" Status, \r\n",
" Resource,\r\n",
" COUNT(*) AS \"Lock Count\"\r\n",
"FROM (\r\n",
" SELECT\r\n",
" CONVERT(VARCHAR(30), RTRIM(P.HostName)) AS 'HostName',\r\n",
" CONVERT(VARCHAR(30), RTRIM(P.nt_UserName)) AS 'OS UserName',\r\n",
" CONVERT(VARCHAR(30), SUSER_SNAME(p.sid)) AS 'Login', \r\n",
" CONVERT(SMALLINT,req_spid) AS 'spid',\r\n",
" CONVERT(VARCHAR(30), DB_NAME(rsc_dbid)) AS 'Database',\r\n",
" rsc_objid AS 'TableID',\r\n",
"\t\tCONVERT(VARCHAR(30), OBJECT_NAME(rsc_objid, rsc_dbid)) AS 'Table Name',\r\n",
" rsc_indid AS 'IndID', \r\n",
" CASE SUBSTRING (lock_type.name, 1, 4) \r\n",
" WHEN '' THEN 'None'\r\n",
" WHEN 'DB' THEN 'Database'\r\n",
" WHEN 'FIL' THEN 'File'\r\n",
" WHEN 'IDX' THEN 'Index'\r\n",
" WHEN 'TAB' THEN 'Table'\r\n",
" WHEN 'PAG' THEN 'Page'\r\n",
" WHEN 'KEY' THEN 'Key'\r\n",
" WHEN 'EXT' THEN 'Extent'\r\n",
" WHEN 'RID' THEN 'Row ID'\r\n",
" WHEN 'APP' Then 'Application'\r\n",
" Else SubString (lock_type.name, 1, 4)\r\n",
" END AS 'Lock Type',\t\t\r\n",
" Case SubString (lock_mode.name, 1, 12)\r\n",
" When NULL Then 'N/A'\r\n",
" When 'Sch-S' Then 'SCHEMA (Stability)'--'SCHEMA stability lock'\r\n",
" When 'Sch-M' Then 'SCHEMA (Modification)'--'SCHEMA modification lock'\r\n",
" When 'S' Then 'SHARED'--'SHARED Lock acquisition'\r\n",
" When 'U' Then 'UPDATE'--'UPDATE lock acquisition'\r\n",
" When 'X' Then 'EXCLUSIVE'--'EXCLUSIVE lock granted'\r\n",
" When 'IS' Then 'SHARED (Intent)'--'INTENT for SHARED lock'\r\n",
" When 'IU' Then 'UPDATE (Intent)'--'INTENT for UPDATE lock'\r\n",
" When 'IX' Then 'EXCLUSIVE (Intent)'--'INTENT for EXCLUSIVE lock'\r\n",
" When 'SIU' Then 'SHARED (Intent UPDATE)'--'SHARED lock with INTENT for UPDATE'\r\n",
" When 'SIX' Then 'SHARED (Intent EXCLUSIVE)'--'SHARED lock with INTENT for EXCLUSIVE'\r\n",
" When 'UIX' Then 'UPDATE'--'UPDATE lock with INTENT for EXCLUSIVE'\r\n",
" When 'BU' Then 'UPDATE (BULK)'--'BULK UPDATE lock'\r\n",
" Else SubString (lock_mode.name, 1, 12)\r\n",
" END AS 'Lock Mode', \r\n",
"\t\tSubString (lock_mode.name, 1, 12) AS 'LM',\r\n",
" SubString(lock_status.name, 1, 5) AS 'Status',\r\n",
" SubString (rsc_text, 1, 16) AS 'Resource'\r\n",
" FROM \r\n",
" Master..SysLockInfo S\r\n",
" JOIN Master..spt_values lock_type on S.rsc_type = lock_type.number\r\n",
" JOIN Master..spt_values lock_status on S.req_status = lock_status.number\r\n",
" JOIN Master..spt_values lock_mode on S.req_mode = lock_mode.number -1\r\n",
" JOIN Master..SysProcesses P on S.req_spid = P.spid\r\n",
" WHERE\r\n",
" lock_type.type = 'LR'\r\n",
" AND lock_status.type = 'LS'\r\n",
" AND lock_mode.type = 'L'\r\n",
" AND DB_Name(rsc_dbid) NOT IN ('master', 'msdb', 'model')\r\n",
" ) AS X\r\n",
"WHERE TableID > 0\r\n",
"GROUP BY \r\n",
" [HostName],\r\n",
" [OS UserName],\r\n",
" [Login], \r\n",
" [spid], \r\n",
" [Database], \r\n",
" [TableID],\r\n",
" [Table Name], \r\n",
" [IndID], \r\n",
" [Lock Type], \r\n",
" [Lock Mode], \r\n",
"\t[LM],\r\n",
" [Status],\r\n",
"\tresource\r\n",
"ORDER BY\r\n",
" [spid], [Database], [Table Name], [Lock Type], [Login]\r\n",
"\r\n",
"--- Check the Messages Tab\r\n",
"DBCC opentran"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "89c38cdd-03a5-41a4-9503-54b16f95eb4d"
},
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"source": [
"# Index Performance"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "49e3476e-f7f7-47f1-8b90-2d95d058b7af"
},
"attachments": {}
},
{
"cell_type": "code",
"source": [
"--- Index Scan/Seek/Lookup/Update Breakdown\r\n",
"\r\n",
"SELECT\r\n",
"\tDB_NAME([ddius].[database_id]) AS [database name],\r\n",
"\ts.[name] AS 'Schema_Name',\r\n",
"\tOBJECT_NAME([ddius].[object_id]) AS [Table name],\r\n",
"\tCASE\r\n",
"\t\tWHEN ddius.index_id=1 THEN '*'+[i].[name]+'*'\r\n",
"\t\tELSE [i].[name]\r\n",
"\tEND AS [index name],\r\n",
"\ti.is_unique,\t\r\n",
"\tddius.database_id,\r\n",
"\t--ddius.object_id,\r\n",
"\tddius.index_id,\r\n",
"\tp.partition_number,\r\n",
"\tddius.user_seeks,\r\n",
"\tddius.user_scans,\r\n",
"\tddius.user_lookups,\r\n",
"\tddius.user_updates,\r\n",
"\tddius.system_seeks,\r\n",
"\tddius.system_scans,\r\n",
"\tddius.system_lookups,\r\n",
"\tddius.system_updates,\r\n",
"\tCAST(p.used_page_count * 0.0078125 AS NUMERIC(18,2)) AS 'UsedPages_MB',\r\n",
"\tp.[ROW_COUNT] AS 'RowCount'\r\n",
"FROM\r\n",
"\t[sys].[dm_db_index_usage_stats] AS ddius\r\n",
"INNER JOIN\r\n",
"\t[sys].[indexes] AS i\r\n",
"ON\r\n",
"\t[ddius].[index_id] = [i].[index_id] AND [ddius].[object_id] = [i].[object_id]\r\n",
"JOIN\r\n",
"\tsys.dm_db_partition_stats p\r\n",
"ON\t\r\n",
"\ti.OBJECT_ID = p.OBJECT_ID AND i.index_id = p.index_id\r\n",
"JOIN\r\n",
"\tsys.objects O\r\n",
"ON O.object_id = ddius.object_id\r\n",
"JOIN\r\n",
"\tsys.schemas S\r\n",
"ON S.schema_id = O.schema_id\r\n",
"WHERE\r\n",
"\tOBJECT_NAME([ddius].[object_id])<>'sysdiagrams' -- filter out sysdiagrams UML table\r\n",
" AND OBJECTPROPERTY(ddius.OBJECT_ID, 'IsUserTable') = 1 -- User Tables Only\r\n",
"\tAND ddius.index_id > 0 -- filter out heaps\r\n",
"\tAND ddius.database_id = db_id() -- current DB only\r\n",
"\tAND ddius.index_id>1 -- NCIX only\r\n",
"ORDER BY\r\n",
"\t1,2,3"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "3d81f509-f920-4341-a41f-fa5d672baf01"
},
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"source": [
"# Connections Per Database"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "5c431d77-886a-4c66-877f-a2f33c7ad1a3"
},
"attachments": {}
},
{
"cell_type": "code",
"source": [
"--- Simple\r\n",
"SELECT\r\n",
"\t@@SERVERNAME AS 'Server',\r\n",
"\tDB_NAME(dbid) as 'Database',\r\n",
"\tCOUNT(dbid) as 'Number Of Open Connections'\r\n",
"FROM\r\n",
"\tsys.sysprocesses\r\n",
"WHERE\r\n",
"\tdbid > 0\r\n",
"GROUP BY\r\n",
"\tdbid\r\n",
"with rollup\r\n",
"order by\r\n",
"\t2\r\n",
"\r\n",
"--- Detailed\r\n",
"SELECT\r\n",
"\t@@SERVERNAME AS 'Server',\r\n",
"\tsd.name DBName,\r\n",
"\tsp.dbid,\r\n",
" loginame [Login],\r\n",
" hostname,\r\n",
"\t[program_name] 'Program Name',\r\n",
"\t[spid],\r\n",
" last_batch LastBatch,\r\n",
" blocked BlkBy,\r\n",
"\tsp.[status],\r\n",
"\tcmd Command,\r\n",
" cpu CPUTime,\r\n",
" physical_io DiskIO\r\n",
"FROM sysprocesses sp \r\n",
"JOIN sysdatabases sd ON sp.dbid = sd.dbid\r\n",
"where sp.loginame<>'sa'\r\n",
"ORDER BY 2, 4"
],
"metadata": {
"language": "sql",
"azdata_cell_guid": "a093cba9-a724-4910-a9a1-a7ae488d36f8"
},
"outputs": [],
"execution_count": null
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment