SQL Server Query Store Settings (查询存储设置)

参考:Query Store Settings - Erin Stellato
        在 SQL Server 2017 中,有九 (9) 个设置与查询存储相关。虽然这些设置记录在sys.database_query_store_options中,但我经常被问到每个设置的值“应该”是多少。我在下面列出了每个设置,以及默认值和更改设置的注意事项。

操作模式

        SQL Server 2016 或 SQL Server 2017 中新数据库或升级数据库的默认值为 OFF。对于 Azure SQL 数据库,默认值为 READ_WRITE。

        如果要启用查询存储,则需要将其设置为 READ_WRITE,这是所需的状态。

        您还可以选择 READ_ONLY,这样就不会捕获新查询、新计划、运行时统计信息和等待统计信息(在 SQL Server 2017 中),但仍会强制执行任何强制计划。如果达到 MAX_STORAGE_SIZE_MB 限制(见下文),则会出现此状态。您可以使用以下查询检查实际状态与所需状态:

SELECT [actual_state_desc], [desired_state_desc]
FROM [sys].[database_query_store_options];
GO

        建议始终以 READ_WRITE 状态运行。我听说过有些环境会在 READ_WRITE 和 READ_ONLY 之间切换。如果您想了解您的工作负载并拥有解决性能问题所需的数据,您需要持续捕获信息。

查询_捕获_模式

        SQL Server 2016 和 SQL Server 2017 的默认值为 ALL。对于 Azure SQL 数据库,默认值为 AUTO。

        使用 AUTO 时,从资源利用率角度来看无关紧要或不经常执行的查询不会被捕获。如果您需要捕获可能只执行几次或使用很少资源的查询,请使用 ALL。否则,请使用 AUTO,因为这将捕获您的大部分工作负载。

        还有第三个选项,NONE,即不捕获任何新查询。对于已存在于查询存储中的查询,将继续捕获运行时和等待统计信息。

        我建议将此选项设置为 AUTO,因为您的环境中需要调整/注意的查询数量只占执行的查询总数的一小部分。如果您排除不使用大量资源或不经常执行的查询,您就不会错过重要数据。

每次查询的最大计划数

        SQL Server 2016、SQL Server 2017 和 Azure SQL 数据库的默认值为 200。

        此设置是一个整数,因此理论上您可以将其设置为 2,147,483,647!如果您不知道查询可能有多少个不同的计划,则可以使用 sys.dm_exec_query_stats 并获取给定 query_hash 的不同 query_plan_hash 值的数量:

SELECT [query_hash], COUNT (DISTINCT [query_plan_hash])
FROM [sys].[dm_exec_query_stats]
GROUP BY [query_hash]
ORDER BY 2 DESC;
GO

        虽然我愿意相信一个查询有 200 个不同的计划确实太多了,但我与几位 DBA 交谈过,他们证实他们有数千个计划。因此,如果您的查询不稳定且生成大量不同的计划,并且您想要捕获每个不同的计划,则可能需要增加此设置。要知道,具有大量查询计划的工作负载将需要更多空间,因此存在限制。您可以将限制设置为低于可能的计划数量以控制大小,但要明白您不会捕获每个计划变体。对于大多数环境来说,200 这个值是一个很好的起点。

最大存储大小_MB

        对于 SQL Server 2016 和 SQL Server 2017,默认值为 100MB。对于 Azure SQL 数据库,默认值特定于层级(基本 = 10MB、标准 = 100MB、高级 = 1GB)。

        查询存储数据存储在用户数据库的内部表中(与其他系统表一样,位于 PRIMARY 文件组中),并通过目录视图公开。您可以配置查询存储可使用的磁盘空间量。

        对于本地解决方案,应增加此设置。对于 SQL 数据库,可能需要增加此设置,有多个因素会影响查询存储数据所需的空间量。这些因素包括:

    1、QUERY_CAPTURE_MODE 的值;如果您捕获所有查询,您将获得比使用 AUTO 时更多的信息。数据量很难预测 - 这取决于您的工作量(您是否有很多只运行一次的查询?您是否有很多使用很少资源的查询?)。

    2、您在查询存储中保留数据的时间长度 (CLEANUP_POLICY)。保留的数据越多,所需的空间就越大。

    3、无论您是否运行 SQL Server 2017 并捕获等待统计信息 (WAIT_STATS_CAPTURE_MODE)。等待统计信息非常有价值,但需要保存和保留的数据更多。

    4、INTERVAL_LENGTH_MINUTES 的值。此值越低,您将拥有的运行时统计数据越多,因此您需要的空间就越多。

    5、工作负载类型。如果您的工作负载为临时工作负载,且查询文本变化较大,那么您将存储更多单个查询,因此将存储更多计划、更多运行时和等待统计信息。如果您的工作负载稳定,且没有临时查询或由动态字符串或 ORM 工具(如 NHibernate 或 Entity Framework)生成的查询,那么您的查询数量和数据总量将更少。

        如您所见,MAX_STORAGE_SIZE_MB 的值应该是多少并没有“答案”。我建议从分配 2GB 开始,然后通过 sys.database_query_store_options 和扩展事件进行监控。对于某些解决方案,1GB 就足够了。对于其他解决方案,您可能需要 5GB 或更多。

        2019 年 5 月 30 日更新: Microsoft 仍未提供任何文档列出 MAX_STORAGE_SIZE_MB 的建议,但是,您可以在 Azure SQL 数据库中将此选项设置为的最大值是 10GB……这表明 Microsoft 可能认为任何大于 10GB 的数据都太大了。这有什么关系?更大的查询存储可能需要更长的时间来加载,并产生更多的开销。您可能必须减少保存数据的时间以使其达到 10GB 的大小。

