AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 297794
Accepted
Sylvia
Sylvia
Asked: 2021-08-10 08:45:26 +0800 CST2021-08-10 08:45:26 +0800 CST 2021-08-10 08:45:26 +0800 CST

查询存储 - 提高 max_storage_size_mb(查询存储保留,最大大小)会工作一段时间然后回到 250?

  • 772

我现在做了几次都不成功。在 UI 中,我能够成功地将 Query Store Retention 设置中的查询存储大小从 250 提升到 1000 mb。我进行了更改,关闭数据库属性窗口,重新打开,看起来更改成功,显示 1000 mb。然后当我再次查看它时(可能是第二天左右),它又恢复到 250 mb。

版本为 Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4。

这里会发生什么?

sql-server query-store
  • 3 3 个回答
  • 321 Views

3 个回答

  • Voted
  1. Josh Darnell
    2021-08-10T10:13:29+08:002021-08-10T10:13:29+08:00

    该设置不应自行更改。

    您可以通过设置像这样的扩展事件会话来查看谁或什么在更改它,以及何时更改它:

    CREATE EVENT SESSION [alter_statements] ON SERVER 
    ADD EVENT sqlserver.object_altered
    (
        ACTION(sqlserver.nt_username,sqlserver.server_principal_name)
        WHERE ([object_name]=N'QDSTest')
    )
    ADD TARGET package0.event_file (SET filename=N'alter_statements')
    WITH (STARTUP_STATE=OFF)
    GO
    
    ALTER EVENT SESSION [alter_statements] ON SERVER 
    STATE = START;
    GO
    

    您需要将“QDSTest”替换为您感兴趣的数据库名称。

    有了这个,您应该能够找到与发出ALTER TABLE更改查询存储设置的语句的会话相关联的用户名,这有望有助于追踪谁或什么正在改变它。

    一种可能性是您使用基于模型的方法(如 SQL Server Data Tools dacpac 部署)对此数据库进行了自动部署。如果“模型”以某种方式配置了查询存储,则每个部署都会尝试将设置更改回模型中的设置。

    • 5
  2. Erik Darling
    2021-08-10T10:35:40+08:002021-08-10T10:35:40+08:00

    触发器

    一种替代方法是创建一个触发器来捕获和记录数据,然后在您注意到更改后查看数据。

    首先,你需要一张桌子:

    CREATE TABLE 
        master.dbo.trigger_log
    (
        id int PRIMARY KEY IDENTITY,
        PostTime datetime,
        LoginName sysname,
        CommandText nvarchar(4000)
    );
    

    接下来,您需要一个触发器:

    CREATE OR ALTER TRIGGER [query_store_shenanigans] 
        ON ALL SERVER
        FOR ALTER_DATABASE
    AS
    SET NOCOUNT, XACT_ABORT ON;
    BEGIN
          DECLARE 
              @command nvarchar(4000) = 
                  (
                      SELECT 
                          EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'nvarchar(4000)') 
                  );
    
          IF UPPER(@command) LIKE '%SET QUERY_STORE%'
          BEGIN
          
              INSERT 
                  master.dbo.trigger_log
              (
                  PostTime,
                  LoginName,
                  CommandText
              )
              SELECT
                  PostTime = 
                      x.c.value('(PostTime)[1]', 'datetime'),
                  LoginName = 
                      x.c.value('(LoginName)[1]', 'nvarchar(128)'),
                  CommandText = 
                      @command
              FROM
              (
                  SELECT 
                      event_data = EVENTDATA()
              ) AS e
              CROSS APPLY e.event_data.nodes('/EVENT_INSTANCE') AS x(c);
    
          END
    END;
    GO
    

    还有一个测试日志记录的命令:

    ALTER DATABASE StackOverflow 
        SET QUERY_STORE 
        ( 
            WAIT_STATS_CAPTURE_MODE = ON 
        );
    

    用于查看日志表的查询:

    SELECT 
        tl.* 
    FROM master.dbo.trigger_log AS tl;
    

    以下是在命令上运行一些变体后我在本地得到的结果:

    坚果

    • 5
  3. Best Answer
    Zikato
    2021-08-10T21:45:14+08:002021-08-10T21:45:14+08:00

    我同意 Josh Darnell 的观点,即您应该设置一个扩展的活动会话,但我推荐一个更具体的活动。我最近使用它来对查询存储进行故障排除。

    CREATE EVENT SESSION [QueryStoreSettings] ON SERVER 
    ADD EVENT qds.query_store_db_settings_changed
    (
        ACTION
        (
            sqlserver.client_app_name,
            sqlserver.client_hostname,
            sqlserver.database_name,
            sqlserver.server_instance_name,
            sqlserver.sql_text,
            sqlserver.username
        )
    )
    ADD TARGET package0.event_file(SET filename=N'QueryStoreSettings',max_file_size=(5),max_rollover_files=(10))
    WITH (STARTUP_STATE=OFF)
    GO
    
    ALTER EVENT SESSION [QueryStoreSettings] ON SERVER 
    STATE = START;
    GO
    

    这是我使用 GUI 进行更改时得到的输出 在此处输入图像描述

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve