2016-01-26 19:30:02 +00:00
package sqlserver
import (
"database/sql"
"sync"
"time"
2017-10-03 00:15:34 +00:00
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs"
2016-01-26 19:30:02 +00:00
// go-mssqldb initialization
_ "github.com/zensqlmonitor/go-mssqldb"
)
// SQLServer struct
type SQLServer struct {
2018-02-01 19:50:26 +00:00
Servers [ ] string ` toml:"servers" `
QueryVersion int ` toml:"query_version" `
AzureDB bool ` toml:"azuredb" `
ExcludeQuery [ ] string ` toml:"exclude_query" `
2016-01-26 19:30:02 +00:00
}
// Query struct
type Query struct {
Script string
ResultByRow bool
OrderedColumns [ ] string
}
// MapQuery type
type MapQuery map [ string ] Query
var queries MapQuery
2018-02-01 19:50:26 +00:00
// Initialized flag
var isInitialized = false
2016-01-26 19:30:02 +00:00
var defaultServer = "Server=.;app name=telegraf;log=1;"
var sampleConfig = `
2018-02-01 20:13:49 +00:00
# # Specify instances to monitor with a list of connection strings .
# # All connection parameters are optional .
# # By default , the host is localhost , listening on default port , TCP 1433.
# # for Windows , the user is the currently running AD user ( SSO ) .
# # See https : //github.com/denisenkom/go-mssqldb for detailed connection
# # parameters .
# servers = [
# "Server=192.168.1.10;Port=1433;User Id=<user>;Password=<pw>;app name=telegraf;log=1;" ,
# ]
# # Optional parameter , setting this to 2 will use a new version
# # of the collection queries that break compatibility with the original
# # dashboards .
query_version = 2
# # If you are using AzureDB , setting this to true will gather resource utilization metrics
# azuredb = false
# # If you would like to exclude some of the metrics queries , list them here
# # Possible choices :
# # - PerformanceCounters
# # - WaitStatsCategorized
# # - DatabaseIO
# # - DatabaseProperties
# # - CPUHistory
# # - DatabaseSize
# # - DatabaseStats
# # - MemoryClerk
# # - VolumeSpace
# # - PerformanceMetrics
# exclude_query = [ ' PerformanceCounters ',' WaitStatsCatagorized ' ]
2016-01-26 19:30:02 +00:00
`
// SampleConfig return the sample configuration
func ( s * SQLServer ) SampleConfig ( ) string {
return sampleConfig
}
// Description return plugin description
func ( s * SQLServer ) Description ( ) string {
return "Read metrics from Microsoft SQL Server"
}
type scanner interface {
Scan ( dest ... interface { } ) error
}
2018-02-01 19:50:26 +00:00
func initQueries ( s * SQLServer ) {
2016-01-26 19:30:02 +00:00
queries = make ( MapQuery )
2018-02-01 19:50:26 +00:00
// If this is an AzureDB instance, grab some extra metrics
if s . AzureDB {
queries [ "AzureDB" ] = Query { Script : sqlAzureDB , ResultByRow : true }
}
// Decide if we want to run version 1 or version 2 queries
if s . QueryVersion == 2 {
queries [ "PerformanceCounters" ] = Query { Script : sqlPerformanceCountersV2 , ResultByRow : true }
queries [ "WaitStatsCategorized" ] = Query { Script : sqlWaitStatsCategorizedV2 , ResultByRow : false }
queries [ "DatabaseIO" ] = Query { Script : sqlDatabaseIOV2 , ResultByRow : false }
queries [ "ServerProperties" ] = Query { Script : sqlServerPropertiesV2 , ResultByRow : false }
queries [ "MemoryClerk" ] = Query { Script : sqlMemoryClerkV2 , ResultByRow : false }
} else {
queries [ "PerformanceCounters" ] = Query { Script : sqlPerformanceCounters , ResultByRow : true }
queries [ "WaitStatsCategorized" ] = Query { Script : sqlWaitStatsCategorized , ResultByRow : false }
queries [ "CPUHistory" ] = Query { Script : sqlCPUHistory , ResultByRow : false }
queries [ "DatabaseIO" ] = Query { Script : sqlDatabaseIO , ResultByRow : false }
queries [ "DatabaseSize" ] = Query { Script : sqlDatabaseSize , ResultByRow : false }
queries [ "DatabaseStats" ] = Query { Script : sqlDatabaseStats , ResultByRow : false }
queries [ "DatabaseProperties" ] = Query { Script : sqlDatabaseProperties , ResultByRow : false }
queries [ "MemoryClerk" ] = Query { Script : sqlMemoryClerk , ResultByRow : false }
queries [ "VolumeSpace" ] = Query { Script : sqlVolumeSpace , ResultByRow : false }
queries [ "PerformanceMetrics" ] = Query { Script : sqlPerformanceMetrics , ResultByRow : false }
}
for _ , query := range s . ExcludeQuery {
delete ( queries , query )
}
// Set a flag so we know that queries have already been initialized
isInitialized = true
2016-01-26 19:30:02 +00:00
}
// Gather collect data from SQL Server
2016-01-27 21:21:36 +00:00
func ( s * SQLServer ) Gather ( acc telegraf . Accumulator ) error {
2018-02-01 19:50:26 +00:00
if ! isInitialized {
initQueries ( s )
}
2016-01-26 19:30:02 +00:00
if len ( s . Servers ) == 0 {
s . Servers = append ( s . Servers , defaultServer )
}
var wg sync . WaitGroup
for _ , serv := range s . Servers {
for _ , query := range queries {
wg . Add ( 1 )
go func ( serv string , query Query ) {
defer wg . Done ( )
2017-04-24 18:13:26 +00:00
acc . AddError ( s . gatherServer ( serv , query , acc ) )
2016-01-26 19:30:02 +00:00
} ( serv , query )
}
}
wg . Wait ( )
2017-04-24 18:13:26 +00:00
return nil
2016-01-26 19:30:02 +00:00
}
2016-01-27 21:21:36 +00:00
func ( s * SQLServer ) gatherServer ( server string , query Query , acc telegraf . Accumulator ) error {
2016-01-26 19:30:02 +00:00
// deferred opening
conn , err := sql . Open ( "mssql" , server )
if err != nil {
return err
}
// verify that a connection can be made before making a query
err = conn . Ping ( )
if err != nil {
// Handle error
return err
}
defer conn . Close ( )
// execute query
rows , err := conn . Query ( query . Script )
if err != nil {
return err
}
defer rows . Close ( )
// grab the column information from the result
query . OrderedColumns , err = rows . Columns ( )
if err != nil {
return err
}
for rows . Next ( ) {
err = s . accRow ( query , acc , rows )
if err != nil {
return err
}
}
return rows . Err ( )
}
2016-01-27 21:21:36 +00:00
func ( s * SQLServer ) accRow ( query Query , acc telegraf . Accumulator , row scanner ) error {
2016-01-26 19:30:02 +00:00
var columnVars [ ] interface { }
var fields = make ( map [ string ] interface { } )
// store the column name with its *interface{}
columnMap := make ( map [ string ] * interface { } )
for _ , column := range query . OrderedColumns {
columnMap [ column ] = new ( interface { } )
}
// populate the array of interface{} with the pointers in the right order
for i := 0 ; i < len ( columnMap ) ; i ++ {
columnVars = append ( columnVars , columnMap [ query . OrderedColumns [ i ] ] )
}
// deconstruct array of variables and send to Scan
err := row . Scan ( columnVars ... )
if err != nil {
return err
}
// measurement: identified by the header
// tags: all other fields of type string
tags := map [ string ] string { }
var measurement string
for header , val := range columnMap {
if str , ok := ( * val ) . ( string ) ; ok {
if header == "measurement" {
measurement = str
} else {
tags [ header ] = str
}
}
}
if query . ResultByRow {
// add measurement to Accumulator
2016-08-31 11:15:14 +00:00
acc . AddFields ( measurement ,
map [ string ] interface { } { "value" : * columnMap [ "value" ] } ,
tags , time . Now ( ) )
2016-01-26 19:30:02 +00:00
} else {
// values
for header , val := range columnMap {
if _ , ok := ( * val ) . ( string ) ; ! ok {
fields [ header ] = ( * val )
}
}
// add fields to Accumulator
acc . AddFields ( measurement , fields , tags , time . Now ( ) )
}
return nil
}
func init ( ) {
2016-01-27 21:21:36 +00:00
inputs . Add ( "sqlserver" , func ( ) telegraf . Input {
2016-01-26 19:30:02 +00:00
return & SQLServer { }
} )
}
2018-02-01 19:50:26 +00:00
// Queries - V2
// Thanks Bob Ward (http://aka.ms/bobwardms)
// and the folks at Stack Overflow (https://github.com/opserver/Opserver/blob/9c89c7e9936b58ad237b30e6f4cc6cd59c406889/Opserver.Core/Data/SQL/SQLInstance.Memory.cs)
// for putting most of the memory clerk definitions online!
const sqlMemoryClerkV2 = ` SELECT
' sqlserver_memory_clerks ' As [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
ISNULL ( clerk_names . name , mc . type ) AS clerk_type ,
SUM ( mc . pages_kb ) AS size_kb
FROM
sys . dm_os_memory_clerks AS mc WITH ( NOLOCK )
LEFT OUTER JOIN ( VALUES
( ' CACHESTORE_BROKERDSH ',' Service Broker Dialog Security Header Cache ' ) ,
( ' CACHESTORE_BROKERKEK ',' Service Broker Key Exchange Key Cache ' ) ,
( ' CACHESTORE_BROKERREADONLY ',' Service Broker ( Read - Only ) ' ) ,
( ' CACHESTORE_BROKERRSB ',' Service Broker Null Remote Service Binding Cache ' ) ,
( ' CACHESTORE_BROKERTBLACS ',' Broker dormant rowsets ' ) ,
( ' CACHESTORE_BROKERTO ',' Service Broker Transmission Object Cache ' ) ,
( ' CACHESTORE_BROKERUSERCERTLOOKUP ',' Service Broker user certificates lookup result cache ' ) ,
( ' CACHESTORE_CLRPROC ',' CLR Procedure Cache ' ) ,
( ' CACHESTORE_CLRUDTINFO ',' CLR UDT Info ' ) ,
( ' CACHESTORE_COLUMNSTOREOBJECTPOOL ',' Column Store Object Pool ' ) ,
( ' CACHESTORE_CONVPRI ',' Conversation Priority Cache ' ) ,
( ' CACHESTORE_EVENTS ',' Event Notification Cache ' ) ,
( ' CACHESTORE_FULLTEXTSTOPLIST ',' Full Text Stoplist Cache ' ) ,
( ' CACHESTORE_NOTIF ',' Notification Store ' ) ,
( ' CACHESTORE_OBJCP ',' Object Plans ' ) ,
( ' CACHESTORE_PHDR ',' Bound Trees ' ) ,
( ' CACHESTORE_SEARCHPROPERTYLIST ',' Search Property List Cache ' ) ,
( ' CACHESTORE_SEHOBTCOLUMNATTRIBUTE ',' SE Shared Column Metadata Cache ' ) ,
( ' CACHESTORE_SQLCP ',' SQL Plans ' ) ,
( ' CACHESTORE_STACKFRAMES ',' SOS_StackFramesStore ' ) ,
( ' CACHESTORE_SYSTEMROWSET ',' System Rowset Store ' ) ,
( ' CACHESTORE_TEMPTABLES ',' Temporary Tables & Table Variables ' ) ,
( ' CACHESTORE_VIEWDEFINITIONS ',' View Definition Cache ' ) ,
( ' CACHESTORE_XML_SELECTIVE_DG ',' XML DB Cache ( Selective ) ' ) ,
( ' CACHESTORE_XMLDBATTRIBUTE ',' XML DB Cache ( Attribute ) ' ) ,
( ' CACHESTORE_XMLDBELEMENT ',' XML DB Cache ( Element ) ' ) ,
( ' CACHESTORE_XMLDBTYPE ',' XML DB Cache ( Type ) ' ) ,
( ' CACHESTORE_XPROC ',' Extended Stored Procedures ' ) ,
( ' MEMORYCLERK_FILETABLE ',' Memory Clerk ( File Table ) ' ) ,
( ' MEMORYCLERK_FSCHUNKER ',' Memory Clerk ( FS Chunker ) ' ) ,
( ' MEMORYCLERK_FULLTEXT ',' Full Text ' ) ,
( ' MEMORYCLERK_FULLTEXT_SHMEM ',' Full - text IG ' ) ,
( ' MEMORYCLERK_HADR ',' HADR ' ) ,
( ' MEMORYCLERK_HOST ',' Host ' ) ,
( ' MEMORYCLERK_LANGSVC ',' Language Service ' ) ,
( ' MEMORYCLERK_LWC ',' Light Weight Cache ' ) ,
( ' MEMORYCLERK_QSRANGEPREFETCH ',' QS Range Prefetch ' ) ,
( ' MEMORYCLERK_SERIALIZATION ',' Serialization ' ) ,
( ' MEMORYCLERK_SNI ',' SNI ' ) ,
( ' MEMORYCLERK_SOSMEMMANAGER ',' SOS Memory Manager ' ) ,
( ' MEMORYCLERK_SOSNODE ',' SOS Node ' ) ,
( ' MEMORYCLERK_SOSOS ',' SOS Memory Clerk ' ) ,
( ' MEMORYCLERK_SQLBUFFERPOOL ',' Buffer Pool ' ) ,
( ' MEMORYCLERK_SQLCLR ',' CLR ' ) ,
( ' MEMORYCLERK_SQLCLRASSEMBLY ',' CLR Assembly ' ) ,
( ' MEMORYCLERK_SQLCONNECTIONPOOL ',' Connection Pool ' ) ,
( ' MEMORYCLERK_SQLGENERAL ',' General ' ) ,
( ' MEMORYCLERK_SQLHTTP ',' HTTP ' ) ,
( ' MEMORYCLERK_SQLLOGPOOL ',' Log Pool ' ) ,
( ' MEMORYCLERK_SQLOPTIMIZER ',' SQL Optimizer ' ) ,
( ' MEMORYCLERK_SQLQERESERVATIONS ',' SQL Reservations ' ) ,
( ' MEMORYCLERK_SQLQUERYCOMPILE ',' SQL Query Compile ' ) ,
( ' MEMORYCLERK_SQLQUERYEXEC ',' SQL Query Exec ' ) ,
( ' MEMORYCLERK_SQLQUERYPLAN ',' SQL Query Plan ' ) ,
( ' MEMORYCLERK_SQLSERVICEBROKER ',' SQL Service Broker ' ) ,
( ' MEMORYCLERK_SQLSERVICEBROKERTRANSPORT ',' Unified Communication Stack ' ) ,
( ' MEMORYCLERK_SQLSOAP ',' SQL SOAP ' ) ,
( ' MEMORYCLERK_SQLSOAPSESSIONSTORE ',' SQL SOAP ( Session Store ) ' ) ,
( ' MEMORYCLERK_SQLSTORENG ',' SQL Storage Engine ' ) ,
( ' MEMORYCLERK_SQLUTILITIES ',' SQL Utilities ' ) ,
( ' MEMORYCLERK_SQLXML ',' SQL XML ' ) ,
( ' MEMORYCLERK_SQLXP ',' SQL XP ' ) ,
( ' MEMORYCLERK_TRACE_EVTNOTIF ',' Trace Event Notification ' ) ,
( ' MEMORYCLERK_XE ',' XE Engine ' ) ,
( ' MEMORYCLERK_XE_BUFFER ',' XE Buffer ' ) ,
( ' MEMORYCLERK_XTP ',' In - Memory OLTP ' ) ,
( ' OBJECTSTORE_LBSS ',' Lbss Cache ( Object Store ) ' ) ,
( ' OBJECTSTORE_LOCK_MANAGER ',' Lock Manager ( Object Store ) ' ) ,
( ' OBJECTSTORE_SECAUDIT_EVENT_BUFFER ',' Audit Event Buffer ( Object Store ) ' ) ,
( ' OBJECTSTORE_SERVICE_BROKER ',' Service Broker ( Object Store ) ' ) ,
( ' OBJECTSTORE_SNI_PACKET ',' SNI Packet ( Object Store ) ' ) ,
( ' OBJECTSTORE_XACT_CACHE ',' Transactions Cache ( Object Store ) ' ) ,
( ' USERSTORE_DBMETADATA ',' DB Metadata ( User Store ) ' ) ,
( ' USERSTORE_OBJPERM ',' Object Permissions ( User Store ) ' ) ,
( ' USERSTORE_SCHEMAMGR ',' Schema Manager ( User Store ) ' ) ,
( ' USERSTORE_SXC ',' SXC ( User Store ) ' ) ,
( ' USERSTORE_TOKENPERM ',' Token Permissions ( User Store ) ' ) ,
( ' USERSTORE_QDSSTMT ',' QDS Statement Buffer ( Pre - persist ) ' ) ,
( ' CACHESTORE_QDSRUNTIMESTATS ',' QDS Runtime Stats ( Pre - persist ) ' ) ,
( ' CACHESTORE_QDSCONTEXTSETTINGS ',' QDS Unique Context Settings ' ) ,
( ' MEMORYCLERK_QUERYDISKSTORE ',' QDS General ' ) ,
( ' MEMORYCLERK_QUERYDISKSTORE_HASHMAP ',' QDS Query / Plan Hash Table ' )
) AS clerk_names ( system_name , name )
ON mc . type = clerk_names . system_name
GROUP BY ISNULL ( clerk_names . name , mc . type )
HAVING SUM ( pages_kb ) >= 1024
OPTION ( RECOMPILE ) ;
`
const sqlDatabaseIOV2 = ` SELECT
' sqlserver_database_io ' As [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
DB_NAME ( [ vfs ] . [ database_id ] ) [ database_name ] ,
vfs . io_stall_read_ms AS read_latency_ms ,
vfs . num_of_reads AS reads ,
vfs . num_of_bytes_read AS read_bytes ,
vfs . io_stall_write_ms AS write_latency_ms ,
vfs . num_of_writes AS writes ,
vfs . num_of_bytes_written AS write_bytes ,
CASE WHEN vfs . file_id = 2 THEN ' LOG ' ELSE ' ROWS ' END AS file_type
FROM
[ sys ] . [ dm_io_virtual_file_stats ] ( NULL , NULL ) AS vfs
OPTION ( RECOMPILE ) ;
`
const sqlServerPropertiesV2 = ` DECLARE @ sys_info TABLE (
cpu_count INT ,
server_memory INT ,
uptime INT
)
IF OBJECT_ID ( ' master . sys . dm_os_sys_info ' ) IS NOT NULL
BEGIN
INSERT INTO @ sys_info ( cpu_count , server_memory , uptime )
EXEC ( ' SELECT cpu_count , physical_memory_kb , DATEDIFF ( MINUTE , sqlserver_start_time , GETDATE ( ) ) FROM sys . dm_os_sys_info ' )
END
SELECT
' sqlserver_server_properties ' As [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
SUM ( CASE WHEN state = 0 THEN 1 ELSE 0 END ) AS db_online ,
SUM ( CASE WHEN state = 1 THEN 1 ELSE 0 END ) AS db_restoring ,
SUM ( CASE WHEN state = 2 THEN 1 ELSE 0 END ) AS db_recovering ,
SUM ( CASE WHEN state = 3 THEN 1 ELSE 0 END ) AS db_recoveryPending ,
SUM ( CASE WHEN state = 4 THEN 1 ELSE 0 END ) AS db_suspect ,
SUM ( CASE WHEN state = 10 THEN 1 ELSE 0 END ) AS db_offline ,
MAX ( sinfo . cpu_count ) AS cpu_count ,
MAX ( sinfo . server_memory ) AS server_memory ,
MAX ( sinfo . uptime ) AS uptime ,
SERVERPROPERTY ( ' ProductVersion ' ) AS sql_version
FROM sys . databases
CROSS APPLY (
SELECT *
FROM @ sys_info
) AS sinfo
WHERE database_id > 4
OPTION ( RECOMPILE ) ;
`
const sqlPerformanceCountersV2 string = ` DECLARE @ PCounters TABLE
(
object_name nvarchar ( 128 ) ,
counter_name nvarchar ( 128 ) ,
instance_name nvarchar ( 128 ) ,
cntr_value bigint ,
cntr_type INT ,
Primary Key ( object_name , counter_name , instance_name )
) ;
INSERT INTO @ PCounters
SELECT DISTINCT
RTrim ( spi . object_name ) object_name ,
RTrim ( spi . counter_name ) counter_name ,
RTrim ( spi . instance_name ) instance_name ,
spi . cntr_value ,
spi . cntr_type
FROM sys . dm_os_performance_counters AS spi
WHERE (
counter_name IN (
' SQL Compilations / sec ' ,
' SQL Re - Compilations / sec ' ,
' User Connections ' ,
' Batch Requests / sec ' ,
' Logouts / sec ' ,
' Logins / sec ' ,
' Processes blocked ' ,
' Latch Waits / sec ' ,
' Full Scans / sec ' ,
' Index Searches / sec ' ,
' Page Splits / sec ' ,
' Page Lookups / sec ' ,
' Page Reads / sec ' ,
' Page Writes / sec ' ,
' Readahead Pages / sec ' ,
' Lazy Writes / sec ' ,
' Checkpoint Pages / sec ' ,
' Page life expectancy ' ,
' Log File ( s ) Size ( KB ) ' ,
' Log File ( s ) Used Size ( KB ) ' ,
' Data File ( s ) Size ( KB ) ' ,
' Transactions / sec ' ,
' Write Transactions / sec ' ,
' Active Temp Tables ' ,
' Temp Tables Creation Rate ' ,
' Temp Tables For Destruction ' ,
' Free Space in tempdb ( KB ) ' ,
' Version Store Size ( KB ) ' ,
' Memory Grants Pending ' ,
' Free list stalls / sec ' ,
' Buffer cache hit ratio ' ,
' Buffer cache hit ratio base '
)
) OR (
instance_name IN ( ' _Total ',' Column store object pool ' )
AND counter_name IN (
' Log Flushes / sec ' ,
' Log Flush Wait Time ' ,
' Lock Timeouts / sec ' ,
' Number of Deadlocks / sec ' ,
' Lock Waits / sec ' ,
' Latch Waits / sec ' ,
' Memory broker clerk size ' ,
' Log Bytes Flushed / sec ' ,
' Bytes Sent to Replica / sec ' ,
' Log Send Queue ' ,
' Bytes Sent to Transport / sec ' ,
' Sends to Replica / sec ' ,
' Bytes Sent to Transport / sec ' ,
' Sends to Transport / sec ' ,
' Bytes Received from Replica / sec ' ,
' Receives from Replica / sec ' ,
' Flow Control Time ( ms / sec ) ' ,
' Flow Control / sec ' ,
' Resent Messages / sec ' ,
' Redone Bytes / sec ' ,
' XTP Memory Used ( KB ) '
) OR (
object_name = ' SQLServer : Database Replica '
AND counter_name IN (
' Log Bytes Received / sec ' ,
' Log Apply Pending Queue ' ,
' Redone Bytes / sec ' ,
' Recovery Queue ' ,
' Log Apply Ready Queue '
)
AND instance_name = ' _Total '
)
) OR (
object_name = ' SQLServer : Database Replica '
AND counter_name IN ( ' Transaction Delay ' )
) OR (
object_name = ' SQLServer : Workload Group Stats '
AND counter_name IN (
' CPU usage % ' ,
' CPU usage % base ' ,
' Queued requests ' ,
' Requests completed / sec ' ,
' Blocked tasks '
)
)
SELECT ' sqlserver_performance ' AS [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
pc . object_name AS [ object ] ,
pc . counter_name AS [ counter ] ,
CASE pc . instance_name WHEN ' _Total ' THEN ' Total ' ELSE ISNULL ( pc . instance_name , ' ' ) END AS [ instance ] ,
CASE WHEN pc . cntr_type = 537003264 AND pc1 . cntr_value > 0 THEN ( pc . cntr_value * 1.0 ) / ( pc1 . cntr_value * 1.0 ) * 100 ELSE pc . cntr_value END AS [ value ] ,
CASE
WHEN pc . cntr_type = 272696576 THEN ' rate '
WHEN pc . cntr_type IN ( 65792 , 537003264 ) THEN ' raw '
ELSE ' unknown '
END AS c_type
FROM @ PCounters AS pc
LEFT OUTER JOIN @ PCounters AS pc1
ON (
pc . counter_name = REPLACE ( pc1 . counter_name , ' base ',' ' )
OR pc . counter_name = REPLACE ( pc1 . counter_name , ' base ',' ( ms ) ' )
)
AND pc . object_name = pc1 . object_name
AND pc . instance_name = pc1 . instance_name
AND pc1 . counter_name LIKE ' % base '
WHERE pc . counter_name NOT LIKE ' % base '
OPTION ( RECOMPILE ) ;
`
const sqlWaitStatsCategorizedV2 string = ` SELECT
' sqlserver_waitstats ' AS [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
ws . wait_type ,
wait_time_ms ,
wait_time_ms - signal_wait_time_ms AS [ resource_wait_ms ] ,
signal_wait_time_ms ,
max_wait_time_ms ,
waiting_tasks_count ,
ISNULL ( wc . wait_category , ' OTHER ' ) AS [ wait_category ]
FROM
sys . dm_os_wait_stats AS ws WITH ( NOLOCK )
LEFT OUTER JOIN ( VALUES
( ' ASYNC_IO_COMPLETION ',' Other Disk IO ' ) ,
( ' ASYNC_NETWORK_IO ',' Network IO ' ) ,
( ' BACKUPIO ',' Other Disk IO ' ) ,
( ' BROKER_CONNECTION_RECEIVE_TASK ',' Service Broker ' ) ,
( ' BROKER_DISPATCHER ',' Service Broker ' ) ,
( ' BROKER_ENDPOINT_STATE_MUTEX ',' Service Broker ' ) ,
( ' BROKER_EVENTHANDLER ',' Service Broker ' ) ,
( ' BROKER_FORWARDER ',' Service Broker ' ) ,
( ' BROKER_INIT ',' Service Broker ' ) ,
( ' BROKER_MASTERSTART ',' Service Broker ' ) ,
( ' BROKER_RECEIVE_WAITFOR ',' User Wait ' ) ,
( ' BROKER_REGISTERALLENDPOINTS ',' Service Broker ' ) ,
( ' BROKER_SERVICE ',' Service Broker ' ) ,
( ' BROKER_SHUTDOWN ',' Service Broker ' ) ,
( ' BROKER_START ',' Service Broker ' ) ,
( ' BROKER_TASK_SHUTDOWN ',' Service Broker ' ) ,
( ' BROKER_TASK_STOP ',' Service Broker ' ) ,
( ' BROKER_TASK_SUBMIT ',' Service Broker ' ) ,
( ' BROKER_TO_FLUSH ',' Service Broker ' ) ,
( ' BROKER_TRANSMISSION_OBJECT ',' Service Broker ' ) ,
( ' BROKER_TRANSMISSION_TABLE ',' Service Broker ' ) ,
( ' BROKER_TRANSMISSION_WORK ',' Service Broker ' ) ,
( ' BROKER_TRANSMITTER ',' Service Broker ' ) ,
( ' CHECKPOINT_QUEUE ',' Idle ' ) ,
( ' CHKPT ',' Tran Log IO ' ) ,
( ' CLR_AUTO_EVENT ',' SQL CLR ' ) ,
( ' CLR_CRST ',' SQL CLR ' ) ,
( ' CLR_JOIN ',' SQL CLR ' ) ,
( ' CLR_MANUAL_EVENT ',' SQL CLR ' ) ,
( ' CLR_MEMORY_SPY ',' SQL CLR ' ) ,
( ' CLR_MONITOR ',' SQL CLR ' ) ,
( ' CLR_RWLOCK_READER ',' SQL CLR ' ) ,
( ' CLR_RWLOCK_WRITER ',' SQL CLR ' ) ,
( ' CLR_SEMAPHORE ',' SQL CLR ' ) ,
( ' CLR_TASK_START ',' SQL CLR ' ) ,
( ' CLRHOST_STATE_ACCESS ',' SQL CLR ' ) ,
( ' CMEMPARTITIONED ',' Memory ' ) ,
( ' CMEMTHREAD ',' Memory ' ) ,
( ' CXPACKET ',' Parallelism ' ) ,
( ' DBMIRROR_DBM_EVENT ',' Mirroring ' ) ,
( ' DBMIRROR_DBM_MUTEX ',' Mirroring ' ) ,
( ' DBMIRROR_EVENTS_QUEUE ',' Mirroring ' ) ,
( ' DBMIRROR_SEND ',' Mirroring ' ) ,
( ' DBMIRROR_WORKER_QUEUE ',' Mirroring ' ) ,
( ' DBMIRRORING_CMD ',' Mirroring ' ) ,
( ' DTC ',' Transaction ' ) ,
( ' DTC_ABORT_REQUEST ',' Transaction ' ) ,
( ' DTC_RESOLVE ',' Transaction ' ) ,
( ' DTC_STATE ',' Transaction ' ) ,
( ' DTC_TMDOWN_REQUEST ',' Transaction ' ) ,
( ' DTC_WAITFOR_OUTCOME ',' Transaction ' ) ,
( ' DTCNEW_ENLIST ',' Transaction ' ) ,
( ' DTCNEW_PREPARE ',' Transaction ' ) ,
( ' DTCNEW_RECOVERY ',' Transaction ' ) ,
( ' DTCNEW_TM ',' Transaction ' ) ,
( ' DTCNEW_TRANSACTION_ENLISTMENT ',' Transaction ' ) ,
( ' DTCPNTSYNC ',' Transaction ' ) ,
( ' EE_PMOLOCK ',' Memory ' ) ,
( ' EXCHANGE ',' Parallelism ' ) ,
( ' EXTERNAL_SCRIPT_NETWORK_IOF ',' Network IO ' ) ,
( ' FCB_REPLICA_READ ',' Replication ' ) ,
( ' FCB_REPLICA_WRITE ',' Replication ' ) ,
( ' FT_COMPROWSET_RWLOCK ',' Full Text Search ' ) ,
( ' FT_IFTS_RWLOCK ',' Full Text Search ' ) ,
( ' FT_IFTS_SCHEDULER_IDLE_WAIT ',' Idle ' ) ,
( ' FT_IFTSHC_MUTEX ',' Full Text Search ' ) ,
( ' FT_IFTSISM_MUTEX ',' Full Text Search ' ) ,
( ' FT_MASTER_MERGE ',' Full Text Search ' ) ,
( ' FT_MASTER_MERGE_COORDINATOR ',' Full Text Search ' ) ,
( ' FT_METADATA_MUTEX ',' Full Text Search ' ) ,
( ' FT_PROPERTYLIST_CACHE ',' Full Text Search ' ) ,
( ' FT_RESTART_CRAWL ',' Full Text Search ' ) ,
( ' FULLTEXT GATHERER ',' Full Text Search ' ) ,
( ' HADR_AG_MUTEX ',' Replication ' ) ,
( ' HADR_AR_CRITICAL_SECTION_ENTRY ',' Replication ' ) ,
( ' HADR_AR_MANAGER_MUTEX ',' Replication ' ) ,
( ' HADR_AR_UNLOAD_COMPLETED ',' Replication ' ) ,
( ' HADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST ',' Replication ' ) ,
( ' HADR_BACKUP_BULK_LOCK ',' Replication ' ) ,
( ' HADR_BACKUP_QUEUE ',' Replication ' ) ,
( ' HADR_CLUSAPI_CALL ',' Replication ' ) ,
( ' HADR_COMPRESSED_CACHE_SYNC ',' Replication ' ) ,
( ' HADR_CONNECTIVITY_INFO ',' Replication ' ) ,
( ' HADR_DATABASE_FLOW_CONTROL ',' Replication ' ) ,
( ' HADR_DATABASE_VERSIONING_STATE ',' Replication ' ) ,
( ' HADR_DATABASE_WAIT_FOR_RECOVERY ',' Replication ' ) ,
( ' HADR_DATABASE_WAIT_FOR_RESTART ',' Replication ' ) ,
( ' HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING ',' Replication ' ) ,
( ' HADR_DB_COMMAND ',' Replication ' ) ,
( ' HADR_DB_OP_COMPLETION_SYNC ',' Replication ' ) ,
( ' HADR_DB_OP_START_SYNC ',' Replication ' ) ,
( ' HADR_DBR_SUBSCRIBER ',' Replication ' ) ,
( ' HADR_DBR_SUBSCRIBER_FILTER_LIST ',' Replication ' ) ,
( ' HADR_DBSEEDING ',' Replication ' ) ,
( ' HADR_DBSEEDING_LIST ',' Replication ' ) ,
( ' HADR_DBSTATECHANGE_SYNC ',' Replication ' ) ,
( ' HADR_FABRIC_CALLBACK ',' Replication ' ) ,
( ' HADR_FILESTREAM_BLOCK_FLUSH ',' Replication ' ) ,
( ' HADR_FILESTREAM_FILE_CLOSE ',' Replication ' ) ,
( ' HADR_FILESTREAM_FILE_REQUEST ',' Replication ' ) ,
( ' HADR_FILESTREAM_IOMGR ',' Replication ' ) ,
( ' HADR_FILESTREAM_IOMGR_IOCOMPLETION ',' Replication ' ) ,
( ' HADR_FILESTREAM_MANAGER ',' Replication ' ) ,
( ' HADR_FILESTREAM_PREPROC ',' Replication ' ) ,
( ' HADR_GROUP_COMMIT ',' Replication ' ) ,
( ' HADR_LOGCAPTURE_SYNC ',' Replication ' ) ,
( ' HADR_LOGCAPTURE_WAIT ',' Replication ' ) ,
( ' HADR_LOGPROGRESS_SYNC ',' Replication ' ) ,
( ' HADR_NOTIFICATION_DEQUEUE ',' Replication ' ) ,
( ' HADR_NOTIFICATION_WORKER_EXCLUSIVE_ACCESS ',' Replication ' ) ,
( ' HADR_NOTIFICATION_WORKER_STARTUP_SYNC ',' Replication ' ) ,
( ' HADR_NOTIFICATION_WORKER_TERMINATION_SYNC ',' Replication ' ) ,
( ' HADR_PARTNER_SYNC ',' Replication ' ) ,
( ' HADR_READ_ALL_NETWORKS ',' Replication ' ) ,
( ' HADR_RECOVERY_WAIT_FOR_CONNECTION ',' Replication ' ) ,
( ' HADR_RECOVERY_WAIT_FOR_UNDO ',' Replication ' ) ,
( ' HADR_REPLICAINFO_SYNC ',' Replication ' ) ,
( ' HADR_SEEDING_CANCELLATION ',' Replication ' ) ,
( ' HADR_SEEDING_FILE_LIST ',' Replication ' ) ,
( ' HADR_SEEDING_LIMIT_BACKUPS ',' Replication ' ) ,
( ' HADR_SEEDING_SYNC_COMPLETION ',' Replication ' ) ,
( ' HADR_SEEDING_TIMEOUT_TASK ',' Replication ' ) ,
( ' HADR_SEEDING_WAIT_FOR_COMPLETION ',' Replication ' ) ,
( ' HADR_SYNC_COMMIT ',' Replication ' ) ,
( ' HADR_SYNCHRONIZING_THROTTLE ',' Replication ' ) ,
( ' HADR_TDS_LISTENER_SYNC ',' Replication ' ) ,
( ' HADR_TDS_LISTENER_SYNC_PROCESSING ',' Replication ' ) ,
( ' HADR_THROTTLE_LOG_RATE_GOVERNOR ',' Log Rate Governor ' ) ,
( ' HADR_TIMER_TASK ',' Replication ' ) ,
( ' HADR_TRANSPORT_DBRLIST ',' Replication ' ) ,
( ' HADR_TRANSPORT_FLOW_CONTROL ',' Replication ' ) ,
( ' HADR_TRANSPORT_SESSION ',' Replication ' ) ,
( ' HADR_WORK_POOL ',' Replication ' ) ,
( ' HADR_WORK_QUEUE ',' Replication ' ) ,
( ' HADR_XRF_STACK_ACCESS ',' Replication ' ) ,
( ' INSTANCE_LOG_RATE_GOVERNOR ',' Log Rate Governor ' ) ,
( ' IO_COMPLETION ',' Other Disk IO ' ) ,
( ' IO_QUEUE_LIMIT ',' Other Disk IO ' ) ,
( ' IO_RETRY ',' Other Disk IO ' ) ,
( ' LATCH_DT ',' Latch ' ) ,
( ' LATCH_EX ',' Latch ' ) ,
( ' LATCH_KP ',' Latch ' ) ,
( ' LATCH_NL ',' Latch ' ) ,
( ' LATCH_SH ',' Latch ' ) ,
( ' LATCH_UP ',' Latch ' ) ,
( ' LAZYWRITER_SLEEP ',' Idle ' ) ,
( ' LCK_M_BU ',' Lock ' ) ,
( ' LCK_M_BU_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_BU_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_IS ',' Lock ' ) ,
( ' LCK_M_IS_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_IS_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_IU ',' Lock ' ) ,
( ' LCK_M_IU_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_IU_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_IX ',' Lock ' ) ,
( ' LCK_M_IX_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_IX_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RIn_NL ',' Lock ' ) ,
( ' LCK_M_RIn_NL_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RIn_NL_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RIn_S ',' Lock ' ) ,
( ' LCK_M_RIn_S_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RIn_S_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RIn_U ',' Lock ' ) ,
( ' LCK_M_RIn_U_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RIn_U_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RIn_X ',' Lock ' ) ,
( ' LCK_M_RIn_X_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RIn_X_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RS_S ',' Lock ' ) ,
( ' LCK_M_RS_S_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RS_S_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RS_U ',' Lock ' ) ,
( ' LCK_M_RS_U_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RS_U_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RX_S ',' Lock ' ) ,
( ' LCK_M_RX_S_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RX_S_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RX_U ',' Lock ' ) ,
( ' LCK_M_RX_U_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RX_U_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_RX_X ',' Lock ' ) ,
( ' LCK_M_RX_X_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_RX_X_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_S ',' Lock ' ) ,
( ' LCK_M_S_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_S_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_SCH_M ',' Lock ' ) ,
( ' LCK_M_SCH_M_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_SCH_M_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_SCH_S ',' Lock ' ) ,
( ' LCK_M_SCH_S_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_SCH_S_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_SIU ',' Lock ' ) ,
( ' LCK_M_SIU_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_SIU_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_SIX ',' Lock ' ) ,
( ' LCK_M_SIX_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_SIX_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_U ',' Lock ' ) ,
( ' LCK_M_U_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_U_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_UIX ',' Lock ' ) ,
( ' LCK_M_UIX_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_UIX_LOW_PRIORITY ',' Lock ' ) ,
( ' LCK_M_X ',' Lock ' ) ,
( ' LCK_M_X_ABORT_BLOCKERS ',' Lock ' ) ,
( ' LCK_M_X_LOW_PRIORITY ',' Lock ' ) ,
( ' LOGBUFFER ',' Tran Log IO ' ) ,
( ' LOGMGR ',' Tran Log IO ' ) ,
( ' LOGMGR_FLUSH ',' Tran Log IO ' ) ,
( ' LOGMGR_PMM_LOG ',' Tran Log IO ' ) ,
( ' LOGMGR_QUEUE ',' Idle ' ) ,
( ' LOGMGR_RESERVE_APPEND ',' Tran Log IO ' ) ,
( ' MEMORY_ALLOCATION_EXT ',' Memory ' ) ,
( ' MEMORY_GRANT_UPDATE ',' Memory ' ) ,
( ' MSQL_XACT_MGR_MUTEX ',' Transaction ' ) ,
( ' MSQL_XACT_MUTEX ',' Transaction ' ) ,
( ' MSSEARCH ',' Full Text Search ' ) ,
( ' NET_WAITFOR_PACKET ',' Network IO ' ) ,
( ' ONDEMAND_TASK_QUEUE ',' Idle ' ) ,
( ' PAGEIOLATCH_DT ',' Buffer IO ' ) ,
( ' PAGEIOLATCH_EX ',' Buffer IO ' ) ,
( ' PAGEIOLATCH_KP ',' Buffer IO ' ) ,
( ' PAGEIOLATCH_NL ',' Buffer IO ' ) ,
( ' PAGEIOLATCH_SH ',' Buffer IO ' ) ,
( ' PAGEIOLATCH_UP ',' Buffer IO ' ) ,
( ' PAGELATCH_DT ',' Buffer Latch ' ) ,
( ' PAGELATCH_EX ',' Buffer Latch ' ) ,
( ' PAGELATCH_KP ',' Buffer Latch ' ) ,
( ' PAGELATCH_NL ',' Buffer Latch ' ) ,
( ' PAGELATCH_SH ',' Buffer Latch ' ) ,
( ' PAGELATCH_UP ',' Buffer Latch ' ) ,
( ' POOL_LOG_RATE_GOVERNOR ',' Log Rate Governor ' ) ,
( ' PREEMPTIVE_ABR ',' Preemptive ' ) ,
( ' PREEMPTIVE_CLOSEBACKUPMEDIA ',' Preemptive ' ) ,
( ' PREEMPTIVE_CLOSEBACKUPTAPE ',' Preemptive ' ) ,
( ' PREEMPTIVE_CLOSEBACKUPVDIDEVICE ',' Preemptive ' ) ,
( ' PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_COCREATEINSTANCE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_COGETCLASSOBJECT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_CREATEACCESSOR ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_DELETEROWS ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_GETCOMMANDTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_GETDATA ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_GETNEXTROWS ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_GETRESULT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_GETROWSBYBOOKMARK ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBFLUSH ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBLOCKREGION ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBREADAT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBSETSIZE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBSTAT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBUNLOCKREGION ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_LBWRITEAT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_QUERYINTERFACE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_RELEASE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_RELEASEACCESSOR ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_RELEASEROWS ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_RELEASESESSION ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_RESTARTPOSITION ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_SEQSTRMREAD ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_SEQSTRMREADANDWRITE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_SETDATAFAILURE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_SETPARAMETERINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_SETPARAMETERPROPERTIES ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMLOCKREGION ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMSEEKANDREAD ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMSEEKANDWRITE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMSETSIZE ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMSTAT ',' Preemptive ' ) ,
( ' PREEMPTIVE_COM_STRMUNLOCKREGION ',' Preemptive ' ) ,
( ' PREEMPTIVE_CONSOLEWRITE ',' Preemptive ' ) ,
( ' PREEMPTIVE_CREATEPARAM ',' Preemptive ' ) ,
( ' PREEMPTIVE_DEBUG ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSADDLINK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSLINKEXISTCHECK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSLINKHEALTHCHECK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSREMOVELINK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSREMOVEROOT ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSROOTFOLDERCHECK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSROOTINIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_DFSROOTSHARECHECK ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_ABORT ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_ABORTREQUESTDONE ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_BEGINTRANSACTION ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_COMMITREQUESTDONE ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_ENLIST ',' Preemptive ' ) ,
( ' PREEMPTIVE_DTC_PREPAREREQUESTDONE ',' Preemptive ' ) ,
( ' PREEMPTIVE_FILESIZEGET ',' Preemptive ' ) ,
( ' PREEMPTIVE_FSAOLEDB_ABORTTRANSACTION ',' Preemptive ' ) ,
( ' PREEMPTIVE_FSAOLEDB_COMMITTRANSACTION ',' Preemptive ' ) ,
( ' PREEMPTIVE_FSAOLEDB_STARTTRANSACTION ',' Preemptive ' ) ,
( ' PREEMPTIVE_FSRECOVER_UNCONDITIONALUNDO ',' Preemptive ' ) ,
( ' PREEMPTIVE_GETRMINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_HADR_LEASE_MECHANISM ',' Preemptive ' ) ,
( ' PREEMPTIVE_HTTP_EVENT_WAIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_HTTP_REQUEST ',' Preemptive ' ) ,
( ' PREEMPTIVE_LOCKMONITOR ',' Preemptive ' ) ,
( ' PREEMPTIVE_MSS_RELEASE ',' Preemptive ' ) ,
( ' PREEMPTIVE_ODBCOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLE_UNINIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_ABORTORCOMMITTRAN ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_ABORTTRAN ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_GETDATASOURCE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_GETLITERALINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_GETPROPERTIES ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_GETPROPERTYINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_GETSCHEMALOCK ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_JOINTRANSACTION ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_RELEASE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDB_SETPROPERTIES ',' Preemptive ' ) ,
( ' PREEMPTIVE_OLEDBOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_ACCEPTSECURITYCONTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_ACQUIRECREDENTIALSHANDLE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_AUTHENTICATIONOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_AUTHORIZATIONOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_AUTHZGETINFORMATIONFROMCONTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_AUTHZINITIALIZECONTEXTFROMSID ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_AUTHZINITIALIZERESOURCEMANAGER ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_BACKUPREAD ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CLOSEHANDLE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CLUSTEROPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_COMOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_COMPLETEAUTHTOKEN ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_COPYFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CREATEDIRECTORY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CREATEFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CRYPTACQUIRECONTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CRYPTIMPORTKEY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_CRYPTOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DECRYPTMESSAGE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DELETEFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DELETESECURITYCONTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DEVICEIOCONTROL ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DEVICEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DIRSVC_NETWORKOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DISCONNECTNAMEDPIPE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DOMAINSERVICESOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DSGETDCNAME ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_DTCOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_ENCRYPTMESSAGE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FILEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FINDFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FLUSHFILEBUFFERS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FORMATMESSAGE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FREECREDENTIALSHANDLE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_FREELIBRARY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GENERICOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETADDRINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETCOMPRESSEDFILESIZE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETDISKFREESPACE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETFILEATTRIBUTES ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETFILESIZE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETFINALFILEPATHBYHANDLE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETLONGPATHNAME ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETPROCADDRESS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETVOLUMENAMEFORVOLUMEMOUNTPOINT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_GETVOLUMEPATHNAME ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_INITIALIZESECURITYCONTEXT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_LIBRARYOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_LOADLIBRARY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_LOGONUSER ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_LOOKUPACCOUNTSID ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_MESSAGEQUEUEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_MOVEFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETGROUPGETUSERS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETLOCALGROUPGETMEMBERS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETUSERGETGROUPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETUSERGETLOCALGROUPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETUSERMODALSGET ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYFREE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_OPENDIRECTORY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_PDH_WMI_INIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_PIPEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_PROCESSOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_QUERYCONTEXTATTRIBUTES ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_QUERYREGISTRY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_QUERYSECURITYCONTEXTTOKEN ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_REMOVEDIRECTORY ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_REPORTEVENT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_REVERTTOSELF ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_RSFXDEVICEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SECURITYOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SERVICEOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SETENDOFFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SETFILEPOINTER ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SETFILEVALIDDATA ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SETNAMEDSECURITYINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SQLCLROPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_SQMLAUNCH ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_VERIFYSIGNATURE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_VERIFYTRUST ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_VSSOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_WAITFORSINGLEOBJECT ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_WINSOCKOPS ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_WRITEFILE ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_WRITEFILEGATHER ',' Preemptive ' ) ,
( ' PREEMPTIVE_OS_WSASETLASTERROR ',' Preemptive ' ) ,
( ' PREEMPTIVE_REENLIST ',' Preemptive ' ) ,
( ' PREEMPTIVE_RESIZELOG ',' Preemptive ' ) ,
( ' PREEMPTIVE_ROLLFORWARDREDO ',' Preemptive ' ) ,
( ' PREEMPTIVE_ROLLFORWARDUNDO ',' Preemptive ' ) ,
( ' PREEMPTIVE_SB_STOPENDPOINT ',' Preemptive ' ) ,
( ' PREEMPTIVE_SERVER_STARTUP ',' Preemptive ' ) ,
( ' PREEMPTIVE_SETRMINFO ',' Preemptive ' ) ,
( ' PREEMPTIVE_SHAREDMEM_GETDATA ',' Preemptive ' ) ,
( ' PREEMPTIVE_SNIOPEN ',' Preemptive ' ) ,
( ' PREEMPTIVE_SOSHOST ',' Preemptive ' ) ,
( ' PREEMPTIVE_SOSTESTING ',' Preemptive ' ) ,
( ' PREEMPTIVE_SP_SERVER_DIAGNOSTICS ',' Preemptive ' ) ,
( ' PREEMPTIVE_STARTRM ',' Preemptive ' ) ,
( ' PREEMPTIVE_STREAMFCB_CHECKPOINT ',' Preemptive ' ) ,
( ' PREEMPTIVE_STREAMFCB_RECOVER ',' Preemptive ' ) ,
( ' PREEMPTIVE_STRESSDRIVER ',' Preemptive ' ) ,
( ' PREEMPTIVE_TESTING ',' Preemptive ' ) ,
( ' PREEMPTIVE_TRANSIMPORT ',' Preemptive ' ) ,
( ' PREEMPTIVE_UNMARSHALPROPAGATIONTOKEN ',' Preemptive ' ) ,
( ' PREEMPTIVE_VSS_CREATESNAPSHOT ',' Preemptive ' ) ,
( ' PREEMPTIVE_VSS_CREATEVOLUMESNAPSHOT ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_CALLBACKEXECUTE ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_CX_FILE_OPEN ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_CX_HTTP_CALL ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_DISPATCHER ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_ENGINEINIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_GETTARGETSTATE ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_SESSIONCOMMIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_TARGETFINALIZE ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_TARGETINIT ',' Preemptive ' ) ,
( ' PREEMPTIVE_XE_TIMERRUN ',' Preemptive ' ) ,
( ' PREEMPTIVE_XETESTING ',' Preemptive ' ) ,
( ' PWAIT_HADR_ACTION_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADR_CHANGE_NOTIFIER_TERMINATION_SYNC ',' Replication ' ) ,
( ' PWAIT_HADR_CLUSTER_INTEGRATION ',' Replication ' ) ,
( ' PWAIT_HADR_FAILOVER_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADR_JOIN ',' Replication ' ) ,
( ' PWAIT_HADR_OFFLINE_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADR_ONLINE_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADR_POST_ONLINE_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADR_SERVER_READY_CONNECTIONS ',' Replication ' ) ,
( ' PWAIT_HADR_WORKITEM_COMPLETED ',' Replication ' ) ,
( ' PWAIT_HADRSIM ',' Replication ' ) ,
( ' PWAIT_RESOURCE_SEMAPHORE_FT_PARALLEL_QUERY_SYNC ',' Full Text Search ' ) ,
( ' QUERY_TRACEOUT ',' Tracing ' ) ,
( ' REPL_CACHE_ACCESS ',' Replication ' ) ,
( ' REPL_HISTORYCACHE_ACCESS ',' Replication ' ) ,
( ' REPL_SCHEMA_ACCESS ',' Replication ' ) ,
( ' REPL_TRANFSINFO_ACCESS ',' Replication ' ) ,
( ' REPL_TRANHASHTABLE_ACCESS ',' Replication ' ) ,
( ' REPL_TRANTEXTINFO_ACCESS ',' Replication ' ) ,
( ' REPLICA_WRITES ',' Replication ' ) ,
( ' REQUEST_FOR_DEADLOCK_SEARCH ',' Idle ' ) ,
( ' RESERVED_MEMORY_ALLOCATION_EXT ',' Memory ' ) ,
( ' RESOURCE_SEMAPHORE ',' Memory ' ) ,
( ' RESOURCE_SEMAPHORE_QUERY_COMPILE ',' Compilation ' ) ,
( ' SLEEP_BPOOL_FLUSH ',' Idle ' ) ,
( ' SLEEP_BUFFERPOOL_HELPLW ',' Idle ' ) ,
( ' SLEEP_DBSTARTUP ',' Idle ' ) ,
( ' SLEEP_DCOMSTARTUP ',' Idle ' ) ,
( ' SLEEP_MASTERDBREADY ',' Idle ' ) ,
( ' SLEEP_MASTERMDREADY ',' Idle ' ) ,
( ' SLEEP_MASTERUPGRADED ',' Idle ' ) ,
( ' SLEEP_MEMORYPOOL_ALLOCATEPAGES ',' Idle ' ) ,
( ' SLEEP_MSDBSTARTUP ',' Idle ' ) ,
( ' SLEEP_RETRY_VIRTUALALLOC ',' Idle ' ) ,
( ' SLEEP_SYSTEMTASK ',' Idle ' ) ,
( ' SLEEP_TASK ',' Idle ' ) ,
( ' SLEEP_TEMPDBSTARTUP ',' Idle ' ) ,
( ' SLEEP_WORKSPACE_ALLOCATEPAGE ',' Idle ' ) ,
( ' SOS_SCHEDULER_YIELD ',' CPU ' ) ,
( ' SQLCLR_APPDOMAIN ',' SQL CLR ' ) ,
( ' SQLCLR_ASSEMBLY ',' SQL CLR ' ) ,
( ' SQLCLR_DEADLOCK_DETECTION ',' SQL CLR ' ) ,
( ' SQLCLR_QUANTUM_PUNISHMENT ',' SQL CLR ' ) ,
( ' SQLTRACE_BUFFER_FLUSH ',' Idle ' ) ,
( ' SQLTRACE_FILE_BUFFER ',' Tracing ' ) ,
( ' SQLTRACE_FILE_READ_IO_COMPLETION ',' Tracing ' ) ,
( ' SQLTRACE_FILE_WRITE_IO_COMPLETION ',' Tracing ' ) ,
( ' SQLTRACE_INCREMENTAL_FLUSH_SLEEP ',' Idle ' ) ,
( ' SQLTRACE_PENDING_BUFFER_WRITERS ',' Tracing ' ) ,
( ' SQLTRACE_SHUTDOWN ',' Tracing ' ) ,
( ' SQLTRACE_WAIT_ENTRIES ',' Idle ' ) ,
( ' THREADPOOL ',' Worker Thread ' ) ,
( ' TRACE_EVTNOTIF ',' Tracing ' ) ,
( ' TRACEWRITE ',' Tracing ' ) ,
( ' TRAN_MARKLATCH_DT ',' Transaction ' ) ,
( ' TRAN_MARKLATCH_EX ',' Transaction ' ) ,
( ' TRAN_MARKLATCH_KP ',' Transaction ' ) ,
( ' TRAN_MARKLATCH_NL ',' Transaction ' ) ,
( ' TRAN_MARKLATCH_SH ',' Transaction ' ) ,
( ' TRAN_MARKLATCH_UP ',' Transaction ' ) ,
( ' TRANSACTION_MUTEX ',' Transaction ' ) ,
( ' WAIT_FOR_RESULTS ',' User Wait ' ) ,
( ' WAITFOR ',' User Wait ' ) ,
( ' WRITE_COMPLETION ',' Other Disk IO ' ) ,
( ' WRITELOG ',' Tran Log IO ' ) ,
( ' XACT_OWN_TRANSACTION ',' Transaction ' ) ,
( ' XACT_RECLAIM_SESSION ',' Transaction ' ) ,
( ' XACTLOCKINFO ',' Transaction ' ) ,
( ' XACTWORKSPACE_MUTEX ',' Transaction ' ) ,
( ' XE_DISPATCHER_WAIT ',' Idle ' ) ,
( ' XE_TIMER_EVENT ',' Idle ' ) ) AS wc ( wait_type , wait_category )
ON ws . wait_type = wc . wait_type
WHERE
ws . wait_type NOT IN (
N ' BROKER_EVENTHANDLER ' , N ' BROKER_RECEIVE_WAITFOR ' , N ' BROKER_TASK_STOP ' ,
N ' BROKER_TO_FLUSH ' , N ' BROKER_TRANSMITTER ' , N ' CHECKPOINT_QUEUE ' ,
N ' CHKPT ' , N ' CLR_AUTO_EVENT ' , N ' CLR_MANUAL_EVENT ' , N ' CLR_SEMAPHORE ' ,
N ' DBMIRROR_DBM_EVENT ' , N ' DBMIRROR_EVENTS_QUEUE ' , N ' DBMIRROR_WORKER_QUEUE ' ,
N ' DBMIRRORING_CMD ' , N ' DIRTY_PAGE_POLL ' , N ' DISPATCHER_QUEUE_SEMAPHORE ' ,
N ' EXECSYNC ' , N ' FSAGENT ' , N ' FT_IFTS_SCHEDULER_IDLE_WAIT ' , N ' FT_IFTSHC_MUTEX ' ,
N ' HADR_CLUSAPI_CALL ' , N ' HADR_FILESTREAM_IOMGR_IOCOMPLETION ' , N ' HADR_LOGCAPTURE_WAIT ' ,
N ' HADR_NOTIFICATION_DEQUEUE ' , N ' HADR_TIMER_TASK ' , N ' HADR_WORK_QUEUE ' ,
N ' KSOURCE_WAKEUP ' , N ' LAZYWRITER_SLEEP ' , N ' LOGMGR_QUEUE ' ,
N ' MEMORY_ALLOCATION_EXT ' , N ' ONDEMAND_TASK_QUEUE ' ,
N ' PARALLEL_REDO_WORKER_WAIT_WORK ' ,
N ' PREEMPTIVE_HADR_LEASE_MECHANISM ' , N ' PREEMPTIVE_SP_SERVER_DIAGNOSTICS ' ,
N ' PREEMPTIVE_OS_LIBRARYOPS ' , N ' PREEMPTIVE_OS_COMOPS ' , N ' PREEMPTIVE_OS_CRYPTOPS ' ,
N ' PREEMPTIVE_OS_PIPEOPS ' , N ' PREEMPTIVE_OS_AUTHENTICATIONOPS ' ,
N ' PREEMPTIVE_OS_GENERICOPS ' , N ' PREEMPTIVE_OS_VERIFYTRUST ' ,
N ' PREEMPTIVE_OS_FILEOPS ' , N ' PREEMPTIVE_OS_DEVICEOPS ' , N ' PREEMPTIVE_OS_QUERYREGISTRY ' ,
N ' PREEMPTIVE_OS_WRITEFILE ' ,
N ' PREEMPTIVE_XE_CALLBACKEXECUTE ' , N ' PREEMPTIVE_XE_DISPATCHER ' ,
N ' PREEMPTIVE_XE_GETTARGETSTATE ' , N ' PREEMPTIVE_XE_SESSIONCOMMIT ' ,
N ' PREEMPTIVE_XE_TARGETINIT ' , N ' PREEMPTIVE_XE_TARGETFINALIZE ' ,
N ' PWAIT_ALL_COMPONENTS_INITIALIZED ' , N ' PWAIT_DIRECTLOGCONSUMER_GETNEXT ' ,
N ' QDS_PERSIST_TASK_MAIN_LOOP_SLEEP ' ,
N ' QDS_ASYNC_QUEUE ' ,
N ' QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP ' , N ' REQUEST_FOR_DEADLOCK_SEARCH ' ,
N ' RESOURCE_QUEUE ' , N ' SERVER_IDLE_CHECK ' , N ' SLEEP_BPOOL_FLUSH ' , N ' SLEEP_DBSTARTUP ' ,
N ' SLEEP_DCOMSTARTUP ' , N ' SLEEP_MASTERDBREADY ' , N ' SLEEP_MASTERMDREADY ' ,
N ' SLEEP_MASTERUPGRADED ' , N ' SLEEP_MSDBSTARTUP ' , N ' SLEEP_SYSTEMTASK ' , N ' SLEEP_TASK ' ,
N ' SLEEP_TEMPDBSTARTUP ' , N ' SNI_HTTP_ACCEPT ' , N ' SP_SERVER_DIAGNOSTICS_SLEEP ' ,
N ' SQLTRACE_BUFFER_FLUSH ' , N ' SQLTRACE_INCREMENTAL_FLUSH_SLEEP ' , N ' SQLTRACE_WAIT_ENTRIES ' ,
N ' WAIT_FOR_RESULTS ' , N ' WAITFOR ' , N ' WAITFOR_TASKSHUTDOWN ' , N ' WAIT_XTP_HOST_WAIT ' ,
N ' WAIT_XTP_OFFLINE_CKPT_NEW_LOG ' , N ' WAIT_XTP_CKPT_CLOSE ' ,
N ' XE_BUFFERMGR_ALLPROCESSED_EVENT ' , N ' XE_DISPATCHER_JOIN ' ,
N ' XE_DISPATCHER_WAIT ' , N ' XE_LIVE_TARGET_TVF ' , N ' XE_TIMER_EVENT ' )
AND waiting_tasks_count > 0
ORDER BY
waiting_tasks_count DESC
OPTION ( RECOMPILE ) ;
`
const sqlAzureDB string = ` IF OBJECT_ID ( ' sys . dm_db_resource_stats ' ) IS NOT NULL
BEGIN
SELECT TOP ( 1 )
' sqlserver_azurestats ' AS [ measurement ] ,
REPLACE ( @ @ SERVERNAME , ' \ ',' : ' ) AS [ sql_instance ] ,
SERVERPROPERTY ( ' ServerName ' ) AS [ host ] ,
avg_cpu_percent ,
avg_data_io_percent ,
avg_log_write_percent ,
avg_memory_usage_percent ,
xtp_storage_percent ,
max_worker_percent ,
max_session_percent ,
dtu_limit ,
avg_login_rate_percent ,
end_time
FROM
sys . dm_db_resource_stats WITH ( NOLOCK )
ORDER BY
end_time DESC
OPTION ( RECOMPILE )
END
ELSE
BEGIN
RAISERROR ( ' This does not seem to be an AzureDB instance . Set "azureDB = false" in your telegraf configuration . ' , 16 , 1 )
END `
// Queries V1
2016-01-26 19:30:02 +00:00
const sqlPerformanceMetrics string = ` SET NOCOUNT ON ;
SET ARITHABORT ON ;
SET QUOTED_IDENTIFIER ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DECLARE @ PCounters TABLE
(
counter_name nvarchar ( 64 ) ,
cntr_value bigint ,
Primary Key ( counter_name )
) ;
INSERT @ PCounters ( counter_name , cntr_value )
SELECT ' Point In Time Recovery ' , Value = CASE
WHEN 1 > 1.0 * COUNT ( * ) / NULLIF ( ( SELECT COUNT ( * ) FROM sys . databases d WHERE database_id > 4 ) , 0 )
THEN 0 ELSE 1 END
FROM sys . databases d
WHERE database_id > 4
AND recovery_model IN ( 1 )
UNION ALL
SELECT ' Page File Usage ( % ) ' , CAST ( 100 * ( 1 - available_page_file_kb * 1. / total_page_file_kb ) as decimal ( 9 , 2 ) ) as [ PageFileUsage ( % ) ]
FROM sys . dm_os_sys_memory
UNION ALL
SELECT ' Connection memory per connection ( bytes ) ' , Ratio = CAST ( ( cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' User Connections ' ) ) * 1024 as int )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Connection Memory ( KB ) '
UNION ALL
SELECT ' Available physical memory ( bytes ) ' , available_physical_memory_kb * 1024
FROM sys . dm_os_sys_memory
UNION ALL
SELECT ' Signal wait ( % ) ' , SignalWaitPercent = CAST ( 100.0 * SUM ( signal_wait_time_ms ) / SUM ( wait_time_ms ) AS NUMERIC ( 20 , 2 ) )
FROM sys . dm_os_wait_stats
UNION ALL
SELECT ' Sql compilation per batch request ' , SqlCompilationPercent = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Batch Requests / sec ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' SQL Compilations / sec '
UNION ALL
SELECT ' Sql recompilation per batch request ' , SqlReCompilationPercent = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Batch Requests / sec ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' SQL Re - Compilations / sec '
UNION ALL
SELECT ' Page lookup per batch request ' , PageLookupPercent = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Batch Requests / sec ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Page lookups / sec '
UNION ALL
SELECT ' Page split per batch request ' , PageSplitPercent = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Batch Requests / sec ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Page splits / sec '
UNION ALL
SELECT ' Average tasks ' , AverageTaskCount = ( SELECT AVG ( current_tasks_count ) FROM sys . dm_os_schedulers WITH ( NOLOCK ) WHERE scheduler_id < 255 )
UNION ALL
SELECT ' Average runnable tasks ' , AverageRunnableTaskCount = ( SELECT AVG ( runnable_tasks_count ) FROM sys . dm_os_schedulers WITH ( NOLOCK ) WHERE scheduler_id < 255 )
UNION ALL
SELECT ' Average pending disk IO ' , AveragePendingDiskIOCount = ( SELECT AVG ( pending_disk_io_count ) FROM sys . dm_os_schedulers WITH ( NOLOCK ) WHERE scheduler_id < 255 )
UNION ALL
SELECT ' Buffer pool rate ( bytes / sec ) ' , BufferPoolRate = ( 1.0 * cntr_value * 8 * 1024 ) /
2017-10-16 18:26:16 +00:00
( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE object_name like ' % Buffer Manager % ' AND counter_name = ' Page life expectancy ' )
2016-01-26 19:30:02 +00:00
FROM sys . dm_os_performance_counters
WHERE object_name like ' % Buffer Manager % '
2017-10-16 18:26:16 +00:00
AND counter_name = ' Database pages '
2016-01-26 19:30:02 +00:00
UNION ALL
SELECT ' Memory grant pending ' , MemoryGrantPending = cntr_value
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Memory Grants Pending '
UNION ALL
SELECT ' Readahead per page read ' , Readahead = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Page Reads / sec ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Readahead pages / sec '
UNION ALL
SELECT ' Total target memory ratio ' , TotalTargetMemoryRatio = 100.0 * cntr_value / ( SELECT 1.0 * cntr_value FROM sys . dm_os_performance_counters WHERE counter_name = ' Target Server Memory ( KB ) ' )
FROM sys . dm_os_performance_counters
WHERE counter_name = ' Total Server Memory ( KB ) '
IF OBJECT_ID ( ' tempdb . . # PCounters ' ) IS NOT NULL DROP TABLE # PCounters ;
SELECT * INTO # PCounters FROM @ PCounters
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( counter_name )
FROM ( SELECT DISTINCT counter_name FROM @ PCounters ) AS bl
SET @ DynamicPivotQuery = N '
SELECT measurement = ' ' Performance metrics ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Performance metrics ' '
, ' + @ ColumnName + ' FROM
(
SELECT counter_name , cntr_value
FROM # PCounters
) as V
PIVOT ( SUM ( cntr_value ) FOR counter_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
'
EXEC sp_executesql @ DynamicPivotQuery ;
`
const sqlMemoryClerk string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
2016-03-17 22:01:19 +00:00
DECLARE @ sqlVers numeric ( 4 , 2 )
SELECT @ sqlVers = LEFT ( CAST ( SERVERPROPERTY ( ' productversion ' ) as varchar ) , 4 )
IF OBJECT_ID ( ' tempdb . . # clerk ' ) IS NOT NULL
DROP TABLE # clerk ;
CREATE TABLE # clerk (
2016-08-31 11:15:14 +00:00
ClerkCategory nvarchar ( 64 ) NOT NULL ,
UsedPercent decimal ( 9 , 2 ) ,
2016-03-17 22:01:19 +00:00
UsedBytes bigint
) ;
2016-01-26 19:30:02 +00:00
2016-03-17 22:01:19 +00:00
DECLARE @ DynamicClerkQuery AS NVARCHAR ( MAX )
IF @ sqlVers < 11
BEGIN
SET @ DynamicClerkQuery = N '
INSERT # clerk ( ClerkCategory , UsedPercent , UsedBytes )
SELECT ClerkCategory
, UsedPercent = SUM ( UsedPercent )
, UsedBytes = SUM ( UsedBytes )
FROM
(
SELECT ClerkCategory = CASE MC . [ type ]
WHEN ' ' MEMORYCLERK_SQLBUFFERPOOL ' ' THEN ' ' Buffer pool ' '
WHEN ' ' CACHESTORE_SQLCP ' ' THEN ' ' Cache ( sql plans ) ' '
WHEN ' ' CACHESTORE_OBJCP ' ' THEN ' ' Cache ( objects ) ' '
ELSE ' ' Other ' ' END
, SUM ( ( single_pages_kb + multi_pages_kb ) * 1024 ) AS UsedBytes
, Cast ( 100 * Sum ( ( single_pages_kb + multi_pages_kb ) ) * 1.0 / ( Select Sum ( ( single_pages_kb + multi_pages_kb ) ) From sys . dm_os_memory_clerks ) as Decimal ( 7 , 4 ) ) UsedPercent
FROM sys . dm_os_memory_clerks MC
WHERE ( single_pages_kb + multi_pages_kb ) > 0
GROUP BY CASE MC . [ type ]
WHEN ' ' MEMORYCLERK_SQLBUFFERPOOL ' ' THEN ' ' Buffer pool ' '
WHEN ' ' CACHESTORE_SQLCP ' ' THEN ' ' Cache ( sql plans ) ' '
WHEN ' ' CACHESTORE_OBJCP ' ' THEN ' ' Cache ( objects ) ' '
ELSE ' ' Other ' ' END
) as T
GROUP BY ClerkCategory ;
'
END
ELSE
BEGIN
SET @ DynamicClerkQuery = N '
INSERT # clerk ( ClerkCategory , UsedPercent , UsedBytes )
SELECT ClerkCategory
, UsedPercent = SUM ( UsedPercent )
, UsedBytes = SUM ( UsedBytes )
FROM
(
SELECT ClerkCategory = CASE MC . [ type ]
WHEN ' ' MEMORYCLERK_SQLBUFFERPOOL ' ' THEN ' ' Buffer pool ' '
WHEN ' ' CACHESTORE_SQLCP ' ' THEN ' ' Cache ( sql plans ) ' '
WHEN ' ' CACHESTORE_OBJCP ' ' THEN ' ' Cache ( objects ) ' '
ELSE ' ' Other ' ' END
, SUM ( pages_kb * 1024 ) AS UsedBytes
, Cast ( 100 * Sum ( pages_kb ) * 1.0 / ( Select Sum ( pages_kb ) From sys . dm_os_memory_clerks ) as Decimal ( 7 , 4 ) ) UsedPercent
FROM sys . dm_os_memory_clerks MC
WHERE pages_kb > 0
GROUP BY CASE MC . [ type ]
WHEN ' ' MEMORYCLERK_SQLBUFFERPOOL ' ' THEN ' ' Buffer pool ' '
WHEN ' ' CACHESTORE_SQLCP ' ' THEN ' ' Cache ( sql plans ) ' '
WHEN ' ' CACHESTORE_OBJCP ' ' THEN ' ' Cache ( objects ) ' '
ELSE ' ' Other ' ' END
) as T
GROUP BY ClerkCategory ;
'
END
EXEC sp_executesql @ DynamicClerkQuery ;
2016-01-26 19:30:02 +00:00
SELECT
-- measurement
measurement
-- tags
, servername = REPLACE ( @ @ SERVERNAME , ' \ ' , ':' )
, type = ' Memory clerk '
-- value
, [ Buffer pool ]
, [ Cache ( objects ) ]
, [ Cache ( sql plans ) ]
, [ Other ]
FROM
(
SELECT measurement = ' Memory breakdown ( % ) '
, [ Buffer pool ] = ISNULL ( ROUND ( [ Buffer Pool ] , 1 ) , 0 )
, [ Cache ( objects ) ] = ISNULL ( ROUND ( [ Cache ( objects ) ] , 1 ) , 0 )
, [ Cache ( sql plans ) ] = ISNULL ( ROUND ( [ Cache ( sql plans ) ] , 1 ) , 0 )
, [ Other ] = ISNULL ( ROUND ( [ Other ] , 1 ) , 0 )
2016-03-17 22:01:19 +00:00
FROM ( SELECT ClerkCategory , UsedPercent FROM # clerk ) as G1
2016-01-26 19:30:02 +00:00
PIVOT
(
SUM ( UsedPercent )
FOR ClerkCategory IN ( [ Buffer Pool ] , [ Cache ( objects ) ] , [ Cache ( sql plans ) ] , [ Other ] )
) AS PivotTable
UNION ALL
SELECT measurement = ' Memory breakdown ( bytes ) '
, [ Buffer pool ] = ISNULL ( ROUND ( [ Buffer Pool ] , 1 ) , 0 )
, [ Cache ( objects ) ] = ISNULL ( ROUND ( [ Cache ( objects ) ] , 1 ) , 0 )
, [ Cache ( sql plans ) ] = ISNULL ( ROUND ( [ Cache ( sql plans ) ] , 1 ) , 0 )
, [ Other ] = ISNULL ( ROUND ( [ Other ] , 1 ) , 0 )
2016-03-17 22:01:19 +00:00
FROM ( SELECT ClerkCategory , UsedBytes FROM # clerk ) as G2
2016-01-26 19:30:02 +00:00
PIVOT
(
SUM ( UsedBytes )
FOR ClerkCategory IN ( [ Buffer Pool ] , [ Cache ( objects ) ] , [ Cache ( sql plans ) ] , [ Other ] )
) AS PivotTable
) as T ;
`
const sqlDatabaseSize string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF OBJECT_ID ( ' tempdb . . # baseline ' ) IS NOT NULL
DROP TABLE # baseline ;
SELECT
DB_NAME ( mf . database_id ) AS database_name ,
2017-01-13 13:47:47 +00:00
CAST ( mf . size AS BIGINT ) as database_size_8k_pages ,
CAST ( mf . max_size AS BIGINT ) as database_max_size_8k_pages ,
2016-01-26 19:30:02 +00:00
size_on_disk_bytes ,
type_desc as datafile_type ,
GETDATE ( ) AS baselineDate
INTO # baseline
FROM sys . dm_io_virtual_file_stats ( NULL , NULL ) AS divfs
INNER JOIN sys . master_files AS mf ON mf . database_id = divfs . database_id
AND mf . file_id = divfs . file_id
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX ) , @ ColumnName2 AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( database_name )
FROM ( SELECT DISTINCT database_name FROM # baseline ) AS bl
-- Prepare the PIVOT query using the dynamic
SET @ DynamicPivotQuery = N '
SELECT measurement = ' ' Log size ( bytes ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , size_on_disk_bytes
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( size_on_disk_bytes ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows size ( bytes ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , size_on_disk_bytes
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( size_on_disk_bytes ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-06-22 13:39:35 +00:00
UNION ALL
SELECT measurement = ' ' Rows size ( 8 KB pages ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , database_size_8k_pages
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( database_size_8k_pages ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Log size ( 8 KB pages ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , database_size_8k_pages
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( database_size_8k_pages ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows max size ( 8 KB pages ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , database_max_size_8k_pages
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( database_max_size_8k_pages ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Logs max size ( 8 KB pages ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database size ' '
, ' + @ ColumnName + ' FROM
(
SELECT database_name , database_max_size_8k_pages
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( database_max_size_8k_pages ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-01-26 19:30:02 +00:00
'
-- PRINT @ DynamicPivotQuery
EXEC sp_executesql @ DynamicPivotQuery ;
`
const sqlDatabaseStats string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
IF OBJECT_ID ( ' tempdb . . # baseline ' ) IS NOT NULL
DROP TABLE # baseline ;
SELECT
[ ReadLatency ] =
CASE WHEN [ num_of_reads ] = 0
THEN 0 ELSE ( [ io_stall_read_ms ] / [ num_of_reads ] ) END ,
[ WriteLatency ] =
CASE WHEN [ num_of_writes ] = 0
THEN 0 ELSE ( [ io_stall_write_ms ] / [ num_of_writes ] ) END ,
[ Latency ] =
CASE WHEN ( [ num_of_reads ] = 0 AND [ num_of_writes ] = 0 )
THEN 0 ELSE ( [ io_stall ] / ( [ num_of_reads ] + [ num_of_writes ] ) ) END ,
[ AvgBytesPerRead ] =
CASE WHEN [ num_of_reads ] = 0
THEN 0 ELSE ( [ num_of_bytes_read ] / [ num_of_reads ] ) END ,
[ AvgBytesPerWrite ] =
CASE WHEN [ num_of_writes ] = 0
THEN 0 ELSE ( [ num_of_bytes_written ] / [ num_of_writes ] ) END ,
[ AvgBytesPerTransfer ] =
CASE WHEN ( [ num_of_reads ] = 0 AND [ num_of_writes ] = 0 )
THEN 0 ELSE
( ( [ num_of_bytes_read ] + [ num_of_bytes_written ] ) /
( [ num_of_reads ] + [ num_of_writes ] ) ) END ,
DB_NAME ( [ vfs ] . [ database_id ] ) AS DatabaseName ,
[ mf ] . type_desc as datafile_type
INTO # baseline
FROM sys . dm_io_virtual_file_stats ( NULL , NULL ) AS [ vfs ]
JOIN sys . master_files AS [ mf ] ON [ vfs ] . [ database_id ] = [ mf ] . [ database_id ]
AND [ vfs ] . [ file_id ] = [ mf ] . [ file_id ]
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX ) , @ ColumnName2 AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( DatabaseName )
FROM ( SELECT DISTINCT DatabaseName FROM # baseline ) AS bl
-- Prepare the PIVOT query using the dynamic
SET @ DynamicPivotQuery = N '
SELECT measurement = ' ' Log read latency ( ms ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , ReadLatency
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
2017-11-17 00:49:51 +00:00
PIVOT ( MAX ( ReadLatency ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-01-26 19:30:02 +00:00
UNION ALL
SELECT measurement = ' ' Log write latency ( ms ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , WriteLatency
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
2017-11-17 00:49:51 +00:00
PIVOT ( MAX ( WriteLatency ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-01-26 19:30:02 +00:00
UNION ALL
SELECT measurement = ' ' Rows read latency ( ms ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , ReadLatency
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
2017-11-17 00:49:51 +00:00
PIVOT ( MAX ( ReadLatency ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-01-26 19:30:02 +00:00
UNION ALL
SELECT measurement = ' ' Rows write latency ( ms ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , WriteLatency
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
2017-11-17 00:49:51 +00:00
PIVOT ( MAX ( WriteLatency ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
2016-01-26 19:30:02 +00:00
UNION ALL
SELECT measurement = ' ' Rows ( average bytes / read ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , AvgBytesPerRead
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( AvgBytesPerRead ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows ( average bytes / write ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , AvgBytesPerWrite
FROM # baseline
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( AvgBytesPerWrite ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Log ( average bytes / read ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , AvgBytesPerRead
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( AvgBytesPerRead ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Log ( average bytes / write ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database stats ' '
, ' + @ ColumnName + ' FROM
(
SELECT DatabaseName , AvgBytesPerWrite
FROM # baseline
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( AvgBytesPerWrite ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
'
-- PRINT @ DynamicPivotQuery
EXEC sp_executesql @ DynamicPivotQuery ;
`
const sqlDatabaseIO string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
DECLARE @ secondsBetween tinyint = 5 ;
DECLARE @ delayInterval char ( 8 ) = CONVERT ( Char ( 8 ) , DATEADD ( SECOND , @ secondsBetween , ' 00 : 00 : 00 ' ) , 108 ) ;
IF OBJECT_ID ( ' tempdb . . # baseline ' ) IS NOT NULL
DROP TABLE # baseline ;
IF OBJECT_ID ( ' tempdb . . # baselinewritten ' ) IS NOT NULL
DROP TABLE # baselinewritten ;
SELECT DB_NAME ( mf . database_id ) AS databaseName ,
mf . physical_name ,
divfs . num_of_bytes_read ,
divfs . num_of_bytes_written ,
divfs . num_of_reads ,
divfs . num_of_writes ,
2016-09-11 07:04:43 +00:00
GETDATE ( ) AS baselinedate
2016-01-26 19:30:02 +00:00
INTO # baseline
FROM sys . dm_io_virtual_file_stats ( NULL , NULL ) AS divfs
INNER JOIN sys . master_files AS mf ON mf . database_id = divfs . database_id
AND mf . file_id = divfs . file_id
WAITFOR DELAY @ delayInterval ;
; WITH currentLine AS
(
SELECT DB_NAME ( mf . database_id ) AS databaseName ,
type_desc ,
mf . physical_name ,
divfs . num_of_bytes_read ,
divfs . num_of_bytes_written ,
divfs . num_of_reads ,
divfs . num_of_writes ,
2016-09-11 07:04:43 +00:00
GETDATE ( ) AS currentlinedate
2016-01-26 19:30:02 +00:00
FROM sys . dm_io_virtual_file_stats ( NULL , NULL ) AS divfs
INNER JOIN sys . master_files AS mf ON mf . database_id = divfs . database_id
AND mf . file_id = divfs . file_id
)
SELECT database_name
, datafile_type
, num_of_bytes_read_persec = SUM ( num_of_bytes_read_persec )
, num_of_bytes_written_persec = SUM ( num_of_bytes_written_persec )
, num_of_reads_persec = SUM ( num_of_reads_persec )
, num_of_writes_persec = SUM ( num_of_writes_persec )
INTO # baselinewritten
FROM
(
SELECT
database_name = currentLine . databaseName
, datafile_type = type_desc
2016-09-11 07:04:43 +00:00
, num_of_bytes_read_persec = ( currentLine . num_of_bytes_read - T1 . num_of_bytes_read ) / ( DATEDIFF ( SECOND , baselinedate , currentlinedate ) )
, num_of_bytes_written_persec = ( currentLine . num_of_bytes_written - T1 . num_of_bytes_written ) / ( DATEDIFF ( SECOND , baselinedate , currentlinedate ) )
, num_of_reads_persec = ( currentLine . num_of_reads - T1 . num_of_reads ) / ( DATEDIFF ( SECOND , baselinedate , currentlinedate ) )
, num_of_writes_persec = ( currentLine . num_of_writes - T1 . num_of_writes ) / ( DATEDIFF ( SECOND , baselinedate , currentlinedate ) )
2016-01-26 19:30:02 +00:00
FROM currentLine
INNER JOIN # baseline T1 ON T1 . databaseName = currentLine . databaseName
AND T1 . physical_name = currentLine . physical_name
) as T
GROUP BY database_name , datafile_type
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX ) , @ ColumnName2 AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( database_name )
FROM ( SELECT DISTINCT database_name FROM # baselinewritten ) AS bl
SELECT @ ColumnName2 = ISNULL ( @ ColumnName2 + '+' , ' ' ) + QUOTENAME ( database_name )
FROM ( SELECT DISTINCT database_name FROM # baselinewritten ) AS bl
SET @ DynamicPivotQuery = N '
SELECT measurement = ' ' Log writes ( bytes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_bytes_written_persec
FROM # baselinewritten
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( num_of_bytes_written_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows writes ( bytes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_bytes_written_persec
FROM # baselinewritten
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( num_of_bytes_written_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Log reads ( bytes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_bytes_read_persec
FROM # baselinewritten
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( num_of_bytes_read_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows reads ( bytes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_bytes_read_persec
FROM # baselinewritten
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( num_of_bytes_read_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Log ( writes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_writes_persec
FROM # baselinewritten
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( num_of_writes_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows ( writes / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_writes_persec
FROM # baselinewritten
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( num_of_writes_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTabl
UNION ALL
SELECT measurement = ' ' Log ( reads / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_reads_persec
FROM # baselinewritten
WHERE datafile_type = ' ' LOG ' '
) as V
PIVOT ( SUM ( num_of_reads_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Rows ( reads / sec ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' Database IO ' '
, ' + @ ColumnName + ' , Total = ' + @ ColumnName2 + ' FROM
(
SELECT database_name , num_of_reads_persec
FROM # baselinewritten
WHERE datafile_type = ' ' ROWS ' '
) as V
PIVOT ( SUM ( num_of_reads_persec ) FOR database_name IN ( ' + @ ColumnName + ' ) ) AS PVTTable
'
EXEC sp_executesql @ DynamicPivotQuery ;
`
const sqlDatabaseProperties string = ` SET NOCOUNT ON ;
SET ARITHABORT ON ;
SET QUOTED_IDENTIFIER ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF OBJECT_ID ( ' tempdb . . # Databases ' ) IS NOT NULL
DROP TABLE # Databases ;
CREATE TABLE # Databases
(
Measurement nvarchar ( 64 ) NOT NULL ,
2016-03-17 22:01:19 +00:00
DatabaseName nvarchar ( 128 ) NOT NULL ,
2016-01-26 19:30:02 +00:00
Value tinyint NOT NULL
Primary Key ( DatabaseName , Measurement )
) ;
INSERT # Databases ( Measurement , DatabaseName , Value )
SELECT
Measurement = ' Recovery Model FULL '
, DatabaseName = d . Name
, Value = CASE WHEN d . recovery_model = 1 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' Recovery Model BULK_LOGGED '
, DatabaseName = d . Name
, Value = CASE WHEN d . recovery_model = 2 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' Recovery Model SIMPLE '
, DatabaseName = d . Name
, Value = CASE WHEN d . recovery_model = 3 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State ONLINE '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 0 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State RESTORING '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 1 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State RECOVERING '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 2 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State RECOVERY_PENDING '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 3 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State SUSPECT '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 4 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State EMERGENCY '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 5 THEN 1 ELSE 0 END
FROM sys . databases d
UNION ALL
SELECT
Measurement = ' State OFFLINE '
, DatabaseName = d . Name
, Value = CASE WHEN d . state = 6 THEN 1 ELSE 0 END
FROM sys . databases d
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( DatabaseName )
FROM ( SELECT DISTINCT DatabaseName FROM # Databases ) AS bl
SET @ DynamicPivotQuery = N '
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' Recovery Model FULL ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' Recovery Model BULK_LOGGED ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' Recovery Model SIMPLE ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State ONLINE ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State RESTORING ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State RECOVERING ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State RECOVERY_PENDING ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State SUSPECT ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State EMERGENCY ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = Measurement , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' )
, type = ' ' Database properties ' '
2017-05-04 17:47:03 +00:00
, ' + @ ColumnName + ' , Total FROM
2016-01-26 19:30:02 +00:00
(
SELECT Measurement , DatabaseName , Value
, Total = ( SELECT SUM ( Value ) FROM # Databases WHERE Measurement = d . Measurement )
FROM # Databases d
WHERE d . Measurement = ' ' State OFFLINE ' '
) as V
PIVOT ( SUM ( Value ) FOR DatabaseName IN ( ' + @ ColumnName + ' ) ) AS PVTTable
'
EXEC sp_executesql @ DynamicPivotQuery ;
`
const sqlCPUHistory string = ` SET NOCOUNT ON ;
SET ARITHABORT ON ;
SET QUOTED_IDENTIFIER ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
DECLARE @ ms_ticks bigint ;
SET @ ms_ticks = ( Select ms_ticks From sys . dm_os_sys_info ) ;
DECLARE @ maxEvents int = 1
SELECT
-- -- measurement
measurement = ' CPU ( % ) '
-- -- tags
, servername = REPLACE ( @ @ SERVERNAME , ' \ ' , ':' )
, type = ' CPU usage '
-- value
, [ SQL process ] = ProcessUtilization
, [ External process ] = 100 - SystemIdle - ProcessUtilization
, [ SystemIdle ]
FROM
(
SELECT TOP ( @ maxEvents )
EventTime = CAST ( DateAdd ( ms , - 1 * ( @ ms_ticks - timestamp_ms ) , GetUTCDate ( ) ) as datetime )
, ProcessUtilization = CAST ( ProcessUtilization as int )
, SystemIdle = CAST ( SystemIdle as int )
FROM ( SELECT Record . value ( ' ( . / Record / SchedulerMonitorEvent / SystemHealth / SystemIdle ) [ 1 ] ' , ' int ' ) as SystemIdle ,
Record . value ( ' ( . / Record / SchedulerMonitorEvent / SystemHealth / ProcessUtilization ) [ 1 ] ' , ' int ' ) as ProcessUtilization ,
timestamp as timestamp_ms
FROM ( SELECT timestamp , convert ( xml , record ) As Record
FROM sys . dm_os_ring_buffers
WHERE ring_buffer_type = N ' RING_BUFFER_SCHEDULER_MONITOR '
And record Like ' % < SystemHealth > % ' ) x ) y
ORDER BY timestamp_ms Desc
) as T ;
`
const sqlPerformanceCounters string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
IF OBJECT_ID ( ' tempdb . . # PCounters ' ) IS NOT NULL DROP TABLE # PCounters
CREATE TABLE # PCounters
(
object_name nvarchar ( 128 ) ,
counter_name nvarchar ( 128 ) ,
instance_name nvarchar ( 128 ) ,
cntr_value bigint ,
cntr_type INT ,
Primary Key ( object_name , counter_name , instance_name )
) ;
INSERT # PCounters
2017-09-14 22:04:13 +00:00
SELECT DISTINCT RTrim ( spi . object_name ) object_name
2016-01-26 19:30:02 +00:00
, RTrim ( spi . counter_name ) counter_name
, RTrim ( spi . instance_name ) instance_name
, spi . cntr_value
, spi . cntr_type
FROM sys . dm_os_performance_counters spi
WHERE spi . object_name NOT LIKE ' SQLServer : Backup Device % '
AND NOT EXISTS ( SELECT 1 FROM sys . databases WHERE Name = spi . instance_name ) ;
WAITFOR DELAY ' 00 : 00 : 01 ' ;
IF OBJECT_ID ( ' tempdb . . # CCounters ' ) IS NOT NULL DROP TABLE # CCounters
CREATE TABLE # CCounters
(
object_name nvarchar ( 128 ) ,
counter_name nvarchar ( 128 ) ,
instance_name nvarchar ( 128 ) ,
cntr_value bigint ,
cntr_type INT ,
Primary Key ( object_name , counter_name , instance_name )
) ;
INSERT # CCounters
2017-09-14 22:04:13 +00:00
SELECT DISTINCT RTrim ( spi . object_name ) object_name
2016-01-26 19:30:02 +00:00
, RTrim ( spi . counter_name ) counter_name
, RTrim ( spi . instance_name ) instance_name
, spi . cntr_value
, spi . cntr_type
FROM sys . dm_os_performance_counters spi
WHERE spi . object_name NOT LIKE ' SQLServer : Backup Device % '
AND NOT EXISTS ( SELECT 1 FROM sys . databases WHERE Name = spi . instance_name ) ;
SELECT
measurement = cc . counter_name
+ CASE WHEN LEN ( cc . instance_name ) > 0 THEN ' | ' + cc . instance_name ELSE ' ' END
+ ' | '
+ SUBSTRING ( cc . object_name , CHARINDEX ( ':' , cc . object_name ) + 1 , LEN ( cc . object_name ) - CHARINDEX ( ':' , cc . object_name ) )
-- tags
, servername = REPLACE ( @ @ SERVERNAME , ' \ ' , ':' )
, type = ' Performance counters '
-- , countertype = CASE cc . cntr_type
-- When 65792 Then ' Count '
-- When 537003264 Then ' Ratio '
-- When 272696576 Then ' Per second '
-- When 1073874176 Then ' Average '
-- When 272696320 Then ' Average Per Second '
-- When 1073939712 Then ' Base '
-- END
-- value
, value = CAST ( CASE cc . cntr_type
When 65792 Then cc . cntr_value -- Count
When 537003264 Then IsNull ( Cast ( cc . cntr_value as Money ) / NullIf ( cbc . cntr_value , 0 ) , 0 ) -- Ratio
When 272696576 Then cc . cntr_value - pc . cntr_value -- Per Second
When 1073874176 Then IsNull ( Cast ( cc . cntr_value - pc . cntr_value as Money ) / NullIf ( cbc . cntr_value - pbc . cntr_value , 0 ) , 0 ) -- Avg
When 272696320 Then IsNull ( Cast ( cc . cntr_value - pc . cntr_value as Money ) / NullIf ( cbc . cntr_value - pbc . cntr_value , 0 ) , 0 ) -- Avg / sec
When 1073939712 Then cc . cntr_value - pc . cntr_value -- Base
2016-04-23 07:14:04 +00:00
Else cc . cntr_value End as bigint )
2016-01-26 19:30:02 +00:00
-- , currentvalue = CAST ( cc . cntr_value as bigint )
FROM # CCounters cc
INNER JOIN # PCounters pc On cc . object_name = pc . object_name
And cc . counter_name = pc . counter_name
And cc . instance_name = pc . instance_name
And cc . cntr_type = pc . cntr_type
LEFT JOIN # CCounters cbc On cc . object_name = cbc . object_name
And ( Case When cc . counter_name Like ' % ( ms ) ' Then Replace ( cc . counter_name , ' ( ms ) ',' Base ' )
When cc . object_name = ' SQLServer : FileTable ' Then Replace ( cc . counter_name , ' Avg ',' ' ) + ' base '
When cc . counter_name = ' Worktables From Cache Ratio ' Then ' Worktables From Cache Base '
When cc . counter_name = ' Avg . Length of Batched Writes ' Then ' Avg . Length of Batched Writes BS '
Else cc . counter_name + ' base '
End ) = cbc . counter_name
And cc . instance_name = cbc . instance_name
And cc . cntr_type In ( 537003264 , 1073874176 )
And cbc . cntr_type = 1073939712
LEFT JOIN # PCounters pbc On pc . object_name = pbc . object_name
And pc . instance_name = pbc . instance_name
And ( Case When pc . counter_name Like ' % ( ms ) ' Then Replace ( pc . counter_name , ' ( ms ) ',' Base ' )
When pc . object_name = ' SQLServer : FileTable ' Then Replace ( pc . counter_name , ' Avg ',' ' ) + ' base '
When pc . counter_name = ' Worktables From Cache Ratio ' Then ' Worktables From Cache Base '
When pc . counter_name = ' Avg . Length of Batched Writes ' Then ' Avg . Length of Batched Writes BS '
Else pc . counter_name + ' base '
End ) = pbc . counter_name
And pc . cntr_type In ( 537003264 , 1073874176 )
IF OBJECT_ID ( ' tempdb . . # CCounters ' ) IS NOT NULL DROP TABLE # CCounters ;
IF OBJECT_ID ( ' tempdb . . # PCounters ' ) IS NOT NULL DROP TABLE # PCounters ;
`
const sqlWaitStatsCategorized string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DECLARE @ secondsBetween tinyint = 5
DECLARE @ delayInterval char ( 8 ) = CONVERT ( Char ( 8 ) , DATEADD ( SECOND , @ secondsBetween , ' 00 : 00 : 00 ' ) , 108 ) ;
DECLARE @ w1 TABLE
(
WaitType nvarchar ( 64 ) NOT NULL ,
WaitTimeInMs bigint NOT NULL ,
WaitTaskCount bigint NOT NULL ,
CollectionDate datetime NOT NULL
)
DECLARE @ w2 TABLE
(
WaitType nvarchar ( 64 ) NOT NULL ,
WaitTimeInMs bigint NOT NULL ,
WaitTaskCount bigint NOT NULL ,
CollectionDate datetime NOT NULL
)
DECLARE @ w3 TABLE
(
WaitType nvarchar ( 64 ) NOT NULL
)
DECLARE @ w4 TABLE
(
WaitType nvarchar ( 64 ) NOT NULL ,
WaitCategory nvarchar ( 64 ) NOT NULL
)
DECLARE @ w5 TABLE
(
2016-10-06 13:21:14 +00:00
WaitCategory nvarchar ( 64 ) NOT NULL ,
2016-01-26 19:30:02 +00:00
WaitTimeInMs bigint NOT NULL ,
WaitTaskCount bigint NOT NULL
)
INSERT @ w3 ( WaitType )
VALUES ( N ' QDS_SHUTDOWN_QUEUE ' ) , ( N ' HADR_FILESTREAM_IOMGR_IOCOMPLETION ' ) ,
( N ' BROKER_EVENTHANDLER ' ) , ( N ' BROKER_RECEIVE_WAITFOR ' ) ,
( N ' BROKER_TASK_STOP ' ) , ( N ' BROKER_TO_FLUSH ' ) ,
( N ' BROKER_TRANSMITTER ' ) , ( N ' CHECKPOINT_QUEUE ' ) ,
( N ' CHKPT ' ) , ( N ' CLR_AUTO_EVENT ' ) ,
( N ' CLR_MANUAL_EVENT ' ) , ( N ' CLR_SEMAPHORE ' ) ,
( N ' DBMIRROR_DBM_EVENT ' ) , ( N ' DBMIRROR_EVENTS_QUEUE ' ) ,
( N ' DBMIRROR_WORKER_QUEUE ' ) , ( N ' DBMIRRORING_CMD ' ) ,
( N ' DIRTY_PAGE_POLL ' ) , ( N ' DISPATCHER_QUEUE_SEMAPHORE ' ) ,
( N ' EXECSYNC ' ) , ( N ' FSAGENT ' ) ,
( N ' FT_IFTS_SCHEDULER_IDLE_WAIT ' ) , ( N ' FT_IFTSHC_MUTEX ' ) ,
( N ' HADR_CLUSAPI_CALL ' ) , ( N ' HADR_FILESTREAM_IOMGR_IOCOMPLETIO ( N ' ) ,
( N ' HADR_LOGCAPTURE_WAIT ' ) , ( N ' HADR_NOTIFICATION_DEQUEUE ' ) ,
( N ' HADR_TIMER_TASK ' ) , ( N ' HADR_WORK_QUEUE ' ) ,
( N ' KSOURCE_WAKEUP ' ) , ( N ' LAZYWRITER_SLEEP ' ) ,
( N ' LOGMGR_QUEUE ' ) , ( N ' ONDEMAND_TASK_QUEUE ' ) ,
( N ' PWAIT_ALL_COMPONENTS_INITIALIZED ' ) ,
( N ' QDS_PERSIST_TASK_MAIN_LOOP_SLEEP ' ) ,
( N ' QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP ' ) ,
( N ' REQUEST_FOR_DEADLOCK_SEARCH ' ) , ( N ' RESOURCE_QUEUE ' ) ,
( N ' SERVER_IDLE_CHECK ' ) , ( N ' SLEEP_BPOOL_FLUSH ' ) ,
( N ' SLEEP_DBSTARTUP ' ) , ( N ' SLEEP_DCOMSTARTUP ' ) ,
( N ' SLEEP_MASTERDBREADY ' ) , ( N ' SLEEP_MASTERMDREADY ' ) ,
( N ' SLEEP_MASTERUPGRADED ' ) , ( N ' SLEEP_MSDBSTARTUP ' ) ,
( N ' SLEEP_SYSTEMTASK ' ) , ( N ' SLEEP_TASK ' ) ,
( N ' SLEEP_TEMPDBSTARTUP ' ) , ( N ' SNI_HTTP_ACCEPT ' ) ,
( N ' SP_SERVER_DIAGNOSTICS_SLEEP ' ) , ( N ' SQLTRACE_BUFFER_FLUSH ' ) ,
( N ' SQLTRACE_INCREMENTAL_FLUSH_SLEEP ' ) ,
( N ' SQLTRACE_WAIT_ENTRIES ' ) , ( N ' WAIT_FOR_RESULTS ' ) ,
( N ' WAITFOR ' ) , ( N ' WAITFOR_TASKSHUTDOW ( N ' ) ,
( N ' WAIT_XTP_HOST_WAIT ' ) , ( N ' WAIT_XTP_OFFLINE_CKPT_NEW_LOG ' ) ,
( N ' WAIT_XTP_CKPT_CLOSE ' ) , ( N ' XE_DISPATCHER_JOI ( N ' ) ,
( N ' XE_DISPATCHER_WAIT ' ) , ( N ' XE_TIMER_EVENT ' ) ;
INSERT @ w4 ( WaitType , WaitCategory ) VALUES ( ' ABR ' , ' OTHER ' ) ,
( ' ASSEMBLY_LOAD ' , ' OTHER ' ) , ( ' ASYNC_DISKPOOL_LOCK ' , ' I / O ' ) , ( ' ASYNC_IO_COMPLETION ' , ' I / O ' ) ,
( ' ASYNC_NETWORK_IO ' , ' NETWORK ' ) , ( ' AUDIT_GROUPCACHE_LOCK ' , ' OTHER ' ) , ( ' AUDIT_LOGINCACHE_LOCK ' ,
' OTHER ' ) , ( ' AUDIT_ON_DEMAND_TARGET_LOCK ' , ' OTHER ' ) , ( ' AUDIT_XE_SESSION_MGR ' , ' OTHER ' ) , ( ' BACKUP ' ,
' BACKUP ' ) , ( ' BACKUP_CLIENTLOCK ' , ' BACKUP ' ) , ( ' BACKUP_OPERATOR ' , ' BACKUP ' ) , ( ' BACKUPBUFFER ' ,
' BACKUP ' ) , ( ' BACKUPIO ' , ' BACKUP ' ) , ( ' BACKUPTHREAD ' , ' BACKUP ' ) , ( ' BAD_PAGE_PROCESS ' , ' MEMORY ' ) ,
( ' BROKER_CONNECTION_RECEIVE_TASK ' , ' SERVICE BROKER ' ) , ( ' BROKER_ENDPOINT_STATE_MUTEX ' , ' SERVICE BROKER ' )
, ( ' BROKER_EVENTHANDLER ' , ' SERVICE BROKER ' ) , ( ' BROKER_INIT ' , ' SERVICE BROKER ' ) , ( ' BROKER_MASTERSTART '
, ' SERVICE BROKER ' ) , ( ' BROKER_RECEIVE_WAITFOR ' , ' SERVICE BROKER ' ) , ( ' BROKER_REGISTERALLENDPOINTS ' ,
' SERVICE BROKER ' ) , ( ' BROKER_SERVICE ' , ' SERVICE BROKER ' ) , ( ' BROKER_SHUTDOWN ' , ' SERVICE BROKER ' ) ,
( ' BROKER_TASK_STOP ' , ' SERVICE BROKER ' ) , ( ' BROKER_TO_FLUSH ' , ' SERVICE BROKER ' ) , ( ' BROKER_TRANSMITTER ' ,
' SERVICE BROKER ' ) , ( ' BUILTIN_HASHKEY_MUTEX ' , ' OTHER ' ) , ( ' CHECK_PRINT_RECORD ' , ' OTHER ' ) ,
( ' CHECKPOINT_QUEUE ' , ' BUFFER ' ) , ( ' CHKPT ' , ' BUFFER ' ) , ( ' CLEAR_DB ' , ' OTHER ' ) , ( ' CLR_AUTO_EVENT ' ,
' CLR ' ) , ( ' CLR_CRST ' , ' CLR ' ) , ( ' CLR_JOIN ' , ' CLR ' ) , ( ' CLR_MANUAL_EVENT ' , ' CLR ' ) , ( ' CLR_MEMORY_SPY ' ,
' CLR ' ) , ( ' CLR_MONITOR ' , ' CLR ' ) , ( ' CLR_RWLOCK_READER ' , ' CLR ' ) , ( ' CLR_RWLOCK_WRITER ' , ' CLR ' ) ,
( ' CLR_SEMAPHORE ' , ' CLR ' ) , ( ' CLR_TASK_START ' , ' CLR ' ) , ( ' CLRHOST_STATE_ACCESS ' , ' CLR ' ) , ( ' CMEMTHREAD '
, ' MEMORY ' ) , ( ' COMMIT_TABLE ' , ' OTHER ' ) , ( ' CURSOR ' , ' OTHER ' ) , ( ' CURSOR_ASYNC ' , ' OTHER ' ) , ( ' CXPACKET '
, ' OTHER ' ) , ( ' CXROWSET_SYNC ' , ' OTHER ' ) , ( ' DAC_INIT ' , ' OTHER ' ) , ( ' DBMIRROR_DBM_EVENT ' , ' OTHER ' ) ,
( ' DBMIRROR_DBM_MUTEX ' , ' OTHER ' ) , ( ' DBMIRROR_EVENTS_QUEUE ' , ' OTHER ' ) , ( ' DBMIRROR_SEND ' , ' OTHER ' ) ,
( ' DBMIRROR_WORKER_QUEUE ' , ' OTHER ' ) , ( ' DBMIRRORING_CMD ' , ' OTHER ' ) , ( ' DBTABLE ' , ' OTHER ' ) ,
( ' DEADLOCK_ENUM_MUTEX ' , ' LOCK ' ) , ( ' DEADLOCK_TASK_SEARCH ' , ' LOCK ' ) , ( ' DEBUG ' , ' OTHER ' ) ,
( ' DISABLE_VERSIONING ' , ' OTHER ' ) , ( ' DISKIO_SUSPEND ' , ' BACKUP ' ) , ( ' DISPATCHER_QUEUE_SEMAPHORE ' ,
' OTHER ' ) , ( ' DLL_LOADING_MUTEX ' , ' XML ' ) , ( ' DROPTEMP ' , ' TEMPORARY OBJECTS ' ) , ( ' DTC ' , ' OTHER ' ) ,
( ' DTC_ABORT_REQUEST ' , ' OTHER ' ) , ( ' DTC_RESOLVE ' , ' OTHER ' ) , ( ' DTC_STATE ' , ' DOTHERTC ' ) ,
( ' DTC_TMDOWN_REQUEST ' , ' OTHER ' ) , ( ' DTC_WAITFOR_OUTCOME ' , ' OTHER ' ) , ( ' DUMP_LOG_COORDINATOR ' , ' OTHER ' )
, ( ' DUMP_LOG_COORDINATOR_QUEUE ' , ' OTHER ' ) , ( ' DUMPTRIGGER ' , ' OTHER ' ) , ( ' EC ' , ' OTHER ' ) , ( ' EE_PMOLOCK '
, ' MEMORY ' ) , ( ' EE_SPECPROC_MAP_INIT ' , ' OTHER ' ) , ( ' ENABLE_VERSIONING ' , ' OTHER ' ) ,
( ' ERROR_REPORTING_MANAGER ' , ' OTHER ' ) , ( ' EXCHANGE ' , ' OTHER ' ) , ( ' EXECSYNC ' , ' OTHER ' ) ,
( ' EXECUTION_PIPE_EVENT_OTHER ' , ' OTHER ' ) , ( ' Failpoint ' , ' OTHER ' ) , ( ' FCB_REPLICA_READ ' , ' OTHER ' ) ,
( ' FCB_REPLICA_WRITE ' , ' OTHER ' ) , ( ' FS_FC_RWLOCK ' , ' OTHER ' ) , ( ' FS_GARBAGE_COLLECTOR_SHUTDOWN ' , ' OTHER ' )
, ( ' FS_HEADER_RWLOCK ' , ' OTHER ' ) , ( ' FS_LOGTRUNC_RWLOCK ' , ' OTHER ' ) , ( ' FSA_FORCE_OWN_XACT ' , ' OTHER ' ) ,
( ' FSAGENT ' , ' OTHER ' ) , ( ' FSTR_CONFIG_MUTEX ' , ' OTHER ' ) , ( ' FSTR_CONFIG_RWLOCK ' , ' OTHER ' ) ,
( ' FT_COMPROWSET_RWLOCK ' , ' OTHER ' ) , ( ' FT_IFTS_RWLOCK ' , ' OTHER ' ) , ( ' FT_IFTS_SCHEDULER_IDLE_WAIT ' ,
' OTHER ' ) , ( ' FT_IFTSHC_MUTEX ' , ' OTHER ' ) , ( ' FT_IFTSISM_MUTEX ' , ' OTHER ' ) , ( ' FT_MASTER_MERGE ' , ' OTHER ' )
, ( ' FT_METADATA_MUTEX ' , ' OTHER ' ) , ( ' FT_RESTART_CRAWL ' , ' OTHER ' ) , ( ' FT_RESUME_CRAWL ' , ' OTHER ' ) ,
( ' FULLTEXT GATHERER ' , ' OTHER ' ) , ( ' GUARDIAN ' , ' OTHER ' ) , ( ' HTTP_ENDPOINT_COLLCREATE ' , ' SERVICE BROKER ' )
, ( ' HTTP_ENUMERATION ' , ' SERVICE BROKER ' ) , ( ' HTTP_START ' , ' SERVICE BROKER ' ) , ( ' IMP_IMPORT_MUTEX ' ,
' OTHER ' ) , ( ' IMPPROV_IOWAIT ' , ' I / O ' ) , ( ' INDEX_USAGE_STATS_MUTEX ' , ' OTHER ' ) , ( ' OTHER_TESTING ' ,
' OTHER ' ) , ( ' IO_AUDIT_MUTEX ' , ' OTHER ' ) , ( ' IO_COMPLETION ' , ' I / O ' ) , ( ' IO_RETRY ' , ' I / O ' ) ,
( ' IOAFF_RANGE_QUEUE ' , ' OTHER ' ) , ( ' KSOURCE_WAKEUP ' , ' SHUTDOWN ' ) , ( ' KTM_ENLISTMENT ' , ' OTHER ' ) ,
( ' KTM_RECOVERY_MANAGER ' , ' OTHER ' ) , ( ' KTM_RECOVERY_RESOLUTION ' , ' OTHER ' ) , ( ' LATCH_DT ' , ' LATCH ' ) ,
( ' LATCH_EX ' , ' LATCH ' ) , ( ' LATCH_KP ' , ' LATCH ' ) , ( ' LATCH_NL ' , ' LATCH ' ) , ( ' LATCH_SH ' , ' LATCH ' ) ,
( ' LATCH_UP ' , ' LATCH ' ) , ( ' LAZYWRITER_SLEEP ' , ' BUFFER ' ) , ( ' LCK_M_BU ' , ' LOCK ' ) , ( ' LCK_M_IS ' , ' LOCK ' ) ,
( ' LCK_M_IU ' , ' LOCK ' ) , ( ' LCK_M_IX ' , ' LOCK ' ) , ( ' LCK_M_RIn_NL ' , ' LOCK ' ) , ( ' LCK_M_RIn_S ' , ' LOCK ' ) ,
( ' LCK_M_RIn_U ' , ' LOCK ' ) , ( ' LCK_M_RIn_X ' , ' LOCK ' ) , ( ' LCK_M_RS_S ' , ' LOCK ' ) , ( ' LCK_M_RS_U ' , ' LOCK ' ) ,
( ' LCK_M_RX_S ' , ' LOCK ' ) , ( ' LCK_M_RX_U ' , ' LOCK ' ) , ( ' LCK_M_RX_X ' , ' LOCK ' ) , ( ' LCK_M_S ' , ' LOCK ' ) ,
( ' LCK_M_SCH_M ' , ' LOCK ' ) , ( ' LCK_M_SCH_S ' , ' LOCK ' ) , ( ' LCK_M_SIU ' , ' LOCK ' ) , ( ' LCK_M_SIX ' , ' LOCK ' ) ,
( ' LCK_M_U ' , ' LOCK ' ) , ( ' LCK_M_UIX ' , ' LOCK ' ) , ( ' LCK_M_X ' , ' LOCK ' ) , ( ' LOGBUFFER ' , ' OTHER ' ) ,
( ' LOGGENERATION ' , ' OTHER ' ) , ( ' LOGMGR ' , ' OTHER ' ) , ( ' LOGMGR_FLUSH ' , ' OTHER ' ) , ( ' LOGMGR_QUEUE ' ,
' OTHER ' ) , ( ' LOGMGR_RESERVE_APPEND ' , ' OTHER ' ) , ( ' LOWFAIL_MEMMGR_QUEUE ' , ' MEMORY ' ) ,
( ' METADATA_LAZYCACHE_RWLOCK ' , ' OTHER ' ) , ( ' MIRROR_SEND_MESSAGE ' , ' OTHER ' ) , ( ' MISCELLANEOUS ' , ' IGNORE ' )
, ( ' MSQL_DQ ' , ' DISTRIBUTED QUERY ' ) , ( ' MSQL_SYNC_PIPE ' , ' OTHER ' ) , ( ' MSQL_XACT_MGR_MUTEX ' , ' OTHER ' ) ,
( ' MSQL_XACT_MUTEX ' , ' OTHER ' ) , ( ' MSQL_XP ' , ' OTHER ' ) , ( ' MSSEARCH ' , ' OTHER ' ) , ( ' NET_WAITFOR_PACKET ' ,
' NETWORK ' ) , ( ' NODE_CACHE_MUTEX ' , ' OTHER ' ) , ( ' OTHER ' , ' OTHER ' ) , ( ' ONDEMAND_TASK_QUEUE ' , ' OTHER ' ) ,
( ' PAGEIOLATCH_DT ' , ' LATCH ' ) , ( ' PAGEIOLATCH_EX ' , ' LATCH ' ) , ( ' PAGEIOLATCH_KP ' , ' LATCH ' ) ,
( ' PAGEIOLATCH_NL ' , ' LATCH ' ) , ( ' PAGEIOLATCH_SH ' , ' LATCH ' ) , ( ' PAGEIOLATCH_UP ' , ' LATCH ' ) ,
( ' PAGELATCH_DT ' , ' LATCH ' ) , ( ' PAGELATCH_EX ' , ' LATCH ' ) , ( ' PAGELATCH_KP ' , ' LATCH ' ) , ( ' PAGELATCH_NL ' ,
' LATCH ' ) , ( ' PAGELATCH_SH ' , ' LATCH ' ) , ( ' PAGELATCH_UP ' , ' LATCH ' ) , ( ' PARALLEL_BACKUP_QUEUE ' , ' BACKUP ' )
, ( ' PERFORMANCE_COUNTERS_RWLOCK ' , ' OTHER ' ) , ( ' PREEMPTIVE_ABR ' , ' OTHER ' ) ,
( ' PREEMPTIVE_AUDIT_ACCESS_EVENTLOG ' , ' OTHER ' ) , ( ' PREEMPTIVE_AUDIT_ACCESS_SECLOG ' , ' OTHER ' ) ,
( ' PREEMPTIVE_CLOSEBACKUPMEDIA ' , ' OTHER ' ) , ( ' PREEMPTIVE_CLOSEBACKUPTAPE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_CLOSEBACKUPVDIDEVICE ' , ' OTHER ' ) , ( ' PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_COCREATEINSTANCE ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_COGETCLASSOBJECT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_CREATEACCESSOR ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_DELETEROWS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_GETCOMMANDTEXT ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_GETDATA ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_GETNEXTROWS ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_GETRESULT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_GETROWSBYBOOKMARK ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_LBFLUSH ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_LBLOCKREGION ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_LBREADAT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_LBSETSIZE ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_LBSTAT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_LBUNLOCKREGION ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_LBWRITEAT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_QUERYINTERFACE ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_RELEASE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_RELEASEACCESSOR ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_RELEASEROWS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_RELEASESESSION ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_RESTARTPOSITION ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_SEQSTRMREAD ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_SEQSTRMREADANDWRITE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_SETDATAFAILURE ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_SETPARAMETERINFO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_SETPARAMETERPROPERTIES ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_STRMLOCKREGION ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_STRMSEEKANDREAD ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_STRMSEEKANDWRITE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_STRMSETSIZE ' , ' OTHER ' ) , ( ' PREEMPTIVE_COM_STRMSTAT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_COM_STRMUNLOCKREGION ' , ' OTHER ' ) , ( ' PREEMPTIVE_CONSOLEWRITE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_CREATEPARAM ' , ' OTHER ' ) , ( ' PREEMPTIVE_DEBUG ' , ' OTHER ' ) , ( ' PREEMPTIVE_DFSADDLINK ' ,
' OTHER ' ) , ( ' PREEMPTIVE_DFSLINKEXISTCHECK ' , ' OTHER ' ) , ( ' PREEMPTIVE_DFSLINKHEALTHCHECK ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DFSREMOVELINK ' , ' OTHER ' ) , ( ' PREEMPTIVE_DFSREMOVEROOT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DFSROOTFOLDERCHECK ' , ' OTHER ' ) , ( ' PREEMPTIVE_DFSROOTINIT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DFSROOTSHARECHECK ' , ' OTHER ' ) , ( ' PREEMPTIVE_DTC_ABORT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DTC_ABORTREQUESTDONE ' , ' OTHER ' ) , ( ' PREEMPTIVE_DTC_BEGINOTHER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DTC_COMMITREQUESTDONE ' , ' OTHER ' ) , ( ' PREEMPTIVE_DTC_ENLIST ' , ' OTHER ' ) ,
( ' PREEMPTIVE_DTC_PREPAREREQUESTDONE ' , ' OTHER ' ) , ( ' PREEMPTIVE_FILESIZEGET ' , ' OTHER ' ) ,
( ' PREEMPTIVE_FSAOTHER_ABORTOTHER ' , ' OTHER ' ) , ( ' PREEMPTIVE_FSAOTHER_COMMITOTHER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_FSAOTHER_STARTOTHER ' , ' OTHER ' ) , ( ' PREEMPTIVE_FSRECOVER_UNCONDITIONALUNDO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_GETRMINFO ' , ' OTHER ' ) , ( ' PREEMPTIVE_LOCKMONITOR ' , ' OTHER ' ) , ( ' PREEMPTIVE_MSS_RELEASE ' ,
' OTHER ' ) , ( ' PREEMPTIVE_ODBCOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OLE_UNINIT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHER_ABORTORCOMMITTRAN ' , ' OTHER ' ) , ( ' PREEMPTIVE_OTHER_ABORTTRAN ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHER_GETDATASOURCE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OTHER_GETLITERALINFO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHER_GETPROPERTIES ' , ' OTHER ' ) , ( ' PREEMPTIVE_OTHER_GETPROPERTYINFO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHER_GETSCHEMALOCK ' , ' OTHER ' ) , ( ' PREEMPTIVE_OTHER_JOINOTHER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHER_RELEASE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OTHER_SETPROPERTIES ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OTHEROPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_ACCEPTSECURITYCONTEXT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_ACQUIRECREDENTIALSHANDLE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_AU , TICATIONOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_AUTHORIZATIONOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_AUTHZGETINFORMATIONFROMCONTEXT ' , ' OTHER ' )
, ( ' PREEMPTIVE_OS_AUTHZINITIALIZECONTEXTFROMSID ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_AUTHZINITIALIZERESOURCEMANAGER ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_BACKUPREAD ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_CLOSEHANDLE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_CLUSTEROPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_COMOPS '
, ' OTHER ' ) , ( ' PREEMPTIVE_OS_COMPLETEAUTHTOKEN ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_COPYFILE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_CREATEDIRECTORY ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_CREATEFILE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_CRYPTACQUIRECONTEXT ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_CRYPTIMPORTKEY ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_CRYPTOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_DECRYPTMESSAGE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_DELETEFILE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_DELETESECURITYCONTEXT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_DEVICEIOCONTROL ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_DEVICEOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_DIRSVC_NETWORKOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_DISCONNECTNAMEDPIPE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_DOMAINSERVICESOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_DSGETDCNAME ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_DTCOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_ENCRYPTMESSAGE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_FILEOPS '
, ' OTHER ' ) , ( ' PREEMPTIVE_OS_FINDFILE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_FLUSHFILEBUFFERS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_FORMATMESSAGE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_FREECREDENTIALSHANDLE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_FREELIBRARY ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_GENERICOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_GETADDRINFO ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_GETCOMPRESSEDFILESIZE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_GETDISKFREESPACE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_GETFILEATTRIBUTES ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_GETFILESIZE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_GETLONGPATHNAME ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_GETPROCADDRESS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_GETVOLUMENAMEFORVOLUMEMOUNTPOINT ' , ' OTHER ' )
, ( ' PREEMPTIVE_OS_GETVOLUMEPATHNAME ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_INITIALIZESECURITYCONTEXT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_LIBRARYOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_LOADLIBRARY ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_LOGONUSER ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_LOOKUPACCOUNTSID ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_MESSAGEQUEUEOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_MOVEFILE ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_NETGROUPGETUSERS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_NETLOCALGROUPGETMEMBERS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_NETUSERGETGROUPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_NETUSERGETLOCALGROUPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_NETUSERMODALSGET ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICY ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYFREE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_OPENDIRECTORY ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_PIPEOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_PROCESSOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_QUERYREGISTRY ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_QUERYSECURITYCONTEXTTOKEN ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_REMOVEDIRECTORY ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_REPORTEVENT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_REVERTTOSELF ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_RSFXDEVICEOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_SECURITYOPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_SERVICEOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_SETENDOFFILE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_SETFILEPOINTER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_SETFILEVALIDDATA ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_SETNAMEDSECURITYINFO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_SQLCLROPS ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_SQMLAUNCH ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_VERIFYSIGNATURE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_VSSOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_WAITFORSINGLEOBJECT ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_WINSOCKOPS ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_WRITEFILE ' , ' OTHER ' ) , ( ' PREEMPTIVE_OS_WRITEFILEGATHER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_OS_WSASETLASTERROR ' , ' OTHER ' ) , ( ' PREEMPTIVE_REENLIST ' , ' OTHER ' ) , ( ' PREEMPTIVE_RESIZELOG '
, ' OTHER ' ) , ( ' PREEMPTIVE_ROLLFORWARDREDO ' , ' OTHER ' ) , ( ' PREEMPTIVE_ROLLFORWARDUNDO ' , ' OTHER ' ) ,
( ' PREEMPTIVE_SB_STOPENDPOINT ' , ' OTHER ' ) , ( ' PREEMPTIVE_SERVER_STARTUP ' , ' OTHER ' ) ,
( ' PREEMPTIVE_SETRMINFO ' , ' OTHER ' ) , ( ' PREEMPTIVE_SHAREDMEM_GETDATA ' , ' OTHER ' ) , ( ' PREEMPTIVE_SNIOPEN ' ,
' OTHER ' ) , ( ' PREEMPTIVE_SOSHOST ' , ' OTHER ' ) , ( ' PREEMPTIVE_SOSTESTING ' , ' OTHER ' ) , ( ' PREEMPTIVE_STARTRM '
, ' OTHER ' ) , ( ' PREEMPTIVE_STREAMFCB_CHECKPOINT ' , ' OTHER ' ) , ( ' PREEMPTIVE_STREAMFCB_RECOVER ' , ' OTHER ' ) ,
( ' PREEMPTIVE_STRESSDRIVER ' , ' OTHER ' ) , ( ' PREEMPTIVE_TESTING ' , ' OTHER ' ) , ( ' PREEMPTIVE_TRANSIMPORT ' ,
' OTHER ' ) , ( ' PREEMPTIVE_UNMARSHALPROPAGATIONTOKEN ' , ' OTHER ' ) , ( ' PREEMPTIVE_VSS_CREATESNAPSHOT ' ,
' OTHER ' ) , ( ' PREEMPTIVE_VSS_CREATEVOLUMESNAPSHOT ' , ' OTHER ' ) , ( ' PREEMPTIVE_XE_CALLBACKEXECUTE ' , ' OTHER ' )
, ( ' PREEMPTIVE_XE_DISPATCHER ' , ' OTHER ' ) , ( ' PREEMPTIVE_XE_ENGINEINIT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_XE_GETTARGETSTATE ' , ' OTHER ' ) , ( ' PREEMPTIVE_XE_SESSIONCOMMIT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_XE_TARGETFINALIZE ' , ' OTHER ' ) , ( ' PREEMPTIVE_XE_TARGETINIT ' , ' OTHER ' ) ,
( ' PREEMPTIVE_XE_TIMERRUN ' , ' OTHER ' ) , ( ' PREEMPTIVE_XETESTING ' , ' OTHER ' ) , ( ' PREEMPTIVE_XXX ' , ' OTHER ' ) ,
( ' PRINT_ROLLBACK_PROGRESS ' , ' OTHER ' ) , ( ' QNMANAGER_ACQUIRE ' , ' OTHER ' ) , ( ' QPJOB_KILL ' , ' OTHER ' ) ,
( ' QPJOB_WAITFOR_ABORT ' , ' OTHER ' ) , ( ' QRY_MEM_GRANT_INFO_MUTEX ' , ' OTHER ' ) , ( ' QUERY_ERRHDL_SERVICE_DONE '
, ' OTHER ' ) , ( ' QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN ' , ' OTHER ' ) , ( ' QUERY_NOTIFICATION_MGR_MUTEX ' ,
' OTHER ' ) , ( ' QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX ' , ' OTHER ' ) , ( ' QUERY_NOTIFICATION_TABLE_MGR_MUTEX ' ,
' OTHER ' ) , ( ' QUERY_NOTIFICATION_UNITTEST_MUTEX ' , ' OTHER ' ) , ( ' QUERY_OPTIMIZER_PRINT_MUTEX ' , ' OTHER ' ) ,
( ' QUERY_TRACEOUT ' , ' OTHER ' ) , ( ' QUERY_WAIT_ERRHDL_SERVICE ' , ' OTHER ' ) , ( ' RECOVER_CHANGEDB ' , ' OTHER ' ) ,
( ' REPL_CACHE_ACCESS ' , ' REPLICATION ' ) , ( ' REPL_HISTORYCACHE_ACCESS ' , ' OTHER ' ) , ( ' REPL_SCHEMA_ACCESS ' ,
' OTHER ' ) , ( ' REPL_TRANHASHTABLE_ACCESS ' , ' OTHER ' ) , ( ' REPLICA_WRITES ' , ' OTHER ' ) ,
( ' REQUEST_DISPENSER_PAUSE ' , ' BACKUP ' ) , ( ' REQUEST_FOR_DEADLOCK_SEARCH ' , ' LOCK ' ) , ( ' RESMGR_THROTTLED ' ,
' OTHER ' ) , ( ' RESOURCE_QUERY_SEMAPHORE_COMPILE ' , ' QUERY ' ) , ( ' RESOURCE_QUEUE ' , ' OTHER ' ) ,
( ' RESOURCE_SEMAPHORE ' , ' OTHER ' ) , ( ' RESOURCE_SEMAPHORE_MUTEX ' , ' MEMORY ' ) ,
( ' RESOURCE_SEMAPHORE_QUERY_COMPILE ' , ' MEMORY ' ) , ( ' RESOURCE_SEMAPHORE_SMALL_QUERY ' , ' MEMORY ' ) ,
( ' RG_RECONFIG ' , ' OTHER ' ) , ( ' SEC_DROP_TEMP_KEY ' , ' SECURITY ' ) , ( ' SECURITY_MUTEX ' , ' OTHER ' ) ,
( ' SEQUENTIAL_GUID ' , ' OTHER ' ) , ( ' SERVER_IDLE_CHECK ' , ' OTHER ' ) , ( ' SHUTDOWN ' , ' OTHER ' ) ,
( ' SLEEP_BPOOL_FLUSH ' , ' OTHER ' ) , ( ' SLEEP_DBSTARTUP ' , ' OTHER ' ) , ( ' SLEEP_DCOMSTARTUP ' , ' OTHER ' ) ,
( ' SLEEP_MSDBSTARTUP ' , ' OTHER ' ) , ( ' SLEEP_SYSTEMTASK ' , ' OTHER ' ) , ( ' SLEEP_TASK ' , ' OTHER ' ) ,
( ' SLEEP_TEMPDBSTARTUP ' , ' OTHER ' ) , ( ' SNI_CRITICAL_SECTION ' , ' OTHER ' ) , ( ' SNI_HTTP_ACCEPT ' , ' OTHER ' ) ,
( ' SNI_HTTP_WAITFOR_0_DISCON ' , ' OTHER ' ) , ( ' SNI_LISTENER_ACCESS ' , ' OTHER ' ) , ( ' SNI_TASK_COMPLETION ' ,
' OTHER ' ) , ( ' SOAP_READ ' , ' OTHER ' ) , ( ' SOAP_WRITE ' , ' OTHER ' ) , ( ' SOS_CALLBACK_REMOVAL ' , ' OTHER ' ) ,
( ' SOS_DISPATCHER_MUTEX ' , ' OTHER ' ) , ( ' SOS_LOCALALLOCATORLIST ' , ' OTHER ' ) , ( ' SOS_MEMORY_USAGE_ADJUSTMENT '
, ' OTHER ' ) , ( ' SOS_OBJECT_STORE_DESTROY_MUTEX ' , ' OTHER ' ) , ( ' SOS_PROCESS_AFFINITY_MUTEX ' , ' OTHER ' ) ,
( ' SOS_RESERVEDMEMBLOCKLIST ' , ' OTHER ' ) , ( ' SOS_SCHEDULER_YIELD ' , ' SQLOS ' ) , ( ' SOS_SMALL_PAGE_ALLOC ' ,
' OTHER ' ) , ( ' SOS_STACKSTORE_INIT_MUTEX ' , ' OTHER ' ) , ( ' SOS_SYNC_TASK_ENQUEUE_EVENT ' , ' OTHER ' ) ,
( ' SOS_VIRTUALMEMORY_LOW ' , ' OTHER ' ) , ( ' SOSHOST_EVENT ' , ' CLR ' ) , ( ' SOSHOST_OTHER ' , ' CLR ' ) ,
( ' SOSHOST_MUTEX ' , ' CLR ' ) , ( ' SOSHOST_ROWLOCK ' , ' CLR ' ) , ( ' SOSHOST_RWLOCK ' , ' CLR ' ) ,
( ' SOSHOST_SEMAPHORE ' , ' CLR ' ) , ( ' SOSHOST_SLEEP ' , ' CLR ' ) , ( ' SOSHOST_TRACELOCK ' , ' CLR ' ) ,
( ' SOSHOST_WAITFORDONE ' , ' CLR ' ) , ( ' SQLCLR_APPDOMAIN ' , ' CLR ' ) , ( ' SQLCLR_ASSEMBLY ' , ' CLR ' ) ,
( ' SQLCLR_DEADLOCK_DETECTION ' , ' CLR ' ) , ( ' SQLCLR_QUANTUM_PUNISHMENT ' , ' CLR ' ) , ( ' SQLSORT_NORMMUTEX ' ,
' OTHER ' ) , ( ' SQLSORT_SORTMUTEX ' , ' OTHER ' ) , ( ' SQLTRACE_BUFFER_FLUSH ' , ' TRACE ' ) , ( ' SQLTRACE_LOCK ' ,
' OTHER ' ) , ( ' SQLTRACE_SHUTDOWN ' , ' OTHER ' ) , ( ' SQLTRACE_WAIT_ENTRIES ' , ' OTHER ' ) , ( ' SRVPROC_SHUTDOWN ' ,
' OTHER ' ) , ( ' TEMPOBJ ' , ' OTHER ' ) , ( ' THREADPOOL ' , ' SQLOS ' ) , ( ' TIMEPRIV_TIMEPERIOD ' , ' OTHER ' ) ,
( ' TRACE_EVTNOTIF ' , ' OTHER ' ) , ( ' TRACEWRITE ' , ' OTHER ' ) , ( ' TRAN_MARKLATCH_DT ' , ' TRAN_MARKLATCH ' ) ,
( ' TRAN_MARKLATCH_EX ' , ' TRAN_MARKLATCH ' ) , ( ' TRAN_MARKLATCH_KP ' , ' TRAN_MARKLATCH ' ) , ( ' TRAN_MARKLATCH_NL '
, ' TRAN_MARKLATCH ' ) , ( ' TRAN_MARKLATCH_SH ' , ' TRAN_MARKLATCH ' ) , ( ' TRAN_MARKLATCH_UP ' , ' TRAN_MARKLATCH ' )
, ( ' OTHER_MUTEX ' , ' OTHER ' ) , ( ' UTIL_PAGE_ALLOC ' , ' OTHER ' ) , ( ' VIA_ACCEPT ' , ' OTHER ' ) ,
( ' VIEW_DEFINITION_MUTEX ' , ' OTHER ' ) , ( ' WAIT_FOR_RESULTS ' , ' OTHER ' ) , ( ' WAITFOR ' , ' WAITFOR ' ) ,
( ' WAITFOR_TASKSHUTDOWN ' , ' OTHER ' ) , ( ' WAITSTAT_MUTEX ' , ' OTHER ' ) , ( ' WCC ' , ' OTHER ' ) , ( ' WORKTBL_DROP ' ,
' OTHER ' ) , ( ' WRITE_COMPLETION ' , ' OTHER ' ) , ( ' WRITELOG ' , ' I / O ' ) , ( ' XACT_OWN_OTHER ' , ' OTHER ' ) ,
( ' XACT_RECLAIM_SESSION ' , ' OTHER ' ) , ( ' XACTLOCKINFO ' , ' OTHER ' ) , ( ' XACTWORKSPACE_MUTEX ' , ' OTHER ' ) ,
( ' XE_BUFFERMGR_ALLPROCESSED_EVENT ' , ' XEVENT ' ) , ( ' XE_BUFFERMGR_FREEBUF_EVENT ' , ' XEVENT ' ) ,
( ' XE_DISPATCHER_CONFIG_SESSION_LIST ' , ' XEVENT ' ) , ( ' XE_DISPATCHER_JOIN ' , ' XEVENT ' ) ,
( ' XE_DISPATCHER_WAIT ' , ' XEVENT ' ) , ( ' XE_MODULEMGR_SYNC ' , ' XEVENT ' ) , ( ' XE_OLS_LOCK ' , ' XEVENT ' ) ,
( ' XE_PACKAGE_LOCK_BACKOFF ' , ' XEVENT ' ) , ( ' XE_SERVICES_EVENTMANUAL ' , ' XEVENT ' ) , ( ' XE_SERVICES_MUTEX ' ,
' XEVENT ' ) , ( ' XE_SERVICES_RWLOCK ' , ' XEVENT ' ) , ( ' XE_SESSION_CREATE_SYNC ' , ' XEVENT ' ) ,
( ' XE_SESSION_FLUSH ' , ' XEVENT ' ) , ( ' XE_SESSION_SYNC ' , ' XEVENT ' ) , ( ' XE_STM_CREATE ' , ' XEVENT ' ) ,
( ' XE_TIMER_EVENT ' , ' XEVENT ' ) , ( ' XE_TIMER_MUTEX ' , ' XEVENT ' )
, ( ' XE_TIMER_TASK_DONE ' , ' XEVENT ' ) ;
INSERT @ w1 ( WaitType , WaitTimeInMs , WaitTaskCount , CollectionDate )
SELECT
WaitType = wait_type
, WaitTimeInMs = SUM ( wait_time_ms )
, WaitTaskCount = SUM ( waiting_tasks_count )
, CollectionDate = GETDATE ( )
FROM sys . dm_os_wait_stats
WHERE [ wait_type ] NOT IN
(
SELECT WaitType FROM @ w3
)
AND [ waiting_tasks_count ] > 0
GROUP BY wait_type
WAITFOR DELAY @ delayInterval ;
INSERT @ w2 ( WaitType , WaitTimeInMs , WaitTaskCount , CollectionDate )
SELECT
WaitType = wait_type
, WaitTimeInMs = SUM ( wait_time_ms )
, WaitTaskCount = SUM ( waiting_tasks_count )
, CollectionDate = GETDATE ( )
FROM sys . dm_os_wait_stats
WHERE [ wait_type ] NOT IN
(
SELECT WaitType FROM @ w3
)
AND [ waiting_tasks_count ] > 0
GROUP BY wait_type ;
INSERT @ w5 ( WaitCategory , WaitTimeInMs , WaitTaskCount )
SELECT WaitCategory
, WaitTimeInMs = SUM ( WaitTimeInMs )
, WaitTaskCount = SUM ( WaitTaskCount )
FROM
(
SELECT
WaitCategory = ISNULL ( T4 . WaitCategory , ' OTHER ' )
, WaitTimeInMs = ( T2 . WaitTimeInMs - T1 . WaitTimeInMs )
, WaitTaskCount = ( T2 . WaitTaskCount - T1 . WaitTaskCount )
-- , WaitTimeInMsPerSec = ( ( T2 . WaitTimeInMs - T1 . WaitTimeInMs ) / CAST ( DATEDIFF ( SECOND , T1 . CollectionDate , T2 . CollectionDate ) as float ) )
FROM @ w1 T1
INNER JOIN @ w2 T2 ON T2 . WaitType = T1 . WaitType
LEFT JOIN @ w4 T4 ON T4 . WaitType = T1 . WaitType
WHERE T2 . WaitTaskCount - T1 . WaitTaskCount > 0
) as G
GROUP BY G . WaitCategory ;
SELECT
-- -- measurement
measurement = ' Wait time ( ms ) '
-- -- tags
, servername = REPLACE ( @ @ SERVERNAME , ' \ ' , ':' )
, type = ' Wait stats '
-- -- values
, [ I / O ] = SUM ( [ I / O ] )
2017-10-03 00:15:34 +00:00
, [ Latch ] = SUM ( [ LATCH ] )
, [ Lock ] = SUM ( [ LOCK ] )
, [ Network ] = SUM ( [ NETWORK ] )
, [ Service broker ] = SUM ( [ SERVICE BROKER ] )
, [ Memory ] = SUM ( [ MEMORY ] )
, [ Buffer ] = SUM ( [ BUFFER ] )
2016-01-26 19:30:02 +00:00
, [ CLR ] = SUM ( [ CLR ] )
, [ SQLOS ] = SUM ( [ SQLOS ] )
2017-10-03 00:15:34 +00:00
, [ XEvent ] = SUM ( [ XEVENT ] )
, [ Other ] = SUM ( [ OTHER ] )
2016-01-26 19:30:02 +00:00
, [ Total ] = SUM ( [ I / O ] + [ LATCH ] + [ LOCK ] + [ NETWORK ] + [ SERVICE BROKER ] + [ MEMORY ] + [ BUFFER ] + [ CLR ] + [ XEVENT ] + [ SQLOS ] + [ OTHER ] )
FROM
(
SELECT
[ I / O ] = ISNULL ( [ I / O ] , 0 )
, [ MEMORY ] = ISNULL ( [ MEMORY ] , 0 )
, [ BUFFER ] = ISNULL ( [ BUFFER ] , 0 )
, [ LATCH ] = ISNULL ( [ LATCH ] , 0 )
, [ LOCK ] = ISNULL ( [ LOCK ] , 0 )
, [ NETWORK ] = ISNULL ( [ NETWORK ] , 0 )
, [ SERVICE BROKER ] = ISNULL ( [ SERVICE BROKER ] , 0 )
, [ CLR ] = ISNULL ( [ CLR ] , 0 )
, [ XEVENT ] = ISNULL ( [ XEVENT ] , 0 )
, [ SQLOS ] = ISNULL ( [ SQLOS ] , 0 )
, [ OTHER ] = ISNULL ( [ OTHER ] , 0 )
FROM @ w5 as P
PIVOT
(
SUM ( WaitTimeInMs )
FOR WaitCategory IN ( [ I / O ] , [ LATCH ] , [ LOCK ] , [ NETWORK ] , [ SERVICE BROKER ] , [ MEMORY ] , [ BUFFER ] , [ CLR ] , [ XEVENT ] , [ SQLOS ] , [ OTHER ] )
) AS PivotTable
) as T
UNION ALL
SELECT
-- -- measurement
measurement = ' Wait tasks '
-- -- tags
, server_name = REPLACE ( @ @ SERVERNAME , ' \ ' , ':' )
, type = ' Wait stats '
-- -- values
, [ I / O ] = SUM ( [ I / O ] )
2017-10-03 00:15:34 +00:00
, [ Latch ] = SUM ( [ LATCH ] )
, [ Lock ] = SUM ( [ LOCK ] )
, [ Network ] = SUM ( [ NETWORK ] )
, [ Service broker ] = SUM ( [ SERVICE BROKER ] )
, [ Memory ] = SUM ( [ MEMORY ] )
, [ Buffer ] = SUM ( [ BUFFER ] )
2016-01-26 19:30:02 +00:00
, [ CLR ] = SUM ( [ CLR ] )
, [ SQLOS ] = SUM ( [ SQLOS ] )
2017-10-03 00:15:34 +00:00
, [ XEvent ] = SUM ( [ XEVENT ] )
, [ Other ] = SUM ( [ OTHER ] )
2016-01-26 19:30:02 +00:00
, [ Total ] = SUM ( [ I / O ] + [ LATCH ] + [ LOCK ] + [ NETWORK ] + [ SERVICE BROKER ] + [ MEMORY ] + [ BUFFER ] + [ CLR ] + [ XEVENT ] + [ SQLOS ] + [ OTHER ] )
FROM
(
SELECT
[ I / O ] = ISNULL ( [ I / O ] , 0 )
, [ MEMORY ] = ISNULL ( [ MEMORY ] , 0 )
, [ BUFFER ] = ISNULL ( [ BUFFER ] , 0 )
, [ LATCH ] = ISNULL ( [ LATCH ] , 0 )
, [ LOCK ] = ISNULL ( [ LOCK ] , 0 )
, [ NETWORK ] = ISNULL ( [ NETWORK ] , 0 )
, [ SERVICE BROKER ] = ISNULL ( [ SERVICE BROKER ] , 0 )
, [ CLR ] = ISNULL ( [ CLR ] , 0 )
, [ XEVENT ] = ISNULL ( [ XEVENT ] , 0 )
, [ SQLOS ] = ISNULL ( [ SQLOS ] , 0 )
, [ OTHER ] = ISNULL ( [ OTHER ] , 0 )
FROM @ w5 as P
PIVOT
(
SUM ( WaitTaskCount )
FOR WaitCategory IN ( [ I / O ] , [ LATCH ] , [ LOCK ] , [ NETWORK ] , [ SERVICE BROKER ] , [ MEMORY ] , [ BUFFER ] , [ CLR ] , [ XEVENT ] , [ SQLOS ] , [ OTHER ] )
) AS PivotTable
) as T ;
`
const sqlVolumeSpace string = ` SET NOCOUNT ON ;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
IF OBJECT_ID ( ' tempdb . . # volumestats ' ) IS NOT NULL
DROP TABLE # volumestats ;
SELECT DISTINCT
volume = REPLACE ( vs . volume_mount_point , ' \ ' , ' ' )
+ CASE WHEN LEN ( vs . logical_volume_name ) > 0
THEN ' ( ' + vs . logical_volume_name + ')'
ELSE ' ' END
, total_bytes = vs . total_bytes
, available_bytes = vs . available_bytes
, used_bytes = vs . total_bytes - vs . available_bytes
, used_percent = 100 * CAST ( ROUND ( ( vs . total_bytes - vs . available_bytes ) * 1. / vs . total_bytes , 2 ) as decimal ( 5 , 2 ) )
INTO # volumestats
FROM sys . master_files AS f
CROSS APPLY sys . dm_os_volume_stats ( f . database_id , f . file_id ) vs
DECLARE @ DynamicPivotQuery AS NVARCHAR ( MAX )
DECLARE @ ColumnName AS NVARCHAR ( MAX ) , @ ColumnName2 AS NVARCHAR ( MAX )
SELECT @ ColumnName = ISNULL ( @ ColumnName + ',' , ' ' ) + QUOTENAME ( volume )
FROM ( SELECT DISTINCT volume FROM # volumestats ) AS bl
-- Prepare the PIVOT query using the dynamic
SET @ DynamicPivotQuery = N '
SELECT measurement = ' ' Volume total space ( bytes ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' OS Volume space ' '
, ' + @ ColumnName + ' FROM
(
SELECT volume , total_bytes
FROM # volumestats
) as V
PIVOT ( SUM ( total_bytes ) FOR volume IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Volume available space ( bytes ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' OS Volume space ' '
, ' + @ ColumnName + ' FROM
(
SELECT volume , available_bytes
FROM # volumestats
) as V
PIVOT ( SUM ( available_bytes ) FOR volume IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Volume used space ( bytes ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' OS Volume space ' '
, ' + @ ColumnName + ' FROM
(
SELECT volume , used_bytes
FROM # volumestats
) as V
PIVOT ( SUM ( used_bytes ) FOR volume IN ( ' + @ ColumnName + ' ) ) AS PVTTable
UNION ALL
SELECT measurement = ' ' Volume used space ( % ) ' ' , servername = REPLACE ( @ @ SERVERNAME , ' '\'' , ' ':' ' ) , type = ' ' OS Volume space ' '
, ' + @ ColumnName + ' FROM
(
SELECT volume , used_percent
FROM # volumestats
) as V
PIVOT ( SUM ( used_percent ) FOR volume IN ( ' + @ ColumnName + ' ) ) AS PVTTable '
EXEC sp_executesql @ DynamicPivotQuery ;
`