清理政策(STALE_QUERY_THRESHOLD_DAYS)

        SQL Server 2016、SQL Server 2017 和 Azure SQL 数据库的默认值为 30,但 Azure SQL 数据库的基本层除外,其默认值为 7 天。

        您想保留多少历史数据?如果您是一家从事生产开发的商店,您可能希望保留更多历史记录。如果您的工作量相当稳定,并且您每季度或更少地推出变更,那么 30 天的信息可能对您来说就足够了。您保留的数据越多,您需要的磁盘空间就越多。如果您不确定工作量,我建议从此设置至少 30 天开始,在最初几个月的使用中,您就会弄清楚是否要保留较旧的数据。

基于大小的清理模式

        SQL Server 2016、SQL Server 2017 和 Azure SQL 数据库的默认值为 AUTO,我建议保留此值。

        如果值为 AUTO,当查询存储接近 MAX_STORAGE_SIZE_MB 分配的存储大小时,它将自动清除最旧的数据,以确保有足够的空间容纳新数据。尚未达到 CLEANUP_POLICY 的数据可能会被删除(例如,如果 MAX_STORAGE_SIZE_MB 为 2GB,CLEANUP_POLICY 为 30 天,并且您在 15 天内达到 2GB,则将开始删除数据)。

        您可以将其设置为 OFF,但在这种情况下,如果达到 MAX_STORAGE_SIZE_MB,OPERATION_MODE 将更改为 READ_ONLY,您将不再捕获新数据。建议将其设置为 AUTO,并根据需要调整 MAX_STORAGE_SIZE_MB。

数据刷新间隔秒数

        SQL Server 2016、SQL Server 2017 和 Azure SQL 数据库的默认值为 900(15 分钟)。

        建议保留该值的默认值。


间隔长度分钟

        SQL Server 2016、SQL Server 2017 和 Azure SQL 数据库的默认值为 60。

        这是一个关键设置,因为它决定了运行时统计信息汇总的时间窗口。您只能为该设置选择固定值(1、5、10、15、30、60、1440)。该值越小,您拥有运行时统计信息的时间窗口就越小。这将允许您以更精细的级别查看数据。但是,值越小,您捕获的数据就越多,因此需要的空间就越多。

        对于我支持的客户端环境,我将其设置为 30,因为我喜欢更短的分析时间窗口,并且根据我迄今为止必须排除的性能问题,这是一个很好的窗口。如果您有空间限制或顾虑,请将其保留为默认值 60。


等待统计捕获模式

        SQL Server 2016、SQL Server 2017 和 Azure SQL Database 的默认值为 ON。

        如果您将启用了查询存储的数据库从 SQL Server 2016 升级到 SQL Server 2017,则升级时将启用 WAIT_STATS_CAPTURE_MODE。如果您在 SQL Server 2017 上有一个数据库并启用了查询存储,则将启用此选项。

        如果您使用的是 SQL Server 2017,我建议启用此选项,因为这些信息在排除查询性能故障时非常有价值。请注意,您可能需要增加 MAX_STORAGE_SIZE_MB 以容纳这些额外的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3246551.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

EXCEL VBA工程密码破解 工作表保护破解

这里写目录标题 破解Excel宏工程加密方法一 新建破解宏文件方法二 修改二进制文件 破解工作表保护引用 破解Excel宏工程加密 如图所示 白料数据处理已工程被加密。 方法一 新建破解宏文件 1 创建一个XLSM文件,查看代码 ALTF11 2 新建一个模块,“插…

夏日狂欢水上漂流的爆笑奇遇记

【夏日狂欢,水上漂流的爆笑奇遇记 —— 月亮姐姐的“睫毛漂流记”】在这个炎炎夏日,当烈日炙烤着大地,每一寸空气弥漫着对清凉的渴望时,一场别开生面的“暑期嘉年华”正悄然掀起一场水上狂欢的浪潮。而在这场盛宴中,月…

【论文】(2024.6) KAN: Kolmogorov–Arnold Networks 阅读笔记 | KAN周边扩展

KAN的优势声称是能以更少的参数量实现更高的精度。KANs在数学上是可靠的、准确的和可解释的。 一 KAN 论文题目:KAN: Kolmogorov–Arnold Networks 论文地址:https://arxiv.org/pdf/2404.19756 代码地址:https://github.com/KindXiaoming/…

如何打造一个专属网盘?可道云teamOS这些个性化设置了解一下

在这个数字化时代,企业对于云端存储和协作工具的需求日益增长。而网盘作为企业协作的重要工具之一,其个性化、定制化的需求也日益凸显。 今天,我要为大家介绍的是一款高度个性化的企业网盘——可道云teamOS。 满足个性化需求的企业网盘 可…

防火墙NAT地址转换和智能选举综合实验

一、实验拓扑 目录 一、实验拓扑 二、实验要求(接上一个实验要求后) 三、实验步骤 3.1办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 3.2分公司设备可以通过总公司的移动链路和电信链路访…

【深度学习】PyTorch框架(4):初始网络、残差网络 和密集连接网络

1、引言 在本篇文章中,我们将深入探讨并实现一些现代卷积神经网络(CNN)架构的变体。近年来,学界提出了众多新颖的网络架构。其中一些最具影响力,并且至今仍然具有重要地位的架构包括:GoogleNet/Inception架…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时,每个小部件都被视为具有四个同心矩形的框:边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式: 边距超出边框。边框绘制在边…

自学 阿里巴巴Java开发手册最新版(嵩山版)

🔴 阿里巴巴Java开发手册最新版(嵩山版) 一、编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 日期时间(六) 集合处理(七) 并发处理(八) 控制语句(九) 注释规约(十) 前后端规范 二、异常日志(一) 错误码(二) 异常处理(三)…

mac环境下安装python3的图文教程

Python 是一种功能多样且强大的编程语言,在各个领域得到广泛应用。许多 Mac 用户都在其设备上安装和运行 Python,以运行特定的应用程序或创建、运行自己的 Python 脚本。 文章源自设计学徒自学网-http://www.sx1c.com/49441.html 虽然某些版本的 macOS…

沃尔玛,temu测评: 搭建稳定高效的自养号测评体系时需要考虑的关键点

​自养号测评是通过自己培养账号进行测评,‌将整个过程的主导权掌握在自己手中,‌可以有效控制测评过程,‌降低风险。建议还是自己精养一批账号,账号在自己手里比较安全可控,随时随地可以给自己送测,精准搜…

现场可重构CPLD芯片应用案例—蓝牙音箱

我司英尚微提供的高性能数模混合现场可重构IC、通用可配置的模数混合芯片内部集成丰富的模拟资源和数字资源,可轻松替代电路中的各种标准器件,并按照客户要求组合成最优小型ASIC,缩短开发周期,降低成本。下面介绍LS98002现场可重构…

openwrt安装netbird

官方版本安装后无法启动,有报错,请使用以下版本: https://github.com/tbc0309/openwrt-netbird 下载地址: https://github.com/tbc0309/openwrt-netbird/releases/ 平台架构根据自己的设备选择,可以通过以下方法获得…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Visual Studio使用——在vs中给vb.net项目添加新的窗口:新建的方式、添加已有窗口的方式

目录 引出Visual Studio使用vb添加新的窗体自定义代码片段vs显示所有文件 总结Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 引出 Visual Studio使用—…

子进程继承父进程文件描述符导致父进程打开设备文件失败

开发过程中有时会遇到需要在程序中执行三方程序或者shell脚本,一般会通过system(), popen(), exec簇来完成该功能。我们知道以上方法会通过fork创建子进程后在子进程中执行相应指令。如图1为某个示例流程,具体的程序执行流程如图2所示,线程my…

[RK3588-Android12] 关于如何取消usb-typec的pd充电功能

问题描述 RK3588取消usb-typec的pd充电功能 解决方案: 在dts中fusb302节点下usb_con: connector子节点下添加如下熟悉: 打上如下2个补丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…

Linux文本工具之-Vim(一)

一、模式 1、普通模式 这是使用Vim打开一个文件时,Vim的默认模式。在普通模式下,您可以使用各种命令来移动光标、删除、复制、粘贴和其他编辑操作 2、插入模式 在插入模式下,您可以像在其他文本编辑器中一样输入和编辑文本。按下键盘上的…

2024年【北京市安全员-C3证】证考试及北京市安全员-C3证作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-C3证证考试根据新北京市安全员-C3证考试大纲要求,安全生产模拟考试一点通将北京市安全员-C3证模拟考试试题进行汇编,组成一套北京市安全员-C3证全真模拟考试试题,学员…

06. Hibernate 中主键映射的助攻

1. 前言 本节课和大家一起聊聊 Hibernate 中的主键策略。通过本节课程,你将了解到: 什么是主键策略及主键生成器的种类;如何映射复合主键。 2. 主键策略 Hibernate 进行数据库操作时,可依靠主键生成器组件更快速、准确地进行一…

CentOS 7.9 64位安装nginx,部署tomcat实现负载均衡

在CentOS 7.9 中安装nginx做负载均衡步骤 用ubuntu试了一下没成功 centos更顺利,当初听到什么nginx,负载均衡,反向代理,redis这些就潜意识就觉得好复杂,今天花一下午时间尝试了一下,感觉也没那么难&#xf…