This commit is contained in:
Thierry Schork
2025-10-01 13:34:39 +02:00
parent de97031b1e
commit d6092181ca
6 changed files with 612 additions and 1 deletions

View File

@@ -0,0 +1,94 @@
USE bi_dm
GO
/* Add missing include columns */
-- NCIX_DM_Sale_Sale_pharmacy_SAL_doc_number
--IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Sale'), 'NCIX_DM_Sale_Sale_pharmacy_SAL_doc_number' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.DM_Sale.NCIX_DM_Sale_Sale_pharmacy_SAL_doc_number;
--END;
-- GO
-- IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Sale'), 'NCIX_DM_Sale_Sale_pharmacy_SAL_doc_number' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX NCIX_DM_Sale_Sale_pharmacy_SAL_doc_number ON dbo.DM_Sale(Sale_pharmacy, SAL_doc_number)
-- INCLUDE(
-- Sale_ID, SAL_value_date, SAL_pharmacode, SAL_quantity, SAL_amount_VAT, SAL_discount, SAL_prescription,
-- SAL_prescription_number, SAL_original_prescription_number, SAL_prescriber_CAMS_code, SAL_insurance,
-- SAL_posology, SAL_turnover_type, SAL_correction_ID,
-- [SAL_text], [SAL_linked_sale_id], [SAL_original_date], [SAL_prescription_pharmacy]
-- );
-- END;
-- GO
/* create missing index */
-- NCIX_DM_Prescriber_CAMS_code
--IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Prescriber'), 'NCIX_DM_Prescriber_CAMS_code' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.DM_Prescriber.NCIX_DM_Prescriber_CAMS_code;
--END;
--GO
--IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Prescriber'), 'NCIX_DM_Prescriber_CAMS_code' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX NCIX_DM_Prescriber_CAMS_code ON dbo.DM_Prescriber(PRESC_CAMS_code)
-- INCLUDE(PRESC_name);
--END;
--GO
/* Create missing index */
-- -- NCIX_DM_Sale_COL_Sale_pharmacy_Sale_id
-- IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Sale'), 'NCIX_DM_Sale_COL_Sale_pharmacy_Sale_id' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.DM_Sale.NCIX_DM_Sale_COL_Sale_pharmacy_Sale_id;
-- END;
-- GO
-- IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Sale'), 'NCIX_DM_Sale_COL_Sale_pharmacy_Sale_id' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX NCIX_DM_Sale_COL_Sale_pharmacy_Sale_id ON dbo.DM_Sale(Sale_pharmacy, Sale_ID) INCLUDE(SAL_operation_code,SAL_correction_id);
-- END;
-- GO
/* Create missing index */
-- NCIX_DM_item_Phcode_tarif_type
--IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Item'), 'NCIX_DM_item_Phcode_tarif_type' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.DM_Item.NCIX_DM_item_Phcode_tarif_type;
--END;
--GO
--IF INDEXPROPERTY(OBJECT_ID('dbo.DM_Item'), 'NCIX_DM_item_Phcode_tarif_type' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX NCIX_DM_item_Phcode_tarif_type ON dbo.DM_Item(Item_pharmacode, IT_PH_tarif_type);
--END;
--GO
USE [BI_BAS]
GO
/* Create missing index */
---- IDX_BAS_T1_ORGANIZATIONAL_UNIT_ORGANIZATIONAL_id_sub_code
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_ORGANIZATIONAL_UNIT'), 'IDX_BAS_T1_ORGANIZATIONAL_UNIT_ORGANIZATIONAL_id_sub_code' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.BAS_T1_ORGANIZATIONAL_UNIT.IDX_BAS_T1_ORGANIZATIONAL_UNIT_ORGANIZATIONAL_id_sub_code;
--END;
--GO
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_ORGANIZATIONAL_UNIT'), 'IDX_BAS_T1_ORGANIZATIONAL_UNIT_ORGANIZATIONAL_id_sub_code' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX IDX_BAS_T1_ORGANIZATIONAL_UNIT_ORGANIZATIONAL_id_sub_code ON dbo.BAS_T1_ORGANIZATIONAL_UNIT(ORGANIZATIONAL_UNIT_SYSTEMINSTANCE_ID, OU_SUBSIDIARY) INCLUDE(OU_CODE);
--END;
--GO
---- IDX_BAS_T1_DOCUMENT_TYPE_DTY_TYPE
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_DOCUMENT_TYPE'), 'IDX_BAS_T1_DOCUMENT_TYPE_covering' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.BAS_T1_DOCUMENT_TYPE.IDX_BAS_T1_DOCUMENT_TYPE_covering;
--END;
--GO
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_DOCUMENT_TYPE'), 'IDX_BAS_T1_DOCUMENT_TYPE_covering' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX IDX_BAS_T1_DOCUMENT_TYPE_covering ON dbo.BAS_T1_DOCUMENT_TYPE(DTY_TYPE, [DOCUMENT_TYPE_ID], [DOCUMENT_TYPE_SYSTEMINSTANCE_ID])
-- INCLUDE([DTY_DEBIT_CREDIT_CODE]);
--END;
--GO
---- IDX_BAS_T1_PREDEFINED_ENTRY_PD_DOCUMENT_TYPE
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_PREDEFINED_ENTRY'), 'IDX_BAS_T1_PREDEFINED_ENTRY_PD_DOCUMENT_TYPE' , 'IndexID' ) IS NOT NULL BEGIN;
-- DROP INDEX dbo.BAS_T1_PREDEFINED_ENTRY.IDX_BAS_T1_PREDEFINED_ENTRY_PD_DOCUMENT_TYPE;
--END;
--GO
--IF INDEXPROPERTY(OBJECT_ID('dbo.BAS_T1_PREDEFINED_ENTRY'), 'IDX_BAS_T1_PREDEFINED_ENTRY_PD_DOCUMENT_TYPE' , 'IndexID' ) IS NULL BEGIN;
-- CREATE INDEX IDX_BAS_T1_PREDEFINED_ENTRY_PD_DOCUMENT_TYPE ON dbo.BAS_T1_PREDEFINED_ENTRY(PD_DOCUMENT_TYPE, [PREDEFINED_ENTRY_SYSTEMINSTANCE_ID])
-- INCLUDE([PD_CODE]);
--END;
--GO

View File

@@ -41,7 +41,7 @@ SELECT *
FROM #FileSize
*/
--the free space in MB that should be present in the files after shrinking
DECLARE @limit INT = 512;
DECLARE @limit INT = 1024;
SELECT
d.[name] AS dbName

View File

@@ -0,0 +1,149 @@
/*
PharmaceuticalSpecialties_Superset
Wire the database Users to these new AD groups
DEV L-CI-AP-SQL-D-HCI-PharmaceuticalSpecialties_Superset_R and L-CI-AP-SQL-D-HCI-PharmaceuticalSpecialties_Superset_RW
INT L-CI-AP-SQL-I-HCI-PharmaceuticalSpecialties_Superset_R and L-CI-AP-SQL-I-HCI-PharmaceuticalSpecialties_Superset_RW
PROD L-CI-AP-SQL-P-HCI-PharmaceuticalSpecialties_Superset_R and L-CI-AP-SQL-P-HCI-PharmaceuticalSpecialties_Superset_RW
01.10.2025, TSC
*/
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @q NVARCHAR(MAX)='';
DECLARE @db sysname='PharmaceuticalSpecialties_Superset';
DECLARE @env VARCHAR(111);
DECLARE @groups TABLE(env VARCHAR(111) NOT NULL, grp_name VARCHAR(111) NOT NULL);
SELECT @env = CASE
WHEN @@SERVERNAME='SWMDATASQLDEV01' THEN 'dev'
WHEN @@SERVERNAME='SWMDATASQLINT01' THEN 'int'
WHEN @@SERVERNAME='SWMDATASQLPRD01' THEN 'prod'
WHEN @@SERVERNAME='SWSQLMDQAS05' THEN 'log'
ELSE 'unknown'
END;
DECLARE @tplLogins NVARCHAR(MAX)='
IF NOT EXISTS (
SELECT 1
FROM sys.server_principals
WHERE name = ''@grp@''
)
BEGIN
SET @sql =
N''CREATE LOGIN [@grp@] '' +
N''FROM WINDOWS '' +
N''WITH DEFAULT_DATABASE=[master];'';
EXEC (@sql);
PRINT ''created login [@grp@]'';
END
';
DECLARE @tplUser NVARCHAR(MAX)='
IF NOT EXISTS (
SELECT 1
FROM sys.database_principals
WHERE name = N''@grp@''
)
BEGIN
CREATE USER [@grp@]
FOR LOGIN [@grp@];
PRINT ''Added user [@grp@]'';
END
IF EXISTS (
SELECT 1
FROM sys.database_principals
WHERE name = N''@grp@''
)
BEGIN
GRANT EXECUTE TO [@grp@];
--PRINT ''Granted EXECUTE to [@grp@]'';
ALTER ROLE [db_datareader] ADD MEMBER [@grp@]
--PRINT ''Granted db_datareader to [@grp@]'';
PRINT ''Granted read and execute permissions to [@grp@]'';
IF ''@grp@'' like ''%[_]RW''
BEGIN
ALTER ROLE [db_datawriter] ADD MEMBER [@grp@];
PRINT ''Granted db_datawriter to [@grp@]'';
END
END
'
INSERT INTO @groups ([env],[grp_name])
VALUES('dev', 'CENTRALINFRA\L-CI-AP-SQL-D-HCI-PharmaceuticalSpecialties_Superset_R')
,('dev', 'CENTRALINFRA\L-CI-AP-SQL-D-HCI-PharmaceuticalSpecialties_Superset_RW')
,('int', 'CENTRALINFRA\L-CI-AP-SQL-I-HCI-PharmaceuticalSpecialties_Superset_R')
,('int', 'CENTRALINFRA\L-CI-AP-SQL-I-HCI-PharmaceuticalSpecialties_Superset_RW')
,('prod', 'CENTRALINFRA\L-CI-AP-SQL-P-HCI-PharmaceuticalSpecialties_Superset_R')
,('prod', 'CENTRALINFRA\L-CI-AP-SQL-P-HCI-PharmaceuticalSpecialties_Superset_RW')
;
SELECT @env
IF @env IN ('dev','int','prod')
BEGIN
SET @q='use master
go
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @sql nvarchar(MAX)='''';
';
--#region login
SELECT @q = @q + REPLACE(@tplLogins, '@grp@',g.[grp_name])
FROM @groups g
WHERE [g].[env] = @env
AND g.[grp_name] LIKE '%\%';
--#endregion login
--#region users
SET @q = @q +'
use '+@db+'
GO
';
SELECT @q = @q + REPLACE(@tplUser,'@grp@', g.[grp_name])
FROM @groups g
WHERE g.[env] = @env;
--#endregion users
SET @q = @q +'
ROLLBACK TRANSACTION '
PRINT ''
--#region print whole dyn sql
DECLARE @String NVARCHAR(MAX) = @q
DECLARE @CurrentEnd BIGINT; /* track the length of the next substring */
DECLARE @offset tinyint; /*tracks the amount of offset needed */
set @string = replace( replace(@string, char(13) + char(10), char(10)) , char(13), char(10))
WHILE LEN(@String) > 1
BEGIN
IF CHARINDEX(CHAR(10), @String) between 1 AND 4000
BEGIN
SET @CurrentEnd = CHARINDEX(char(10), @String) -1
set @offset = 2
END
ELSE
BEGIN
SET @CurrentEnd = 4000
set @offset = 1
END
PRINT SUBSTRING(@String, 1, @CurrentEnd)
set @string = SUBSTRING(@String, @CurrentEnd+@offset, LEN(@String))
END /*End While loop*/
--#endregion print whole dyn sql
END
ROLLBACK TRANSACTION

View File

@@ -0,0 +1,189 @@
/*
partner_centralized_superset
Wire the database Users to these new AD groups
DEV L-CI-AP-SQL-D-HCI-Partner_Centralized_Superset_R and L-CI-AP-SQL-D-HCI-Partner_Centralized_Superset_RW
INT L-CI-AP-SQL-I-HCI-Partner_Centralized_Superset_R and L-CI-AP-SQL-I-HCI-Partner_Centralized_Superset_RW
Copy some other legacy groups/users/sql users from Partner_Superset on the new database partner_centralized_superset
DEV only yellow marked groups from Partner_Superset
25.09.2025, TSC
*/
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @q NVARCHAR(MAX)='';
DECLARE @db sysname='partner_centralized_superset';
DECLARE @env VARCHAR(111);
DECLARE @groups TABLE(env VARCHAR(111) NOT NULL, grp_name VARCHAR(111) NOT NULL);
SELECT @env = CASE
WHEN @@SERVERNAME='SWMDATASQLDEV01' THEN 'dev'
WHEN @@SERVERNAME='SWMDATASQLINT01' THEN 'int'
WHEN @@SERVERNAME='SWMDATASQLPRD01' THEN 'prod'
WHEN @@SERVERNAME='SWSQLMDQAS05' THEN 'log'
ELSE 'unknown'
END;
DECLARE @tplLogins NVARCHAR(MAX)='
IF NOT EXISTS (
SELECT 1
FROM sys.server_principals
WHERE name = ''@grp@''
)
BEGIN
SET @sql =
N''CREATE LOGIN [@grp@] '' +
N''FROM WINDOWS '' +
N''WITH DEFAULT_DATABASE=[master];'';
EXEC (@sql);
PRINT ''created login [@grp@]'';
END
';
DECLARE @tplUser NVARCHAR(MAX)='
IF NOT EXISTS (
SELECT 1
FROM sys.database_principals
WHERE name = N''@grp@''
)
BEGIN
CREATE USER [@grp@]
FOR LOGIN [@grp@];
PRINT ''Added user [@grp@]'';
END
IF EXISTS (
SELECT 1
FROM sys.database_principals
WHERE name = N''@grp@''
)
BEGIN
GRANT EXECUTE TO [@grp@];
--PRINT ''Granted EXECUTE to [@grp@]'';
ALTER ROLE [db_datareader] ADD MEMBER [@grp@]
--PRINT ''Granted db_datareader to [@grp@]'';
PRINT ''Granted read and execute permissions to [@grp@]'';
IF ''@grp@'' like ''%[_]RW''
BEGIN
ALTER ROLE [db_datawriter] ADD MEMBER [@grp@];
PRINT ''Granted db_datawriter to [@grp@]'';
END
END
'
INSERT INTO @groups ([env],[grp_name])
VALUES('dev', 'CENTRALINFRA\L-CI-AP-SQL-D-HCI-Partner_Centralized_Superset_R')
,('dev', 'CENTRALINFRA\L-CI-AP-SQL-D-HCI-Partner_Centralized_Superset_RW')
,('int', 'CENTRALINFRA\L-CI-AP-SQL-I-HCI-Partner_Centralized_Superset_R')
,('int', 'CENTRALINFRA\L-CI-AP-SQL-I-HCI-Partner_Centralized_Superset_RW')
,('prod', 'CENTRALINFRA\L-CI-AP-SQL-P-HCI-Partner_Centralized_Superset_R')
,('prod', 'CENTRALINFRA\L-CI-AP-SQL-P-HCI-Partner_Centralized_Superset_RW')
--specific groups to add on dev
,('dev','CENTRALINFRA\L-CI-AP-SQL-DEV_MED_Team')
,('dev','CENTRALINFRA\msa-IIS-EMedipI$')
,('dev','CENTRALINFRA\svc-DoMe-Dev')
,('dev','E-MEDIAT\au_cp2_int')
,('dev','E-MEDIAT\au_documedis')
,('dev','E-MEDIAT\au_MyProduct_int')
,('dev','E-MEDIAT\au_ws_getpartner')
,('dev','medicalData-importer-dev')
,('dev','newrelic')
--specific groups to add on int
,('int','centralinfra\L-CI-AP-SQL-INT_MED_Team')
,('int','CENTRALINFRA\msa-IIS-EMedipI$')
,('int','CENTRALINFRA\svc-DoMe-Int')
,('int','E-MEDIAT\au_cp2_int')
,('int','E-MEDIAT\au_documedis')
,('int','E-MEDIAT\au_MyProduct_int')
,('int','E-MEDIAT\dbgrp_EMEVDB22_PARTNER_SUPERSET_R')
,('int','medicalData-importer-int')
,('int','newrelic')
--specific groups to add on prod
,('prod','CENTRALINFRA\L-CI-AP-SQL-PROD_MED_Team')
,('prod','CENTRALINFRA\msa-IIS-EMedipP$')
,('prod','CENTRALINFRA\svc-DoMe-Int')
,('prod','E-MEDIAT\dbgrp_EMEVDB32_ ODB_Superset_R')
,('prod','E-MEDIAT\au_documedis')
,('prod','E-MEDIAT\au_MyProduct_Prod')
,('prod','E-MEDIAT\au_ws_getpartner')
,('prod','E-MEDIAT\dbgrp_EMEVDB32_MyProducts_RW')
,('prod','E-MEDIAT\dbgrp_EMEVDB32_PARTNER_SUPERSET_R')
,('prod','E-MEDIAT\L-EM-AP-SQL-EMEVDB32_Partner_Superset_R')
,('prod','medicalData-importer-prod')
,('prod','newrelic')
;
SELECT @env
IF @env IN ('dev','int','prod')
BEGIN
SET @q='use master
go
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @sql nvarchar(MAX)='''';
';
--#region login
SELECT @q = @q + REPLACE(@tplLogins, '@grp@',g.[grp_name])
FROM @groups g
WHERE [g].[env] = @env
AND g.[grp_name] LIKE '%\%';
--#endregion login
--#region users
SET @q = @q +'
use '+@db+'
GO
';
SELECT @q = @q + REPLACE(@tplUser,'@grp@', g.[grp_name])
FROM @groups g
WHERE g.[env] = @env;
--#endregion users
SET @q = @q +'
ROLLBACK TRANSACTION '
PRINT ''
--#region print whole dyn sql
DECLARE @String NVARCHAR(MAX) = @q
DECLARE @CurrentEnd BIGINT; /* track the length of the next substring */
DECLARE @offset tinyint; /*tracks the amount of offset needed */
set @string = replace( replace(@string, char(13) + char(10), char(10)) , char(13), char(10))
WHILE LEN(@String) > 1
BEGIN
IF CHARINDEX(CHAR(10), @String) between 1 AND 4000
BEGIN
SET @CurrentEnd = CHARINDEX(char(10), @String) -1
set @offset = 2
END
ELSE
BEGIN
SET @CurrentEnd = 4000
set @offset = 1
END
PRINT SUBSTRING(@String, 1, @CurrentEnd)
set @string = SUBSTRING(@String, @CurrentEnd+@offset, LEN(@String))
END /*End While loop*/
--#endregion print whole dyn sql
END
ROLLBACK TRANSACTION

View File

@@ -0,0 +1,120 @@
-- Last updated October 1, 2021
WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
-- These wait types are almost 100% never a problem and so they are
-- filtered out to avoid them skewing the results. Click on the URL
-- for more information.
N'BROKER_EVENTHANDLER', -- https://www.sqlskills.com/help/waits/BROKER_EVENTHANDLER
N'BROKER_RECEIVE_WAITFOR', -- https://www.sqlskills.com/help/waits/BROKER_RECEIVE_WAITFOR
N'BROKER_TASK_STOP', -- https://www.sqlskills.com/help/waits/BROKER_TASK_STOP
N'BROKER_TO_FLUSH', -- https://www.sqlskills.com/help/waits/BROKER_TO_FLUSH
N'BROKER_TRANSMITTER', -- https://www.sqlskills.com/help/waits/BROKER_TRANSMITTER
N'CHECKPOINT_QUEUE', -- https://www.sqlskills.com/help/waits/CHECKPOINT_QUEUE
N'CHKPT', -- https://www.sqlskills.com/help/waits/CHKPT
N'CLR_AUTO_EVENT', -- https://www.sqlskills.com/help/waits/CLR_AUTO_EVENT
N'CLR_MANUAL_EVENT', -- https://www.sqlskills.com/help/waits/CLR_MANUAL_EVENT
N'CLR_SEMAPHORE', -- https://www.sqlskills.com/help/waits/CLR_SEMAPHORE
-- Maybe comment this out if you have parallelism issues
N'CXCONSUMER', -- https://www.sqlskills.com/help/waits/CXCONSUMER
-- Maybe comment these four out if you have mirroring issues
N'DBMIRROR_DBM_EVENT', -- https://www.sqlskills.com/help/waits/DBMIRROR_DBM_EVENT
N'DBMIRROR_EVENTS_QUEUE', -- https://www.sqlskills.com/help/waits/DBMIRROR_EVENTS_QUEUE
N'DBMIRROR_WORKER_QUEUE', -- https://www.sqlskills.com/help/waits/DBMIRROR_WORKER_QUEUE
N'DBMIRRORING_CMD', -- https://www.sqlskills.com/help/waits/DBMIRRORING_CMD
N'DIRTY_PAGE_POLL', -- https://www.sqlskills.com/help/waits/DIRTY_PAGE_POLL
N'DISPATCHER_QUEUE_SEMAPHORE', -- https://www.sqlskills.com/help/waits/DISPATCHER_QUEUE_SEMAPHORE
N'EXECSYNC', -- https://www.sqlskills.com/help/waits/EXECSYNC
N'FSAGENT', -- https://www.sqlskills.com/help/waits/FSAGENT
N'FT_IFTS_SCHEDULER_IDLE_WAIT', -- https://www.sqlskills.com/help/waits/FT_IFTS_SCHEDULER_IDLE_WAIT
N'FT_IFTSHC_MUTEX', -- https://www.sqlskills.com/help/waits/FT_IFTSHC_MUTEX
-- Maybe comment these six out if you have AG issues
N'HADR_CLUSAPI_CALL', -- https://www.sqlskills.com/help/waits/HADR_CLUSAPI_CALL
N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', -- https://www.sqlskills.com/help/waits/HADR_FILESTREAM_IOMGR_IOCOMPLETION
N'HADR_LOGCAPTURE_WAIT', -- https://www.sqlskills.com/help/waits/HADR_LOGCAPTURE_WAIT
N'HADR_NOTIFICATION_DEQUEUE', -- https://www.sqlskills.com/help/waits/HADR_NOTIFICATION_DEQUEUE
N'HADR_TIMER_TASK', -- https://www.sqlskills.com/help/waits/HADR_TIMER_TASK
N'HADR_WORK_QUEUE', -- https://www.sqlskills.com/help/waits/HADR_WORK_QUEUE
N'KSOURCE_WAKEUP', -- https://www.sqlskills.com/help/waits/KSOURCE_WAKEUP
N'LAZYWRITER_SLEEP', -- https://www.sqlskills.com/help/waits/LAZYWRITER_SLEEP
N'LOGMGR_QUEUE', -- https://www.sqlskills.com/help/waits/LOGMGR_QUEUE
N'MEMORY_ALLOCATION_EXT', -- https://www.sqlskills.com/help/waits/MEMORY_ALLOCATION_EXT
N'ONDEMAND_TASK_QUEUE', -- https://www.sqlskills.com/help/waits/ONDEMAND_TASK_QUEUE
N'PARALLEL_REDO_DRAIN_WORKER', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_DRAIN_WORKER
N'PARALLEL_REDO_LOG_CACHE', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_LOG_CACHE
N'PARALLEL_REDO_TRAN_LIST', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_TRAN_LIST
N'PARALLEL_REDO_WORKER_SYNC', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_SYNC
N'PARALLEL_REDO_WORKER_WAIT_WORK', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_WAIT_WORK
N'PREEMPTIVE_OS_FLUSHFILEBUFFERS', -- https://www.sqlskills.com/help/waits/PREEMPTIVE_OS_FLUSHFILEBUFFERS
N'PREEMPTIVE_XE_GETTARGETSTATE', -- https://www.sqlskills.com/help/waits/PREEMPTIVE_XE_GETTARGETSTATE
N'PVS_PREALLOCATE', -- https://www.sqlskills.com/help/waits/PVS_PREALLOCATE
N'PWAIT_ALL_COMPONENTS_INITIALIZED', -- https://www.sqlskills.com/help/waits/PWAIT_ALL_COMPONENTS_INITIALIZED
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT', -- https://www.sqlskills.com/help/waits/PWAIT_DIRECTLOGCONSUMER_GETNEXT
N'PWAIT_EXTENSIBILITY_CLEANUP_TASK', -- https://www.sqlskills.com/help/waits/PWAIT_EXTENSIBILITY_CLEANUP_TASK
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP', -- https://www.sqlskills.com/help/waits/QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
N'QDS_ASYNC_QUEUE', -- https://www.sqlskills.com/help/waits/QDS_ASYNC_QUEUE
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
-- https://www.sqlskills.com/help/waits/QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
N'QDS_SHUTDOWN_QUEUE', -- https://www.sqlskills.com/help/waits/QDS_SHUTDOWN_QUEUE
N'REDO_THREAD_PENDING_WORK', -- https://www.sqlskills.com/help/waits/REDO_THREAD_PENDING_WORK
N'REQUEST_FOR_DEADLOCK_SEARCH', -- https://www.sqlskills.com/help/waits/REQUEST_FOR_DEADLOCK_SEARCH
N'RESOURCE_QUEUE', -- https://www.sqlskills.com/help/waits/RESOURCE_QUEUE
N'SERVER_IDLE_CHECK', -- https://www.sqlskills.com/help/waits/SERVER_IDLE_CHECK
N'SLEEP_BPOOL_FLUSH', -- https://www.sqlskills.com/help/waits/SLEEP_BPOOL_FLUSH
N'SLEEP_DBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_DBSTARTUP
N'SLEEP_DCOMSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_DCOMSTARTUP
N'SLEEP_MASTERDBREADY', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERDBREADY
N'SLEEP_MASTERMDREADY', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERMDREADY
N'SLEEP_MASTERUPGRADED', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERUPGRADED
N'SLEEP_MSDBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_MSDBSTARTUP
N'SLEEP_SYSTEMTASK', -- https://www.sqlskills.com/help/waits/SLEEP_SYSTEMTASK
N'SLEEP_TASK', -- https://www.sqlskills.com/help/waits/SLEEP_TASK
N'SLEEP_TEMPDBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_TEMPDBSTARTUP
N'SNI_HTTP_ACCEPT', -- https://www.sqlskills.com/help/waits/SNI_HTTP_ACCEPT
N'SOS_WORK_DISPATCHER', -- https://www.sqlskills.com/help/waits/SOS_WORK_DISPATCHER
N'SP_SERVER_DIAGNOSTICS_SLEEP', -- https://www.sqlskills.com/help/waits/SP_SERVER_DIAGNOSTICS_SLEEP
N'SQLTRACE_BUFFER_FLUSH', -- https://www.sqlskills.com/help/waits/SQLTRACE_BUFFER_FLUSH
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', -- https://www.sqlskills.com/help/waits/SQLTRACE_INCREMENTAL_FLUSH_SLEEP
N'SQLTRACE_WAIT_ENTRIES', -- https://www.sqlskills.com/help/waits/SQLTRACE_WAIT_ENTRIES
N'VDI_CLIENT_OTHER', -- https://www.sqlskills.com/help/waits/VDI_CLIENT_OTHER
N'WAIT_FOR_RESULTS', -- https://www.sqlskills.com/help/waits/WAIT_FOR_RESULTS
N'WAITFOR', -- https://www.sqlskills.com/help/waits/WAITFOR
N'WAITFOR_TASKSHUTDOWN', -- https://www.sqlskills.com/help/waits/WAITFOR_TASKSHUTDOWN
N'WAIT_XTP_RECOVERY', -- https://www.sqlskills.com/help/waits/WAIT_XTP_RECOVERY
N'WAIT_XTP_HOST_WAIT', -- https://www.sqlskills.com/help/waits/WAIT_XTP_HOST_WAIT
N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', -- https://www.sqlskills.com/help/waits/WAIT_XTP_OFFLINE_CKPT_NEW_LOG
N'WAIT_XTP_CKPT_CLOSE', -- https://www.sqlskills.com/help/waits/WAIT_XTP_CKPT_CLOSE
N'XE_DISPATCHER_JOIN', -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_JOIN
N'XE_DISPATCHER_WAIT', -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_WAIT
N'XE_TIMER_EVENT' -- https://www.sqlskills.com/help/waits/XE_TIMER_EVENT
)
AND [waiting_tasks_count] > 0
)
SELECT
MAX ([W1].[wait_type]) AS [WaitType],
CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
MAX ([W1].[WaitCount]) AS [WaitCount],
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S],
CAST ('https://www.sqlskills.com/help/waits/' + MAX ([W1].[wait_type]) as XML) AS [Help/Info URL]
FROM [Waits] AS [W1]
INNER JOIN [Waits] AS [W2] ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum]
HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 95; -- percentage threshold
GO

