Use explicit casts to avoid datatype issues (#3980)
This commit is contained in:
parent
43a044542e
commit
ff40da6019
|
@ -397,9 +397,7 @@ CROSS APPLY (
|
||||||
OPTION( RECOMPILE );
|
OPTION( RECOMPILE );
|
||||||
`
|
`
|
||||||
|
|
||||||
const sqlPerformanceCountersV2 string = `DECLARE @DynamicPerf NVARCHAR(MAX) = ''
|
const sqlPerformanceCountersV2 string = `
|
||||||
|
|
||||||
SET @DynamicPerf += REPLACE('
|
|
||||||
DECLARE @PCounters TABLE
|
DECLARE @PCounters TABLE
|
||||||
(
|
(
|
||||||
object_name nvarchar(128),
|
object_name nvarchar(128),
|
||||||
|
@ -409,140 +407,120 @@ DECLARE @PCounters TABLE
|
||||||
cntr_type INT,
|
cntr_type INT,
|
||||||
Primary Key(object_name, counter_name, instance_name)
|
Primary Key(object_name, counter_name, instance_name)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO @PCounters
|
INSERT INTO @PCounters
|
||||||
SELECT DISTINCT
|
SELECT DISTINCT
|
||||||
RTrim(spi.object_name) object_name,
|
RTrim(spi.object_name) object_name,
|
||||||
RTrim(spi.counter_name) counter_name,
|
RTrim(spi.counter_name) counter_name,
|
||||||
RTrim(spi.instance_name) instance_name,
|
RTrim(spi.instance_name) instance_name,
|
||||||
spi.cntr_value,
|
CAST(spi.cntr_value AS BIGINT) AS cntr_value,
|
||||||
spi.cntr_type
|
spi.cntr_type
|
||||||
FROM sys.dm_os_performance_counters AS spi
|
FROM sys.dm_os_performance_counters AS spi
|
||||||
WHERE (
|
WHERE (
|
||||||
counter_name IN (
|
counter_name IN (
|
||||||
"SQL Compilations/sec",
|
'SQL Compilations/sec',
|
||||||
"SQL Re-Compilations/sec",
|
'SQL Re-Compilations/sec',
|
||||||
"User Connections",
|
'User Connections',
|
||||||
"Batch Requests/sec",
|
'Batch Requests/sec',
|
||||||
"Logouts/sec",
|
'Logouts/sec',
|
||||||
"Logins/sec",
|
'Logins/sec',
|
||||||
"Processes blocked",
|
'Processes blocked',
|
||||||
"Latch Waits/sec",
|
'Latch Waits/sec',
|
||||||
"Full Scans/sec",
|
'Full Scans/sec',
|
||||||
"Index Searches/sec",
|
'Index Searches/sec',
|
||||||
"Page Splits/sec",
|
'Page Splits/sec',
|
||||||
"Page Lookups/sec",
|
'Page Lookups/sec',
|
||||||
"Page Reads/sec",
|
'Page Reads/sec',
|
||||||
"Page Writes/sec",
|
'Page Writes/sec',
|
||||||
"Readahead Pages/sec",
|
'Readahead Pages/sec',
|
||||||
"Lazy Writes/sec",
|
'Lazy Writes/sec',
|
||||||
"Checkpoint Pages/sec",
|
'Checkpoint Pages/sec',
|
||||||
"Page life expectancy",
|
'Page life expectancy',
|
||||||
"Log File(s) Size (KB)",
|
'Log File(s) Size (KB)',
|
||||||
"Log File(s) Used Size (KB)",
|
'Log File(s) Used Size (KB)',
|
||||||
"Data File(s) Size (KB)",
|
'Data File(s) Size (KB)',
|
||||||
"Transactions/sec",
|
'Transactions/sec',
|
||||||
"Write Transactions/sec",
|
'Write Transactions/sec',
|
||||||
"Active Temp Tables",
|
'Active Temp Tables',
|
||||||
"Temp Tables Creation Rate",
|
'Temp Tables Creation Rate',
|
||||||
"Temp Tables For Destruction",
|
'Temp Tables For Destruction',
|
||||||
"Free Space in tempdb (KB)",
|
'Free Space in tempdb (KB)',
|
||||||
"Version Store Size (KB)",
|
'Version Store Size (KB)',
|
||||||
"Memory Grants Pending",
|
'Memory Grants Pending',
|
||||||
"Free list stalls/sec",
|
'Free list stalls/sec',
|
||||||
"Buffer cache hit ratio",
|
'Buffer cache hit ratio',
|
||||||
"Buffer cache hit ratio base",
|
'Buffer cache hit ratio base',
|
||||||
"Backup/Restore Throughput/sec",
|
'Backup/Restore Throughput/sec',
|
||||||
"Total Server Memory (KB)",
|
'Total Server Memory (KB)',
|
||||||
"Target Server Memory (KB)"
|
'Target Server Memory (KB)'
|
||||||
)
|
)
|
||||||
) OR (
|
) OR (
|
||||||
instance_name IN ("_Total","Column store object pool")
|
instance_name IN ('_Total','Column store object pool')
|
||||||
AND counter_name IN (
|
AND counter_name IN (
|
||||||
"Log Flushes/sec",
|
'Log Flushes/sec',
|
||||||
"Log Flush Wait Time",
|
'Log Flush Wait Time',
|
||||||
"Lock Timeouts/sec",
|
'Lock Timeouts/sec',
|
||||||
"Number of Deadlocks/sec",
|
'Number of Deadlocks/sec',
|
||||||
"Lock Waits/sec",
|
'Lock Waits/sec',
|
||||||
"Latch Waits/sec",
|
'Latch Waits/sec',
|
||||||
"Memory broker clerk size",
|
'Memory broker clerk size',
|
||||||
"Log Bytes Flushed/sec",
|
'Log Bytes Flushed/sec',
|
||||||
"Bytes Sent to Replica/sec",
|
'Bytes Sent to Replica/sec',
|
||||||
"Log Send Queue",
|
'Log Send Queue',
|
||||||
"Bytes Sent to Transport/sec",
|
'Bytes Sent to Transport/sec',
|
||||||
"Sends to Replica/sec",
|
'Sends to Replica/sec',
|
||||||
"Bytes Sent to Transport/sec",
|
'Bytes Sent to Transport/sec',
|
||||||
"Sends to Transport/sec",
|
'Sends to Transport/sec',
|
||||||
"Bytes Received from Replica/sec",
|
'Bytes Received from Replica/sec',
|
||||||
"Receives from Replica/sec",
|
'Receives from Replica/sec',
|
||||||
"Flow Control Time (ms/sec)",
|
'Flow Control Time (ms/sec)',
|
||||||
"Flow Control/sec",
|
'Flow Control/sec',
|
||||||
"Resent Messages/sec",
|
'Resent Messages/sec',
|
||||||
"Redone Bytes/sec",
|
'Redone Bytes/sec',
|
||||||
"XTP Memory Used (KB)"
|
'XTP Memory Used (KB)'
|
||||||
) OR (
|
) OR (
|
||||||
counter_name IN (
|
counter_name IN (
|
||||||
"Log Bytes Received/sec",
|
'Log Bytes Received/sec',
|
||||||
"Log Apply Pending Queue",
|
'Log Apply Pending Queue',
|
||||||
"Redone Bytes/sec",
|
'Redone Bytes/sec',
|
||||||
"Recovery Queue",
|
'Recovery Queue',
|
||||||
"Log Apply Ready Queue"
|
'Log Apply Ready Queue'
|
||||||
)
|
)
|
||||||
AND instance_name = "_Total"
|
AND instance_name = '_Total'
|
||||||
)
|
)
|
||||||
) OR (
|
) OR (
|
||||||
counter_name IN ("Transaction Delay")
|
counter_name IN ('Transaction Delay')
|
||||||
) OR (
|
) OR (
|
||||||
counter_name IN (
|
counter_name IN (
|
||||||
"CPU usage %",
|
'CPU usage %',
|
||||||
"CPU usage % base",
|
'CPU usage % base',
|
||||||
"Queued requests",
|
'Queued requests',
|
||||||
"Requests completed/sec",
|
'Requests completed/sec',
|
||||||
"Blocked tasks"
|
'Blocked tasks'
|
||||||
)
|
)
|
||||||
) OR (
|
) OR (
|
||||||
counter_name IN (
|
counter_name IN (
|
||||||
"Active memory grant amount (KB)",
|
'Active memory grant amount (KB)',
|
||||||
"Disk Read Bytes/sec",
|
'Disk Read Bytes/sec',
|
||||||
"Disk Read IO Throttled/sec",
|
'Disk Read IO Throttled/sec',
|
||||||
"Disk Read IO/sec",
|
'Disk Read IO/sec',
|
||||||
"Disk Write Bytes/sec",
|
'Disk Write Bytes/sec',
|
||||||
"Disk Write IO Throttled/sec",
|
'Disk Write IO Throttled/sec',
|
||||||
"Disk Write IO/sec",
|
'Disk Write IO/sec',
|
||||||
"Used memory (KB)"
|
'Used memory (KB)'
|
||||||
)
|
)
|
||||||
) OR (
|
) OR (
|
||||||
object_name LIKE "%User Settable%"
|
object_name LIKE '%User Settable%'
|
||||||
OR object_name LIKE "%SQL Errors%"
|
OR object_name LIKE '%SQL Errors%'
|
||||||
)
|
)
|
||||||
'
|
|
||||||
,'"','''')
|
|
||||||
|
|
||||||
SET @DynamicPerf += REPLACE('
|
DECLARE @SQL NVARCHAR(MAX)
|
||||||
SELECT "sqlserver_performance" AS [measurement],
|
SET @SQL = REPLACE('
|
||||||
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
|
|
||||||
SELECT
|
SELECT
|
||||||
"sqlserver_performance" As [measurement],
|
|
||||||
REPLACE(@@SERVERNAME,"\",":") AS [sql_instance],
|
|
||||||
"SQLServer:Workload Group Stats" AS object,
|
"SQLServer:Workload Group Stats" AS object,
|
||||||
counter,
|
counter,
|
||||||
instance,
|
instance,
|
||||||
vs.value
|
CAST(vs.value AS BIGINT) AS value,
|
||||||
|
1
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -561,11 +539,29 @@ FROM
|
||||||
) AS rg
|
) AS rg
|
||||||
UNPIVOT (
|
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] )
|
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
|
) AS vs'
|
||||||
OPTION(RECOMPILE);'
|
|
||||||
,'"','''')
|
,'"','''')
|
||||||
|
|
||||||
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
|
const sqlWaitStatsCategorizedV2 string = `SELECT
|
||||||
|
|
Loading…
Reference in New Issue