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