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.mfbz.cn/a/802462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Vulnhub] devt-improved slog_users+vim权限提升+nano权限提升+passwd权限提升+Lxc逃逸权限提升

信息收集 IP AddressOpening Ports192.168.101.149TCP:22,113,139,445,8080 $ nmap -p- 192.168.101.149 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | …

【GPT4充值】WildCard虚拟卡

绑定流程 官网:WildCard | 一分钟注册,轻松订阅海外软件服务 1、使用手机号验证码注册、可以使用zfb快捷认证 2、填写身份信息后,然后根据流程验证即可。 3、选择卡片使用期限,填入邀请码【PEACEFUL】可立减$2。 4、打开openAI开发…

leetcode热题100.分割等和子集(动态规划)

分割等和子集 Problem: 416. 分割等和子集 思路 我选择使用动态规划的方法来解题。我们需要判断是否可以将数组分割成两个子集,使得这两个子集的和相等。这个问题可以转化为在数组中找到一个子集,使得其和等于数组总和的一半。 解题过程 首先&#xf…

卷积神经网络-猫狗识别实战

课程来自bilibiliMomodel平台 全长只有两个小时,理论部分讲得很粗糙 1 人的视觉和计算机视觉 人的大脑:神经元细胞,轴突发送信号,树突接收信号,互相连接,连接的强度和状态会随着新的经历刺激而变化。 用…

GitHub+Picgo图片上传

Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 ——————————————————————————————————————————…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法:直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣(LeetCode) 题目描述 算法原理 提示:最优解和贪心解唯一可能不同…

Java IO流(详解)

目录 1.概述 2.File文件类 2.1 文件的创建操作 2.2 文件的查找操作 3. File里面一些其他方法 3.1 经典案例 4. IO流 4.1 概念 4.2 IO分类 4.3 字节输出流 4.4 字节输入流 4.5 案例 4.6 字符输出流 4.7 字符输入流 4.8 案例 4.9 处理流--缓冲流 4.10 对象流: 1.…

IP地址定位与智慧城市和智能交通

智慧城市和智能交通是现代城市发展的关键领域,通过先进技术提升城市管理和居民生活质量。IP地址定位在交通监控、智能路灯管理等方面发挥了重要作用,本文将深入探讨其技术实现及应用。 交通监控与优化 通过IP地址连接交通传感器和摄像头,可…

useState函数

seState是一个react Hook(函数),它允许我们像组件添加一个状态变量,从而控制影响组件的渲染结果 数据驱动试图 本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会随着变化(数据驱动试图) 使用 修改状态 注意&am…

H5 Svg 半圆圆环占比图

效果图 主逻辑 /* 虚线长度 */ stroke-dasharray /* 偏移 */ stroke-dashoffset 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&qu…

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware

目录 1&#xff0c;applyMiddleware 原理2&#xff0c;实现2.1&#xff0c;applyMiddleware2.1.1&#xff0c;compose 方法2.1.2&#xff0c;applyMiddleware 2.2&#xff0c;修改 createStore 接上篇文章&#xff1a;Redux中间件介绍。 1&#xff0c;applyMiddleware 原理 R…

数据融合工具(10)线重叠检查修复

一、需求背景 先明确一下“线重叠”的定义。 ArcGIS拓扑工具集中的拓扑规则&#xff1a; 不能自重叠&#xff08;线&#xff09; —线要素不得与自身重叠。这些线要素可以交叉或接触但不得有重合的线段。此规则适用于街道等线段可能接触闭合线的要素&#xff0c;但同一街道不得…

深入探讨极限编程(XP):技术实践与频繁发布的艺术

目录 前言1. 极限编程的核心原则1.1 沟通1.2 简单1.3 反馈1.4 勇气1.5 尊重 2. 关键实践2.1 结对编程2.1.1 提高代码质量2.1.2 促进知识共享2.1.3 增强团队协作 2.2 测试驱动开发&#xff08;TDD&#xff09;2.2.1 提升代码可靠性2.2.2 提高代码可维护性2.2.3 鼓励良好设计 2.3…

判断点与圆的位置关系(c++)

可以通过创建两个类来解决问题 &#xff1a; 代码&#xff1a; #include<iostream> using namespace std;class Point { public:void setX(int x){m_X x;}int getX(){return m_X;}void setY(int y){m_Y y;}int getY(){return m_Y;}private:int m_X;int m_Y;};class C…

【系统架构设计师】十一、系统架构设计(中间件|典型应用架构)

目录 九、中间件 9.1 基础概念 9.2 中间件分类 十、典型应用架构 10.1 J2EE和四层结构 10.2 JSPServletJavaBeanDAO 10.3 .NET和J2EE之争 往期推荐 历年真题练习 九、中间件 之前总提到中间件&#xff0c;那么中间件到底是什么&#xff1f;在系统架构中又扮演者什么角…

Spring与设计模式实战之策略模式

Spring与设计模式实战之策略模式 引言 在现代软件开发中&#xff0c;设计模式是解决常见设计问题的有效工具。它们提供了经过验证的解决方案&#xff0c;帮助开发人员构建灵活、可扩展和可维护的系统。本文将探讨策略模式在Spring框架中的应用&#xff0c;并通过实际例子展示…

C++ | Leetcode C++题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m matrix.size(), n matrix[0].size();int x 0, y n - 1;while (x < m && y > 0) {if (matrix[x][y] targ…

LabVIEW异步和同步通信详细分析及比较

1. 基本原理 异步通信&#xff1a; 原理&#xff1a;异步通信&#xff08;Asynchronous Communication&#xff09;是一种数据传输方式&#xff0c;其中数据发送和接收操作在独立的时间进行&#xff0c;不需要在特定时刻对齐。发送方在任何时刻可以发送数据&#xff0c;而接收…

AI自动生成PPT哪个软件好?高效制作PPT优选这4个

7.15初伏的到来&#xff0c;也宣告三伏天的酷热正式拉开序幕~在这个传统的节气里&#xff0c;人们以各种方式避暑纳凉&#xff0c;享受夏日的悠闲时光。 而除了传统的避暑活动&#xff0c;我们还可以用一种新颖的方式记录和分享这份夏日的清凉——那就是通过PPT的方式将这一传…