【问题标题】:How to tell if a SQL Database has QUERY_STORE enabled?如何判断 SQL 数据库是否启用了 QUERY_STORE?
【发布时间】:2016-02-27 10:13:09
【问题描述】:

如何判断 Azure SQL 数据库是否打开了QUERY_STORE?

您可以使用以下命令启用它:

ALTER DATABASE <database_name> SET QUERY_STORE = ON;

我认为检查数据库应该很简单,但我没有找到诀窍。

仅供参考,我在已启用它的数据库上尝试了此命令,但该命令仅返回 null:

SELECT DATABASEPROPERTYEX ('<database_name>', 'QUERY_STORE')

【问题讨论】:

    标签: sql-server azure azure-sql-database sql-query-store


    【解决方案1】:

    此 DMV sys.database_query_store_options 应该允许您确定 QUERY_STORE 是否已启用:

    SELECT  desired_state_desc ,
            actual_state_desc ,
            readonly_reason, 
            current_storage_size_mb , 
            max_storage_size_mb ,
            max_plans_per_query 
    FROM    sys.database_query_store_options ;
    

    Actual_state_Desc 状态的描述:

    关闭 (0)

    -未启用

    READ_ONLY (1)

    即使用户指定了读写,查询存储也可能以只读模式运行。例如,如果数据库处于只读模式或查询存储大小超出配额,则可能会发生这种情况

    READ_WRITE (2)

    查询存储已开启,它正在捕获所有查询

    错误(3)

    在极少数情况下,Query Store 会因为内部错误而最终处于 ERROR 状态。在内存损坏的情况下,可以通过使用 ALTER DATABASE SET QUERY_STORE 语句显式请求 READ_WRITE 模式来恢复查询存储。如果磁盘损坏,必须在明确请求 READ_WRITE 模式之前清除数据。

    【讨论】:

    • 谢谢!你知道desired_state_desc和actual_state_desc有什么区别吗?是否存在两列会被不同值卡住的情况? (例如,我们说我们要启用 QUERY_STORE,但由于某种原因数据库无法满足请求)
    • 不客气——#SOReadyToHelp。我唯一能找到的关于实际与期望的内容如下,参考列actual_state(与actual_state_desc相关):“在某些情况下,即使读取,查询存储也可能以只读模式运行-write 由用户指定。例如,如果数据库处于只读模式或查询存储大小超出配额,则可能发生这种情况。" MSDN Link
    • 模型数据库除外。我觉得很奇怪你可以在模型中启用 QS 并且它可以工作。 IOW 新数据库将在启用 QS 的情况下自动创建,并在模型的 sys.databases 视图中显示为已启用,但是 sys.query_store_options 不返回模型行,
    【解决方案2】:

    David 的回答显示是否为当前数据库启用了查询存储 - 因此您需要遍历它们。

    此查询显示是否为所有数据库启用了查询存储(但不显示任何详细信息)。

    SELECT 
        d.name,
        d.is_query_store_on
    FROM sys.databases AS d 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多