59
WaitingTasks.sql Normal file
View File

@@ -0,0 +1,59 @@
/*============================================================================
File: WaitingTasks.sql
Summary: Snapshot of waiting tasks
SQL Server Versions: 2005 onwards
------------------------------------------------------------------------------
Written by Paul S. Randal, SQLskills.com
(c) 2016, SQLskills.com. All rights reserved.
For more scripts and sample code, check out
http://www.SQLskills.com
You may alter this code for your own *non-commercial* purposes. You may
republish altered code as long as you include this copyright and give due
credit, but you must obtain prior permission before blogging this code.
THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
============================================================================*/
SELECT
[owt].[session_id] AS [SPID],
[owt].[exec_context_id] AS [Thread],
[ot].[scheduler_id] AS [Scheduler],
[owt].[wait_duration_ms] AS [wait_ms],
[owt].[wait_type],
[owt].[blocking_session_id] AS [Blocking SPID],
[owt].[resource_description],
CASE [owt].[wait_type]
WHEN N'CXPACKET' THEN
RIGHT ([owt].[resource_description],
CHARINDEX (N'=', REVERSE ([owt].[resource_description])) - 1)
ELSE NULL
END AS [Node ID],
[eqmg].[dop] AS [DOP],
[er].[database_id] AS [DBID],
CAST ('https://www.sqlskills.com/help/waits/' + [owt].[wait_type] as XML) AS [Help/Info URL],
[eqp].[query_plan],
[est].text
FROM sys.dm_os_waiting_tasks [owt]
INNER JOIN sys.dm_os_tasks [ot] ON
[owt].[waiting_task_address] = [ot].[task_address]
INNER JOIN sys.dm_exec_sessions [es] ON
[owt].[session_id] = [es].[session_id]
INNER JOIN sys.dm_exec_requests [er] ON
[es].[session_id] = [er].[session_id]
FULL JOIN sys.dm_exec_query_memory_grants [eqmg] ON
[owt].[session_id] = [eqmg].[session_id]
OUTER APPLY sys.dm_exec_sql_text ([er].[sql_handle]) [est]
OUTER APPLY sys.dm_exec_query_plan ([er].[plan_handle]) [eqp]
WHERE
[es].[is_user_process] = 1
ORDER BY
[owt].[session_id],
[owt].[exec_context_id];
GO