SQL 服务器查询存储:[sys.query_store_query_text].[query_sql_text] 被截断了?
SQL Server Query Store: [sys.query_store_query_text].[query_sql_text] is truncated?
我正在对查询存储使用以下查询:
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) 不会达到相同的最大值。
我正在从 SSMS 结果窗格到记事本中查看 SQL by copy/pasting。
SQL 版本:Microsoft SQL Azure (RTM) - 12.0.2000.8 2017 年 8 月 29 日 13:06:11
我记得在其他 "system tables" 中 SQL 服务器截断 SQL。
所以问题是:谁能明确地说 [sys.query_store_query_text].[query_sql_text] 在某些情况下是否可以被 SQL 服务器本身截断?
另一种可能性,在客户端应用程序中发生截断,没有任何意义,因为它必须向 SQL 服务器发送完整、有效的 SQL 语句,否则怎么可能执行?然而,len(query_sql_text) 中的方差排除了超过列长度限制的可能性。
这里可能发生了什么?
SSMS 将在return将数据发送到数据网格时截断 blob 结果。您可以在查询选项中修改长度,或者return数据为XML。 EG
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
或者从 SSMS 中的 XEvents UI 获取查询文本。
我正在对查询存储使用以下查询:
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) 不会达到相同的最大值。
我正在从 SSMS 结果窗格到记事本中查看 SQL by copy/pasting。
SQL 版本:Microsoft SQL Azure (RTM) - 12.0.2000.8 2017 年 8 月 29 日 13:06:11
我记得在其他 "system tables" 中 SQL 服务器截断 SQL。
所以问题是:谁能明确地说 [sys.query_store_query_text].[query_sql_text] 在某些情况下是否可以被 SQL 服务器本身截断?
另一种可能性,在客户端应用程序中发生截断,没有任何意义,因为它必须向 SQL 服务器发送完整、有效的 SQL 语句,否则怎么可能执行?然而,len(query_sql_text) 中的方差排除了超过列长度限制的可能性。
这里可能发生了什么?
SSMS 将在return将数据发送到数据网格时截断 blob 结果。您可以在查询选项中修改长度,或者return数据为XML。 EG
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
或者从 SSMS 中的 XEvents UI 获取查询文本。