如何检查模型数据库上的查询存储设置?

Zik*_*ato 6 sql-server smo query-store sql-server-2019

可以在模型数据库上启用查询存储,并确保每个新数据库都具有与模型数据库相同的设置。

缺少 GUI 选项

GUI 中缺少查询存储选项

但可以使用 TSQL 启用它

ALTER DATABASE model
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);
Run Code Online (Sandbox Code Playgroud)

由于没有 GUI,我无法检查那里的默认设置。

再次使用TSQL

USE model;
select * from sys.database_query_store_options;
Run Code Online (Sandbox Code Playgroud)

返回空结果

模型数据库查询存储设置的结果为空

当我创建一个新数据库(使用模型作为模板并查询设置时,它会显示结果)

create database TestQs;
go
use TestQs;
select * from sys.database_query_store_options;
Run Code Online (Sandbox Code Playgroud)

TestQS 数据库的查询存储选项

此外,设置必须保存在某处,因为当我更改查询存储选项时,更改会传播到新数据库

ALTER DATABASE model
SET QUERY_STORE (INTERVAL_LENGTH_MINUTES = 22);
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 SMO 来找到这些选项,但没有成功。

$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server -ArgumentList 'localhost'
$sqlServer.Databases['TestQs'].QueryStoreOptions
Run Code Online (Sandbox Code Playgroud)

数据库 TestQS 返回选项

但对模型数据库进行相同的查询不会产生任何结果

$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server -ArgumentList 'localhost'
$sqlServer.Databases['model'].QueryStoreOptions
Run Code Online (Sandbox Code Playgroud)

数据库模型返回空选项

有没有一种方法可以检查模型数据库上的查询存储设置,而无需创建新数据库并在那里进行检查?

Sea*_*ser 4

有没有一种方法可以检查模型数据库上的查询存储设置,而无需创建新数据库并在那里进行检查?

没有任何支持,不。例如,不应在系统数据库上启用 QDS,工作负载不应在主数据库或模型中运行。我理解这里的观点,即它有助于自动化,尽管我个人不喜欢将事物放入模型(或就此而言的主控)中,并且不会使用该方法,而是使用编程方法,以便配置漂移不会在创建时不会发生(根据变量的不同,创建后可能会发生持续漂移)。尽管如此,我还是了解你的用例和观点。

这对我来说似乎是一个错误。[...] - 埃里克·达林

您没有得到任何返回的原因是因为不应在系统数据库上启用 QDS,因此不会返回任何行集。这不是一个错误,它是这样实现的。

如果您确实希望它起作用,您可以编辑二进制文件以禁用检查,或使用调试器进行热补丁,但我不会调用这些支持的选项。