fix(inputs.sqlserver): Suppress error on secondary replicas (#12528)

This commit is contained in:
deweter 2023-01-26 14:52:15 +01:00 committed by GitHub
parent 00347033ab
commit 7e87a25123
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 100 additions and 82 deletions

View File

@ -453,86 +453,92 @@ END
SELECT BEGIN TRY
[measurement],[sql_instance],[database_name],[session_id]
,ISNULL([request_id],0) AS [request_id]
,[blocking_session_id],[status],[cpu_time_ms]
,[total_elapsed_time_ms],[logical_reads],[writes]
,[command],[wait_time_ms],[wait_type]
,[wait_resource],[program_name]
,[host_name],[nt_user_name],[login_name]
,[transaction_isolation_level],[granted_query_memory_pages],[percent_complete]
,[statement_text],[objectid],[stmt_object_name]
,[stmt_db_name],[query_hash],[query_plan_hash]
,replica_updateability
,[session_db_name],[open_transaction]
FROM (
SELECT SELECT
'sqlserver_requests' AS [measurement] [measurement],[sql_instance],[database_name],[session_id]
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance] ,ISNULL([request_id],0) AS [request_id]
,DB_NAME() as [database_name] ,[blocking_session_id],[status],[cpu_time_ms]
,s.[session_id] ,[total_elapsed_time_ms],[logical_reads],[writes]
,r.[request_id] ,[command],[wait_time_ms],[wait_type]
,DB_NAME(COALESCE(r.[database_id], s.[database_id])) AS [session_db_name] ,[wait_resource],[program_name]
,COALESCE(r.[status], s.[status]) AS [status] ,[host_name],[nt_user_name],[login_name]
,COALESCE(r.[cpu_time], s.[cpu_time]) AS [cpu_time_ms] ,[transaction_isolation_level],[granted_query_memory_pages],[percent_complete]
,COALESCE(r.[total_elapsed_time], s.[total_elapsed_time]) AS [total_elapsed_time_ms] ,[statement_text],[objectid],[stmt_object_name]
,COALESCE(r.[logical_reads], s.[logical_reads]) AS [logical_reads] ,[stmt_db_name],[query_hash],[query_plan_hash]
,COALESCE(r.[writes], s.[writes]) AS [writes] ,replica_updateability
,r.[command] ,[session_db_name],[open_transaction]
,r.[wait_time] AS [wait_time_ms] FROM (
,r.[wait_type] SELECT
,r.[wait_resource] 'sqlserver_requests' AS [measurement]
,NULLIF(r.[blocking_session_id],0) AS [blocking_session_id] ,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
,s.[program_name] ,DB_NAME() as [database_name]
,s.[host_name] ,s.[session_id]
,s.[nt_user_name] ,r.[request_id]
,s.[login_name] ,DB_NAME(COALESCE(r.[database_id], s.[database_id])) AS [session_db_name]
,COALESCE(r.[open_transaction_count], s.[open_transaction_count]) AS [open_transaction] ,COALESCE(r.[status], s.[status]) AS [status]
,LEFT (CASE COALESCE(r.[transaction_isolation_level], s.[transaction_isolation_level]) ,COALESCE(r.[cpu_time], s.[cpu_time]) AS [cpu_time_ms]
WHEN 0 THEN '0-Read Committed' ,COALESCE(r.[total_elapsed_time], s.[total_elapsed_time]) AS [total_elapsed_time_ms]
WHEN 1 THEN '1-Read Uncommitted (NOLOCK)' ,COALESCE(r.[logical_reads], s.[logical_reads]) AS [logical_reads]
WHEN 2 THEN '2-Read Committed' ,COALESCE(r.[writes], s.[writes]) AS [writes]
WHEN 3 THEN '3-Repeatable Read' ,r.[command]
WHEN 4 THEN '4-Serializable' ,r.[wait_time] AS [wait_time_ms]
WHEN 5 THEN '5-Snapshot' ,r.[wait_type]
ELSE CONVERT (varchar(30), r.[transaction_isolation_level]) + '-UNKNOWN' ,r.[wait_resource]
END, 30) AS [transaction_isolation_level] ,NULLIF(r.[blocking_session_id],0) AS [blocking_session_id]
,r.[granted_query_memory] AS [granted_query_memory_pages] ,s.[program_name]
,r.[percent_complete] ,s.[host_name]
,SUBSTRING( ,s.[nt_user_name]
qt.[text], ,s.[login_name]
r.[statement_start_offset] / 2 + 1, ,COALESCE(r.[open_transaction_count], s.[open_transaction_count]) AS [open_transaction]
(CASE WHEN r.[statement_end_offset] = -1 ,LEFT (CASE COALESCE(r.[transaction_isolation_level], s.[transaction_isolation_level])
THEN DATALENGTH(qt.[text]) WHEN 0 THEN '0-Read Committed'
ELSE r.[statement_end_offset] WHEN 1 THEN '1-Read Uncommitted (NOLOCK)'
END - r.[statement_start_offset]) / 2 + 1 WHEN 2 THEN '2-Read Committed'
) AS [statement_text] WHEN 3 THEN '3-Repeatable Read'
,qt.[objectid] WHEN 4 THEN '4-Serializable'
,QUOTENAME(OBJECT_SCHEMA_NAME(qt.[objectid], qt.[dbid])) + '.' + QUOTENAME(OBJECT_NAME(qt.[objectid], qt.[dbid])) as [stmt_object_name] WHEN 5 THEN '5-Snapshot'
,DB_NAME(qt.[dbid]) AS [stmt_db_name] ELSE CONVERT (varchar(30), r.[transaction_isolation_level]) + '-UNKNOWN'
,CONVERT(varchar(20),r.[query_hash],1) AS [query_hash] END, 30) AS [transaction_isolation_level]
,CONVERT(varchar(20),r.[query_plan_hash],1) AS [query_plan_hash] ,r.[granted_query_memory] AS [granted_query_memory_pages]
,DATABASEPROPERTYEX(DB_NAME(), 'Updateability') as replica_updateability ,r.[percent_complete]
,s.[is_user_process] ,SUBSTRING(
,[blocking_or_blocked] = COUNT(*) OVER(PARTITION BY ISNULL(NULLIF(r.[blocking_session_id], 0),s.[session_id])) qt.[text],
FROM sys.dm_exec_sessions AS s r.[statement_start_offset] / 2 + 1,
LEFT OUTER JOIN sys.dm_exec_requests AS r (CASE WHEN r.[statement_end_offset] = -1
ON s.[session_id] = r.[session_id] THEN DATALENGTH(qt.[text])
OUTER APPLY sys.dm_exec_sql_text(r.[sql_handle]) AS qt ELSE r.[statement_end_offset]
) AS data END - r.[statement_start_offset]) / 2 + 1
WHERE ) AS [statement_text]
[blocking_or_blocked] > 1 --Always include blocking or blocked sessions/requests ,qt.[objectid]
OR [open_transaction] >= 1 --Always include sessions with open transactions ,QUOTENAME(OBJECT_SCHEMA_NAME(qt.[objectid], qt.[dbid])) + '.' + QUOTENAME(OBJECT_NAME(qt.[objectid], qt.[dbid])) as [stmt_object_name]
OR ( ,DB_NAME(qt.[dbid]) AS [stmt_db_name]
[request_id] IS NOT NULL --A request must exists ,CONVERT(varchar(20),r.[query_hash],1) AS [query_hash]
AND ( --Always fetch user process (in any state), fetch system process only if active ,CONVERT(varchar(20),r.[query_plan_hash],1) AS [query_plan_hash]
[is_user_process] = 1 ,DATABASEPROPERTYEX(DB_NAME(), 'Updateability') as replica_updateability
OR [status] COLLATE Latin1_General_BIN NOT IN ('background', 'sleeping') ,s.[is_user_process]
,[blocking_or_blocked] = COUNT(*) OVER(PARTITION BY ISNULL(NULLIF(r.[blocking_session_id], 0),s.[session_id]))
FROM sys.dm_exec_sessions AS s
LEFT OUTER JOIN sys.dm_exec_requests AS r
ON s.[session_id] = r.[session_id]
OUTER APPLY sys.dm_exec_sql_text(r.[sql_handle]) AS qt
) AS data
WHERE
[blocking_or_blocked] > 1 --Always include blocking or blocked sessions/requests
OR [open_transaction] >= 1 --Always include sessions with open transactions
OR (
[request_id] IS NOT NULL --A request must exists
AND ( --Always fetch user process (in any state), fetch system process only if active
[is_user_process] = 1
OR [status] COLLATE Latin1_General_BIN NOT IN ('background', 'sleeping')
)
AND [session_id] <> @@SPID
) )
AND [session_id] <> @@SPID OPTION(MAXDOP 1);
) END TRY
OPTION(MAXDOP 1); BEGIN CATCH
IF (ERROR_NUMBER() <> 976) --Avoid possible errors from secondary replica
THROW;
END CATCH
` `
const sqlAzureMISchedulers string = ` const sqlAzureMISchedulers string = `

View File

@ -1328,7 +1328,13 @@ WHERE 1 = 1
OR (s.session_id IN (SELECT blocking_session_id FROM #blockingSessions)) OR (s.session_id IN (SELECT blocking_session_id FROM #blockingSessions))
OPTION(MAXDOP 1)' OPTION(MAXDOP 1)'
EXEC sp_executesql @SqlStatement BEGIN TRY
EXEC sp_executesql @SqlStatement
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() <> 976) --Avoid possible errors from secondary replica
THROW;
END CATCH
` `
const sqlServerVolumeSpaceV2 string = ` const sqlServerVolumeSpaceV2 string = `

View File

@ -1139,7 +1139,13 @@ WHERE
) )
OPTION(MAXDOP 1)' OPTION(MAXDOP 1)'
EXEC sp_executesql @SqlStatement BEGIN TRY
EXEC sp_executesql @SqlStatement
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() <> 976) --Avoid possible errors from secondary replica
THROW;
END CATCH
` `
const sqlServerVolumeSpace string = ` const sqlServerVolumeSpace string = `