Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions install/01_install_database.sql
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,10 @@ BEGIN
DEFAULT 5,
retention_days integer NOT NULL
DEFAULT 30,
collect_query bit NOT NULL
DEFAULT CONVERT(bit, 'true'),
collect_plan bit NOT NULL
DEFAULT CONVERT(bit, 'true'),
[description] nvarchar(500) NULL,
created_date datetime2(7) NOT NULL
DEFAULT SYSDATETIME(),
Expand Down Expand Up @@ -317,6 +321,47 @@ BEGIN
PRINT 'Created config.collection_schedule table';
END;

/*
Add collect_query and collect_plan columns for existing installations
Controls whether collectors store query text and execution plans
Both default to enabled (1) for backwards compatibility
*/
IF NOT EXISTS
(
SELECT
1/0
FROM sys.columns
WHERE object_id = OBJECT_ID(N'config.collection_schedule')
AND name = N'collect_query'
)
BEGIN
ALTER TABLE
config.collection_schedule
ADD collect_query bit NOT NULL
CONSTRAINT DF_collection_schedule_collect_query
DEFAULT CONVERT(bit, 'true');

PRINT 'Added collect_query column to config.collection_schedule';
END;

IF NOT EXISTS
(
SELECT
1/0
FROM sys.columns
WHERE object_id = OBJECT_ID(N'config.collection_schedule')
AND name = N'collect_plan'
)
BEGIN
ALTER TABLE
config.collection_schedule
ADD collect_plan bit NOT NULL
CONSTRAINT DF_collection_schedule_collect_plan
DEFAULT CONVERT(bit, 'true');

PRINT 'Added collect_plan column to config.collection_schedule';
END;

/*
Critical issues table
Logs significant performance problems detected by collectors and analysis procedures
Expand Down
22 changes: 21 additions & 1 deletion install/08_collect_query_stats.sql
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,19 @@ BEGIN
RAISERROR(N'Collecting queries executed since %s', 0, 1, @cutoff_time_string) WITH NOWAIT;
END;

/*
Read collection flags for query text and plans
*/
DECLARE
@collect_query bit = 1,
@collect_plan bit = 1;

SELECT
@collect_query = cs.collect_query,
@collect_plan = cs.collect_plan
FROM config.collection_schedule AS cs
WHERE cs.collector_name = N'query_stats_collector';

/*
Collect query statistics directly from DMV
Only collects queries executed since last collection
Expand Down Expand Up @@ -255,6 +268,8 @@ BEGIN
max_spills = qs.max_spills,
query_text =
CASE
WHEN @collect_query = 0
THEN NULL
WHEN qs.statement_start_offset = 0
AND qs.statement_end_offset = -1
THEN st.text
Expand All @@ -272,7 +287,12 @@ BEGIN
) / 2 + 1
)
END,
query_plan_text = tqp.query_plan
query_plan_text =
CASE
WHEN @collect_plan = 1
THEN tqp.query_plan
ELSE NULL
END
FROM sys.dm_exec_query_stats AS qs
OUTER APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
OUTER APPLY
Expand Down
45 changes: 41 additions & 4 deletions install/09_collect_query_store.sql
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,19 @@ BEGIN
RAISERROR(@debug_msg, 0, 1) WITH NOWAIT;
END;

/*
Read collection flags for query text and plans
*/
DECLARE
@collect_query bit = 1,
@collect_plan bit = 1;

SELECT
@collect_query = cs.collect_query,
@collect_plan = cs.collect_plan
FROM config.collection_schedule AS cs
WHERE cs.collector_name = N'query_store_collector';

/*
Create temp table to hold Query Store data from all databases
*/
Expand Down Expand Up @@ -408,8 +421,20 @@ BEGIN
WHEN q.object_id > 0
AND o.object_id IS NOT NULL
THEN o.object_name
END,
query_sql_text = qt.query_sql_text,
END,';

IF @collect_query = 1
BEGIN
SET @sql += N'
query_sql_text = qt.query_sql_text,';
END;
ELSE
BEGIN
SET @sql += N'
query_sql_text = NULL,';
END;

SET @sql += N'
query_hash = q.query_hash,
count_executions = rs.count_executions,
avg_duration = rs.avg_duration,
Expand Down Expand Up @@ -501,8 +526,20 @@ BEGIN
is_forced_plan = p.is_forced_plan,
p.force_failure_count,
p.last_force_failure_reason_desc,
p.compatibility_level,
query_plan_text = CONVERT(nvarchar(max), p.query_plan),
p.compatibility_level,';

IF @collect_plan = 1
BEGIN
SET @sql += N'
query_plan_text = CONVERT(nvarchar(max), p.query_plan),';
END;
ELSE
BEGIN
SET @sql += N'
query_plan_text = NULL,';
END;

SET @sql += N'
compilation_metrics =
(
SELECT
Expand Down
32 changes: 29 additions & 3 deletions install/10_collect_procedure_stats.sql
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,17 @@ BEGIN
RAISERROR(N'Collecting procedure stats with cutoff time: %s', 0, 1, @cutoff_time_string) WITH NOWAIT;
END;

/*
Read collection flag for plans
*/
DECLARE
@collect_plan bit = 1;

SELECT
@collect_plan = cs.collect_plan
FROM config.collection_schedule AS cs
WHERE cs.collector_name = N'procedure_stats_collector';

/*
Collect procedure, trigger, and function statistics
Single query with UNION ALL to collect from all three DMVs
Expand Down Expand Up @@ -223,7 +234,12 @@ BEGIN
total_spills = ps.total_spills,
min_spills = ps.min_spills,
max_spills = ps.max_spills,
query_plan_text = CONVERT(nvarchar(max), tqp.query_plan)
query_plan_text =
CASE
WHEN @collect_plan = 1
THEN CONVERT(nvarchar(max), tqp.query_plan)
ELSE NULL
END
FROM sys.dm_exec_procedure_stats AS ps
OUTER APPLY
sys.dm_exec_text_query_plan
Expand Down Expand Up @@ -385,7 +401,12 @@ BEGIN
total_spills = ts.total_spills,
min_spills = ts.min_spills,
max_spills = ts.max_spills,
query_plan_text = CONVERT(nvarchar(max), tqp.query_plan)
query_plan_text =
CASE
WHEN @collect_plan = 1
THEN CONVERT(nvarchar(max), tqp.query_plan)
ELSE NULL
END
FROM sys.dm_exec_trigger_stats AS ts
CROSS APPLY sys.dm_exec_sql_text(ts.sql_handle) AS st
OUTER APPLY
Expand Down Expand Up @@ -444,7 +465,12 @@ BEGIN
total_spills = NULL,
min_spills = NULL,
max_spills = NULL,
query_plan_text = CONVERT(nvarchar(max), tqp.query_plan)
query_plan_text =
CASE
WHEN @collect_plan = 1
THEN CONVERT(nvarchar(max), tqp.query_plan)
ELSE NULL
END
FROM sys.dm_exec_function_stats AS fs
OUTER APPLY
sys.dm_exec_text_query_plan
Expand Down
Loading