Хранилище запросов SQL Server: [sys.query_store_query_text].[Query_sql_text] урезано?
Я работаю со следующим запросом к хранилищу запросов:
SELECT
TOP 100
qp.last_execution_time [qp__last_execution_time],
qt.query_sql_text,
len(qt.query_sql_text) sql_length,
round(rs.avg_duration ,5) avg_duration
,max_rowcount,avg_rowcount,last_rowcount
FROM
sys.query_store_plan qp
INNER JOIN sys.query_store_query [q] ON qp.query_id = q.query_id
INNER JOIN sys.query_store_query_text [qt] ON q.query_text_id = qt.query_text_id
INNER JOIN sys.query_store_runtime_stats [rs] ON qp.plan_id = rs.plan_id
WHERE
order by len(qt.query_sql_text) desc
Что я замечаю, так это то, что кажется, что [query_sql_text] усекается, например, типичное утверждение заканчивается на:
CAST( '20170920 00:00:00' AS datetime),CAST( '20140701 00:00:
Возможно актуально:
SQL в этом случае генерируется Power BI.
Значение len(qt.query_sql_text) не увеличивается при том же значении, когда текст обрезается.
Я просматриваю SQL путем копирования / вставки из области результатов SSMS в блокнот.
Версия SQL: Microsoft SQL Azure (окончательная первоначальная версия) - 12.0.2000.8 29 августа 2017 г. 13:06:11
В некоторых других "системных таблицах" я вспоминаю, что SQL Server усекает SQL.
Поэтому вопрос заключается в следующем: может ли кто-нибудь однозначно сказать, может ли [sys.query_store_query_text]. [Query_sql_text] в некоторых случаях быть усеченным самим SQL Server?
Альтернативная возможность, усечение, происходящее в клиентском приложении, не имеет никакого смысла, так как он должен отправить полный, действительный оператор SQL на SQL Server, иначе как он мог бы быть выполнен? И все же, отклонение в len (query_sql_text) исключает превышение ограничения длины столбца.
Что здесь может происходить?
1 ответ
SSMS будет обрезать результаты BLOB-объектов при возврате данных в сетку данных. Вы можете изменить длину в параметрах запроса или вернуть данные в формате XML. НАПРИМЕР
SELECT
TOP 100
qp.last_execution_time [qp__last_execution_time],
qt.query_sql_text,
len(qt.query_sql_text) sql_length,
round(rs.avg_duration ,5) avg_duration
,max_rowcount,avg_rowcount,last_rowcount
FROM
sys.query_store_plan qp
INNER JOIN sys.query_store_query [q] ON qp.query_id = q.query_id
INNER JOIN sys.query_store_query_text [qt] ON q.query_text_id = qt.query_text_id
INNER JOIN sys.query_store_runtime_stats [rs] ON qp.plan_id = rs.plan_id
order by len(qt.query_sql_text) desc
for xml path
Или получить каждый запрос в отдельном столбце XML:
SELECT
TOP 100
qp.last_execution_time [qp__last_execution_time],
( select qt.query_sql_text for xml path, type ) query_sql_text,
len(qt.query_sql_text) sql_length,
round(rs.avg_duration ,5) avg_duration
,max_rowcount,avg_rowcount,last_rowcount
FROM
sys.query_store_plan qp
INNER JOIN sys.query_store_query [q] ON qp.query_id = q.query_id
INNER JOIN sys.query_store_query_text [qt] ON q.query_text_id = qt.query_text_id
INNER JOIN sys.query_store_runtime_stats [rs] ON qp.plan_id = rs.plan_id
order by len(qt.query_sql_text) desc
Или получите текст запроса из пользовательского интерфейса XEvents в SSMS.