在我们的 2 个生产数据库上启用了查询存储,但由于我的 SA 权限被撤销(我暂时将它们用于新服务器),因此我不再有权查看数据库下的查询存储节点。
我找不到任何描述访问查询存储报告所需的最低权限的地方。
查询存储在 SQL Server 2016+ 和 Azure SQL DB 中可用,默认情况下处于启用状态。对于本地 SQL Server,它必须在每个数据库上单独启动。
创建新数据库时,有没有办法默认启用查询存储?
我在 SQL 2017 上启用了查询存储,并且我在查询中看到频繁发生SELECT *在特定表上的查询。
我想缩小此请求的来源范围,看看我们是否可以找到比执行SELECT *.
当然,我有一个来自 Query Store 的查询 ID。我最近还要求我的开发人员在他们的连接字符串中包含应用程序名称,很多人都这样做了。
有没有办法(例如,可能使用 DMV)找出与此查询关联的应用程序名称?
我在网上广泛搜索,没有看到其他人发布关于此的信息,所以我想我会。我正在尝试审计查询存储何时进行清理并从查询存储中清除。
我发现有两个扩展事件会话,我认为是事件,但即使在查询存储清除过时的查询数据后,我也没有数据被提取:
想知道是否有其他人遇到过同样的问题并且在查询存储清除其数据时和我一样好奇吗?
以下是我用于设置当前审计的代码:
Run Code Online (Sandbox Code Playgroud)CREATE EVENT SESSION [QueryStore_Cleanup_Audit] ON SERVER ADD EVENT qds.query_store_db_cleanup__finished (ACTION ( package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.system_thread_id, sqlos.task_time, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.nt_username, sqlserver.plan_handle, sqlserver.server_instance_name, sqlserver.session_id, sqlserver.session_nt_username, sqlserver.sql_text, sqlserver.transaction_id, sqlserver.username ) WHERE ([database_id] = (5)) ), ADD EVENT qds.query_store_db_cleanup__started (ACTION ( package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.system_thread_id, sqlos.task_time, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.nt_username, sqlserver.plan_handle, sqlserver.server_instance_name, sqlserver.session_id, sqlserver.session_nt_username, sqlserver.sql_text, sqlserver.transaction_id, sqlserver.username ) WHERE ([database_id] = (5)) ) WITH ( MAX_MEMORY = 40096KB, EVENT_RETENTION_MODE …
在 SQL 2017 中,除了2017年添加的之外,还有一个新的执行指标“日志内存”我没有找到任何关于它的信息。
执行指标:(SQL 2017)
CPU 时间、持续时间、执行计数、逻辑读取、逻辑写入、内存消耗、物理读取、CLR 时间、并行度 (DOP)、行计数、日志内存、TempDB 内存和等待时间
我相信我了解所有其他指标是什么以及我为什么会关心。
我在几个特定时期运行了前 5 个资源消耗查询的所有指标。我记录了,现在我正在检查结果。我知道“日志内存”的(非常大)值以 KB 为单位。
指标“日志内存”究竟是什么?
编辑,收到两个答案我检查
LowlyDBA的回答表明它是来自 5 个相关领域的组合sys.query_store_runtime_stats
使用jadarnel27 在他们的回答中提供的代码来验证
我创建了数据库 '231682' 并运行了 5 个字段的测试查询,我得到的结果非常相似
我总结(用于=SUM()在Excel中)我的价值观,并得到1383040(字节)
我查看了查询存储,对于使用的日志内存 (KB),它显示的值为 354,058,240 (KB),这个数字要大几个数量级,与字节相比也是 KB,以字节为单位,它将是 354,058,240,000(字节)
我把所有字段的总数相加,只得到 1,655,236(字节)
SELECT *
FROM sys.query_store_runtime_stats qsrs
WHERE qsrs.avg_log_bytes_used > 0;
Run Code Online (Sandbox Code Playgroud)
我怀疑我的问题的答案是 SQL 2017 中的“日志内存”指标没有任何实际价值。这个小实验中显示的值是 354GB,高得不切实际。
我已经失败了几次了。在 UI 中,我能够成功地将查询存储保留设置中的查询存储大小从 250 mb 增加到 1000 mb。我进行更改,关闭数据库属性窗口,重新打开,看起来更改成功,显示 1000 mb。然后当我再次查看它时(可能是第二天左右),它又恢复到 250 mb。
版本为 Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4。
这里会发生什么?
我在查询存储中强制执行了一个计划,如下所示
EXEC sys.sp_query_store_force_plan @query_id = 113366, @plan_id = 3687662
但是当我再次运行查询时,查询不使用该计划,也不显示failure_force_reason
以下查询显示该计划已被强制,并表明上次运行时强制没有失败
SELECT plan_id,
query_id,
is_forced_plan,
last_force_failure_reason_desc
FROM sys.query_store_plan
WHERE is_forced_plan = 1
Run Code Online (Sandbox Code Playgroud)
以下查询显示了相关查询的最后一次运行时间,这向我证实,我确实重新运行了这个查询,并且它使用了与我强制执行的计划不同的计划:
SELECT TOP 1
q.query_id,
p.plan_id,
s.last_execution_time,
SYSDATETIMEOFFSET() AS CurrentTime
FROM sys.query_store_query q
JOIN sys.query_store_plan p
ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats s
ON s.plan_id = p.plan_id
WHERE q.query_id = 113366
ORDER BY s.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
为什么查询存储似乎忽略了这个计划的力量?我可以利用任何扩展事件或其他故障排除工具来了解吗?
我们正在使用 SQL Server 2016。我们在 2023 年 9 月 11 日的查询持续时间方面遇到一些问题。想在 QueryStore 上检查它,我在 2023 年 9 月 11 日 05:00 PM 执行的查询存储上看到:
2023 年 9 月 11 日,我们的执行次数要多得多(2023 年 9 月 8 日,执行次数约为 1150 VS 800)。我在 2023 年 9 月 12 日运行相同的查询存储检查,发现昨天的执行计数比我昨天检查的要少得多。
你知道为什么我们会有这样的差异吗?更重要的是,我仍然看到 2023 年 9 月 11 日的执行计数仍在减少。
查询执行 2023-09-14 9:52 AM:
我们经常使用查询存储强制计划功能。
我们想审核何时以及谁强制执行每个计划。
是否需要扩展事件会话来审核此事件,
或者有包含此特定信息的 dmvs 或目录视图?
我在数据库上启用了查询存储。我有一个要跟踪的特定查询。我有很多关于 sp_BlitzCache 查询的详细信息(如 SQL 文本、SQL 句柄、SQL 哈希、计划缓存句柄/哈希等)。
我是否可以使用来自 sp_BlitzCache 的信息搜索查询存储以跟踪那里的查询?我想强制执行特定的执行计划,因为查询会遇到参数嗅探问题。