Microsoft SQL Server
Магазин запросов
Поиск…
Включить хранилище запросов в базе данных
В базе данных можно включить хранилище запросов, используя следующую команду:
ALTER DATABASE tpch SET QUERY_STORE = ON
SQL Server / Azure SQL Database будет собирать информацию о выполненных запросах и предоставлять информацию в представлениях sys.query_store:
- sys.query_store_query
- sys.query_store_query_text
- sys.query_store_plan
- sys.query_store_runtime_stats
- sys.query_store_runtime_stats_interval
- sys.database_query_store_options
- sys.query_context_settings
Получить статистику выполнения для SQL-запросов / планов
Следующий запрос будет возвращать информацию о qeries, их планах и средней статистике относительно их продолжительности, времени процессора, физического и логического чтения io.
SELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id,
avg_duration, avg_cpu_time,
avg_physical_io_reads, avg_logical_io_reads
FROM sys.query_store_plan AS Pl
JOIN sys.query_store_query AS Qry
ON Pl.query_id = Qry.query_id
JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id
JOIN sys.query_store_runtime_stats Stats
ON Pl.plan_id = Stats.plan_id
Удаление данных из хранилища запросов
Если вы хотите удалить какой-либо запрос или план запроса из хранилища запросов, вы можете использовать следующие команды:
EXEC sp_query_store_remove_query 4;
EXEC sp_query_store_remove_plan 3;
Параметры для этих хранимых процедур - это идентификатор запроса / плана, полученный из системных представлений.
Вы также можете просто удалить статистику выполнения для конкретного плана, не удаляя план из магазина:
EXEC sp_query_store_reset_exec_stats 3;
Параметр, указанный для этого идентификатора плана процедуры.
Форсирование плана запроса
Оптимизатор SQL Query выберет возможный план baes, который он может найти для некоторого запроса. Если вы можете найти какой-то план, который оптимально подходит для какого-либо запроса, вы можете заставить QO всегда использовать этот план, используя следующую хранимую процедуру:
EXEC sp_query_store_unforce_plan @query_id, @plan_id
С этого момента QO всегда будет использовать план, предоставленный для запроса.
Если вы хотите удалить эту привязку, вы можете использовать следующую хранимую процедуру:
EXEC sp_query_store_force_plan @query_id, @plan_id
С этого момента QO снова попытается найти лучший план.