use*_*433 0 sql-server t-sql truncate query-store
我们正在使用查询存储。现在我们通过每晚清理查询存储解决了一个问题。当您清理查询存储时,查询存储表正在被RESEED
编辑 :-(
您知道如何在不RESEED
使用表的情况下清理查询存储吗?
Jos*_*ell 11
假设您正在使用该命令ALTER DATABASE [YourDatabaseName] SET QUERY_STORE CLEAR
来“清理查询存储”,我决定查看该命令执行时在幕后运行的查询。
为此,我使用 SSMS 附带的“查询详细信息跟踪”XE 模板设置了一个基本的扩展事件会话。这捕获了几个应该涵盖系统上运行的大多数查询的事件:
默认情况下,它排除在系统数据库 ( database_id > 4
)上下文中运行的查询,这对于此测试来说很好,因为查询存储位于启用它的用户数据库中。
启动该 XE 会话后,我运行了该ALTER DATABASE...SET QUERY_STORE CLEAR
命令,该会话获取了以下查询:
TRUNCATE table sys.plan_persist_runtime_stats;
TRUNCATE table sys.plan_persist_runtime_stats_interval;
TRUNCATE table sys.plan_persist_plan;
TRUNCATE table sys.plan_persist_query;
TRUNCATE table sys.plan_persist_query_text;
Run Code Online (Sandbox Code Playgroud)
在“CLEAR”运行此附加语句之后添加可选的“ALL”参数:
TRUNCATE table sys.plan_persist_context_settings;
Run Code Online (Sandbox Code Playgroud)
您可能会注意到这些是查询存储目录视图的基表。
TRUNCATE TABLE
重置身份值:
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果未定义种子,则使用默认值 1。要保留身份计数器,请改用 DELETE。
因此,此行为是“设计使然” - 您不能跨“查询存储清除”操作依赖查询存储表中的标识值。
您通过清除查询存储解决了什么问题?如果您在新问题中提供该上下文,也许我们可以建议不同的选项。
在不截断表的情况下删除某些查询的一些潜在选项可以在这里找到:
前两个选项会导致 Query Store 中的行根据它们的年龄和/或查询的开销由 id 删除。
第二个选项首先限制添加到查询存储的数据量。