Use explicit casts to avoid datatype issues (#3980)
(cherry picked from commit ff40da6019
)
This commit is contained in:
parent
cde9c37e26
commit
5f0fbc7d30
|
@ -397,9 +397,7 @@ CROSS APPLY (
|
|||
OPTION( RECOMPILE );
|
||||
`
|
||||
|
||||
const sqlPerformanceCountersV2 string = `DECLARE @DynamicPerf NVARCHAR(MAX) = ''
|
||||
|
||||
SET @DynamicPerf += REPLACE('
|
||||
const sqlPerformanceCountersV2 string = `
|
||||
DECLARE @PCounters TABLE
|
||||
(
|
||||
object_name nvarchar(128),
|
||||
|
@ -409,140 +407,120 @@ DECLARE @PCounters TABLE
|
|||
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,
|
||||
CAST(spi.cntr_value AS BIGINT) AS 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",
|
||||
"Backup/Restore Throughput/sec",
|
||||
"Total Server Memory (KB)",
|
||||
"Target Server Memory (KB)"
|
||||
'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',
|
||||
'Backup/Restore Throughput/sec',
|
||||
'Total Server Memory (KB)',
|
||||
'Target Server Memory (KB)'
|
||||
)
|
||||
) OR (
|
||||
instance_name IN ("_Total","Column store object pool")
|
||||
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)"
|
||||
'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 (
|
||||
counter_name IN (
|
||||
"Log Bytes Received/sec",
|
||||
"Log Apply Pending Queue",
|
||||
"Redone Bytes/sec",
|
||||
"Recovery Queue",
|
||||
"Log Apply Ready Queue"
|
||||
'Log Bytes Received/sec',
|
||||
'Log Apply Pending Queue',
|
||||
'Redone Bytes/sec',
|
||||
'Recovery Queue',
|
||||
'Log Apply Ready Queue'
|
||||
)
|
||||
AND instance_name = "_Total"
|
||||
AND instance_name = '_Total'
|
||||
)
|
||||
) OR (
|
||||
counter_name IN ("Transaction Delay")
|
||||
counter_name IN ('Transaction Delay')
|
||||
) OR (
|
||||
counter_name IN (
|
||||
"CPU usage %",
|
||||
"CPU usage % base",
|
||||
"Queued requests",
|
||||
"Requests completed/sec",
|
||||
"Blocked tasks"
|
||||
'CPU usage %',
|
||||
'CPU usage % base',
|
||||
'Queued requests',
|
||||
'Requests completed/sec',
|
||||
'Blocked tasks'
|
||||
)
|
||||
) OR (
|
||||
counter_name IN (
|
||||
"Active memory grant amount (KB)",
|
||||
"Disk Read Bytes/sec",
|
||||
"Disk Read IO Throttled/sec",
|
||||
"Disk Read IO/sec",
|
||||
"Disk Write Bytes/sec",
|
||||
"Disk Write IO Throttled/sec",
|
||||
"Disk Write IO/sec",
|
||||
"Used memory (KB)"
|
||||
'Active memory grant amount (KB)',
|
||||
'Disk Read Bytes/sec',
|
||||
'Disk Read IO Throttled/sec',
|
||||
'Disk Read IO/sec',
|
||||
'Disk Write Bytes/sec',
|
||||
'Disk Write IO Throttled/sec',
|
||||
'Disk Write IO/sec',
|
||||
'Used memory (KB)'
|
||||
)
|
||||
) OR (
|
||||
object_name LIKE "%User Settable%"
|
||||
OR object_name LIKE "%SQL Errors%"
|
||||
object_name LIKE '%User Settable%'
|
||||
OR object_name LIKE '%SQL Errors%'
|
||||
)
|
||||
'
|
||||
,'"','''')
|
||||
|
||||
SET @DynamicPerf += REPLACE('
|
||||
SELECT "sqlserver_performance" AS [measurement],
|
||||
REPLACE(@@SERVERNAME,"\",":") AS [sql_instance],
|
||||
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]
|
||||
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"
|
||||
UNION ALL
|
||||
DECLARE @SQL NVARCHAR(MAX)
|
||||
SET @SQL = REPLACE('
|
||||
SELECT
|
||||
"sqlserver_performance" As [measurement],
|
||||
REPLACE(@@SERVERNAME,"\",":") AS [sql_instance],
|
||||
"SQLServer:Workload Group Stats" AS object,
|
||||
counter,
|
||||
instance,
|
||||
vs.value
|
||||
CAST(vs.value AS BIGINT) AS value,
|
||||
1
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
|
@ -561,11 +539,29 @@ FROM
|
|||
) AS rg
|
||||
UNPIVOT (
|
||||
value FOR counter IN ( [Request Count], [Queued Request Count], [CPU Limit Violation Count], [CPU Usage (time)], ' + CASE WHEN SERVERPROPERTY('ProductMajorVersion') > 10 THEN '[Premptive CPU Usage (time)], ' ELSE '' END + '[Lock Wait Count], [Lock Wait Time], [Reduced Memory Grant Count] )
|
||||
) AS vs
|
||||
OPTION(RECOMPILE);'
|
||||
) AS vs'
|
||||
,'"','''')
|
||||
|
||||
EXEC(@DynamicPerf)
|
||||
INSERT INTO @PCounters
|
||||
EXEC( @SQL )
|
||||
|
||||
SELECT 'sqlserver_performance' AS [measurement],
|
||||
REPLACE(@@SERVERNAME,'\',':') AS [sql_instance],
|
||||
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],
|
||||
CAST(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 float(10)) AS [value]
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue