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://www.mzph.cn/pingmian/47104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI数字人直播源码解析:灰豚私有化部署背后的技术分析

随着AI数字人技术的应用潜力不断显现,与AI数字人相关的多个项目逐渐成为创业者们的重点关注对象,作为当前AI数字人典型应用场景之一的数字人直播意向人数更是屡创新高,AI数字人直播源码部署的热度也因此不断飙升,与各大数字人源码…

Centos7 安装私有 Gitlab

在 CentOS 7上,下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤,如果您打算仅从本地网络访问极狐GitLab,则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…

昇思25天学习打卡营第20天|应用实践之RNN实现情感分类

基本介绍 今天的应用实践是RNN实现情感分类,情感分类是自然语言处理中的经典任务,是典型的分类问题。RNN是一种循环神经网络,接收序列数据作为输入。模型训练所采用的数据集是IMDB影评数据集,数据集包含Positive和Negative两类。由…

数据库基础-进阶

数据库管理: *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制,读写分离,高可用 原理 数据库的概念和相关的语法和规范: 数据库:组织,存储,管理数据的仓库。 数据…

cpp 强制转换

一、static_cast static_cast 是 C 中的一个类型转换操作符,用于在类的层次结构中进行安全的向上转换(从派生类到基类)或进行不需要运行时类型检查的转换。它主要用于基本数据类型之间的转换、对象指针或引用的向上转换(即从派生…

使用phpMyAdmin操作MYSQL(四)

一. 学会phpMyAdmin? phpMyAdminhttp://water.ve-techsz.cn/phpmyadmin/ 虽然我我们可以用命令行操作数据库,但这样难免没有那么直观,方便。所以接下来我们使用phpMyAdmin来操作MySQL,phpMyAdmin是众多MySQL图形化管理工具中使用…

编程从零基础到进阶(更新中)

题目描述 依旧是输入三个整数,要求按照占8个字符的宽度,并且靠左对齐输出 输入格式 一行三个整数,空格分开 输出格式 输出它们按格式输出的效果,占一行 样例输入 123456789 -1 10 样例输出 123456789-1 10 #include "stdio.…

2024年7月20日(星期六)骑行支里山

2024年7月20日 (星期六)骑行支里山,早8:00到8:30,大观公园门口集合,9:00准时出发【因迟到者,骑行速度快者,可自行追赶偶遇。】 偶遇地点:大观公园门口集合 ,家住东,南,北…

【数据结构】树和二叉树及堆的深入理解

【数据结构】树和二叉树及堆的深入理解 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】树和二叉树及堆的深入理解前言一.树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树的应用 二.二叉树2.1 二叉树概念及…

智慧煤矿:AI视频智能监管解决方案引领行业新变革

随着科技的飞速发展,人工智能(AI)技术已经渗透到各个行业,为传统产业的转型升级提供了强大的动力。在煤矿行业中,安全监管一直是一个重要的议题。为了提高煤矿的安全生产水平,降低事故发生率,智…

ubuntu 虚拟机扩容

在使用vmware创建的ubuntu虚拟机进行linux开发时,安装了docker容器,编译会占用很大的磁盘空间,不想创建新的更大空间的虚拟机linux系统,可以通过gparted图形化工具进行扩容,以下是操作方法 虚拟机设置,扩展…

【C语言】详解结构体(上)

文章目录 前言1. 结构体类型的含义2.结构体的声明2.1 结构体声明的语法2.2 结构体变量的创建和初始化 3.结构体的特殊声明4. 结构体的自引用5.小结 前言 C语言的数据类型分为内置数据类型和自定义的数据类型。所谓的内置的数据类型可以认为是C语言自带的数据类型(c…

Java案例遍历集合中的自定义对象

目录 一:案例要求: 二案例分析: ​编辑三:具体代码: 四:运行结果: 一:案例要求: 二案例分析: 三:具体代码: Ⅰ: pack…

Windows系统中MySQL的安装和卸载(详细包含msi和zip下载方式,以及完全卸载方法,易出现问题及解决方案等)

MySQL的安装: 第一种:msi安装(交简单,但是不能自定义安装路径) 下载地址:https://dev.mysql.com/downloads/installer/ 选择历史版本 选择安装版本,这里我选择的是8.0.37的版本,然…

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法 众所周知TS是JS的超集,而ArkTs则可以理解为是Ts的超集。他们的基础都基于JS,所以学习之前最好就JS基础。我的学习重点也是放在ArkTs和JS的不同点上。 文章主要跟着官方文档学习,跳过了一…

框架设计MVC

重点: 1.用户通过界面操作,传输到control,control可以直接去处理View,或者通过模型处理业务逻辑,然后将数据传输给view。 2.control包含了model和view成员。 链接: MVC框架详解_mvc架构-CSDN博客 MVC架…

【Docker】Docker 的数据管理与镜像创建

目录 一.数据管理 1.数据卷 2.数据卷容器 二.端口映射 三.容器互联 四.Docker 镜像的创建 1.基于现有镜像创建 1.1.首先启动一个镜像,基于镜像创建容器,更新容器内容 1.2.将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新…

算法2--贪心算法

1.老鼠和猫的交易 小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间; 第i个房间有 J[i] 磅的五香豆,并且需要用 F[i] 磅的猫粮去交换; 老鼠不必交换该房间所有的五…

中国星坤X0800HI系列线对板连接器:创新技术连接,引领智能家居未来!

近日,中国星坤推出的X0800HI系列线对板连接器,凭借其独特的设计和卓越的性能,引起了业界的广泛关注。 X0800HI系列线对板连接器在极小空间内实现了线对板的W-B连接,这不仅解决了传统连接方式中剥线和焊接的繁琐步骤,还…

django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出

使用crontab执行python脚本时,有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说,crontab使用的环境变量是非交互式(non-interactive)环境变量,而终端则使用交互式(inter…