Invoke-SqlAssessment
运行 SQL 评估最佳做法检查所选 SQL Server 对象并返回其结果。
语法
Invoke-SqlAssessment
[-Check <Object[]>]
[[-InputObject] <PSObject>]
[-Configuration <PSObject>]
[-MinSeverity <SeverityLevel>]
[-FlattenOutput]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
说明
Invoke-SqlAssessment cmdlet 为每个输入对象运行评估,并返回应用于指定对象的最佳做法建议列表。 由你遵循给定的建议。 有关详细信息,请参阅 SQL 评估 API 概述。
此 cmdlet 接受以下输入类型:
- Microsoft.SqlServer.Management.Smo.Server
- Microsoft.SqlServer.Management.Smo.Database
- Microsoft.SqlServer.Management.Smo.AvailabilityGroup
- Microsoft.SqlServer.Management.Smo.FileGroup
- Microsoft.SqlServer.Management.Smo.RegisteredServers.RegisteredServer
- 包含上述类型的任何对象的路径的字符串
- 对象的集合
可以使用 sqlServer cmdlet(如 Get-SqlInstance 和 Get-SqlDatabase)或基本的 PowerShell cmdlet(如 Get-Item 和 Get-ChildItem)获取输入对象。 此外,该 cmdlet 支持 SQL Server PowerShell 提供程序,因此它可以从其路径获取对象。 可以显式传递路径,否则将使用当前路径。
所选对象的检查的可用性因 SQL Server 版本、平台和对象类型而异。 此外,还有一些检查以特定数据库为目标,例如 tempdb
或 master
。 还可以使用参数 -MinSeverity 和 -Check 按标记、名称和严重性筛选检查。
可以使用 Get-SqlAssessmentItem cmdlet 获取适用于给定 SQL Server 对象的检查列表。
该 cmdlet 仅运行适用于输入对象的检查。 例如,即使在 -Check 列表中指定,也不会对 SQL Server 实例或可用性组运行数据库检查。
可以使用 -Configuration 参数应用自定义配置。
Github上提供了自定义示例
注意。 在第一个公共预览版中,Invoke-SqlAssessment 分别返回了包含 Check 的 ID 和 DisplayName 的属性 CheckId 和 CheckName 的 AssessmentNote 对象。 在第二个公共预览版中,这两个属性被替换为提供更多数据的单个 Check 属性。 假设$note是 Invoke-SqlAssessment返回的对象,则可以以 $note.Check.Id 而不是 $note 的形式访问检查的 ID。CheckId 或检查描述为 $note。Check.Description。 可以使用 -FlattenOutput 参数通过 CheckId 和 CheckName 获取上一格式的结果。 此参数还有助于保持与某些 cmdlet(如 Write-SqlTableData)的兼容性。 有关更多详细信息,请参阅示例 12-14。
Invoke-SqlAssessment cmdlet 的输出是每个给定 SQL Server 对象的违反最佳做法的列表。 使用 Description 属性了解最佳做法,并 Message 属性来了解如何解决。 此外,每个检查结果都包含指向联机文档的链接,这将帮助你更好地找出问题。
Azure VM 上的 SQL Server 支持
使用 SQL 评估 cmdlet,不仅可以将 Azure VM 上的 SQL Server 实例评估为本地 SQL Server,还可以使用特定于 Azure VM 上的 SQL Server 的规则(使用有关虚拟机配置的信息的规则)。 例如,AzSqlVmSize 规则检查托管 Azure VM 上的 SQL Server 实例的 VM 是否具有建议的大小。
若要使用此类规则,请使用 Azure PowerShell 模块 连接到 Azure,并确保已安装 Az.ResourceGraph 模块。
在针对 Azure VM 实例上的 SQL Server 调用 SQL 评估之前,使用 Azure PowerShell 登录。 示例 16 显示了交互式登录过程和订阅选择。
注意。 可以使用在 PowerShell 会话之间保留的 Azure 帐户连接,即在一个会话中调用 Connect-AzAccount,稍后省略此命令。 但是,当前版本的 SQL 评估 cmdlet 需要在此示例中显式导入 Az.ResourceGraph 模块:Import-Module Az.ResourceGraph
示例
示例 1:调用本地默认实例的评估
PS:> Get-SqlInstance -ServerInstance localhost | Invoke-SqlAssessment
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
...
此示例演示如何获取当前计算机上运行的默认 SQL Server 实例的所有最佳做法建议。
示例 2:使用 PSProvider cmdlet 调用评估
PS:> Get-Item SQLSERVER:\SQL\localhost\default | Invoke-SqlAssessment
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
...
此示例演示如何获取 SQL Server 默认实例的所有最佳做法建议。
示例 3:使用 PS 提供程序路径调用评估
PS:> Invoke-SqlAssessment SQLSERVER:\SQL\localhost\default
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
...
此示例演示如何获取 SQL Server 默认实例的所有最佳做法建议。
示例 4:使用自定义配置调用评估
PS:> Get-SqlInstance -ServerInstance '(local)' | Invoke-SqlAssessment -Configuration C:\profileA.json, C:\profileB.json
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi A custom rule violation detected. CustomRuleA Profile A 1.0
...
此示例演示如何应用自定义配置以获取修改后的一组最佳做法建议。 JSON 文件中描述了自定义配置。 自定义规则集 profileA.json 和 profileB.json 禁用了一些检查,并引入了一些新规则集。 来自 profileA.json 的新检查之一检测到 SQL Server 实例的当前配置出现问题。 请访问 Github 上的 SQL 评估示例文件夹,了解如何进行自定义。
示例 5:对所有实例调用评估
PS:> dir SQLSERVER:\SQL\localhost | Invoke-SqlAssessment
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
TargetPath : Server[@Name='LOCAL\INSTANCE1']
Sev. Message Check ID Origin
---- ------- -------- ------
Medi Product version 14.0.1000 is not the latest available. Keep your LatestCU Microsoft Ruleset 0.1.202
your SQL Server up to date and install Service Packs and
Cumulative Updates as they are released.
...
此示例演示 Invoke-SqlAssessment cmdlet 通过管道接受一组 SQL Server 实例。
示例 6:对筛选集 ot traget 运行评估
PS:> Get-SqlInstance -ServerInstance . | Where { $_.Name -Match '.*\d+' } | Invoke-SqlAssessment
TargetPath : Server[@Name='LOCAL\INSTANCE1']
Sev. Message Check ID Origin
---- ------- -------- ------
Medi Product version 14.0.1000 is not the latest available. Keep your LatestCU Microsoft Ruleset 0.1.202
your SQL Server up to date and install Service Packs and
Cumulative Updates as they are released.
...
此示例演示 Invoke-SqlAssessment cmdlet 通过管道接受一组 SQL Server 实例。 该集使用标准 PowerShell Where-Object cmdlet 进行筛选。
示例 7:按名称调用数据库的评估
PS:> Get-SqlDatabase master -ServerInstance localhost | Invoke-SqlAssessment -Verbose
VERBOSE: Base ruleset version: 0.2.
VERBOSE: No recommendations for [master].
此示例显示 Invoke-SqlAssessment cmdlet 接受数据库名称。 在这种情况下,找不到问题。
示例 8:按路径调用数据库的评估
PS:> Invoke-SqlAssessment SQLSERVER:\SQL\localhost\default\Databases\master -Verbose
VERBOSE: Base ruleset version: 0.2.
VERBOSE: No recommendations for [master].
此示例演示接受 SQL Server 数据库路径的 Invoke-SqlAssessment cmdlet。
示例 9:检测数据库的高问题
PS:> cd SQLSERVER:\SQL\localhost\default\Databases\master
PS:> Invoke-SqlAssessment -MinSeverity High
VERBOSE: Base ruleset version: 0.2.
VERBOSE: No recommendations for [master].
此示例显示 Invoke-SqlAssessment cmdlet 评估当前位置。 仅报告高问题。
示例 10:按标记运行选中的检查
PS:> Get-SqlInstance -ServerInstance . | Invoke-SqlAssessment -Check Backup -Verbose
VERBOSE: Base ruleset version: 0.2.
VERBOSE: No recommendations for [LOCAL].
此示例演示 Invoke-SqlAssessment cmdlet,运行本地服务器上每个 SQL Server 实例的所有与备份相关的检查。
示例 11:以交互方式运行选定的检查
PS:> $serverInstance = Get-SqlInstance -ServerInstance '(local)'
PS:> $checks = Get-SqlAssessmentItem $serverInstance | Select Name, Description | Out-GridView -PassThru
PS:> Invoke-SqlAssessment $serverInstance -Check $checks
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
本示例的第二行显示获取对$serverInstance的检查,并交互选择其中一些。 所选项存储在数组变量中,然后用作 Invoke-SqlAssessment cmdlet 的输入。 仅在评估过程中运行已选取的检查。
示例 12:-FlattenOutput 参数的效果
PS> $inst = Get-SqlInstance -ServerInstance .
PS> Invoke-SqlAssessment $inst -FlattenOutput | Select -First 1 | Get-Member
TypeName: Microsoft.SqlServer.Management.Assessment.Cmdlets.AssessmentNoteFlat
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
CheckId Property string CheckId {get;}
CheckName Property string CheckName {get;}
HelpLink Property string HelpLink {get;}
Message Property string Message {get;}
RulesetName Property string RulesetName {get;}
RulesetVersion Property string RulesetVersion {get;}
Severity Property string Severity {get;}
TargetPath Property string TargetPath {get;}
TargetType Property string TargetType {get;}
PS> Invoke-SqlAssessment $inst | Select -First 1 | Get-Member
TypeName: Microsoft.SqlServer.Management.Assessment.Cmdlets.AssessmentNote
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Check Property Microsoft.SqlServer.Management.Assessment.Checks.ICheck Check {get;}
HelpLink Property string HelpLink {get;}
Message Property string Message {get;}
Severity Property Microsoft.SqlServer.Management.Assessment.SeverityLevel Severity {get;}
TargetPath Property string TargetPath {get;}
TargetType Property string TargetType {get;}
PS> (Invoke-SqlAssessment $inst | Select -First 1).Check | Get-Member
TypeName: Microsoft.SqlServer.Management.Assessment.Checks.Check
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Condition Property Microsoft.SqlServer.Management.Assessment....
Description Property string Description {get;set;}
DisplayName Property string DisplayName {get;set;}
Enabled Property bool Enabled {get;set;}
HelpLink Property string HelpLink {get;set;}
Id Property string Id {get;set;}
Level Property Microsoft.SqlServer.Management.Assessment....
Message Property string Message {get;set;}
OriginName Property string OriginName {get;set;}
OriginVersion Property version OriginVersion {get;set;}
Parameters Property System.Collections.Generic.IDictionary[str...
Probes Property System.Collections.Generic.List[Microsoft....
Tags Property System.Collections.Generic.HashSet[string]...
Target Property Microsoft.SqlServer.Management.Assessment....
此示例显示了使用或不带 -FlattenOutput 参数返回的对象之间的差异。 该参数将巨大的复杂 Check 对象替换为两个字符串属性 CheckId 和 CheckName。 这对于序列化目的非常有用(请参阅下一个示例)。
第一个命令显示具有字符串类型的所有属性的简单对象。
第二个命令显示另一个具有两个非字符串属性的对象:检查和严重性。
第三个命令显示可通过 Check 属性访问的丰富数据集。
示例 13:再次运行失败的检查
PS> $inst = Get-SqlInstance -ServerInstance .
PS> $results = Invoke-SqlAssessment $inst
PS> $results
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
PS> $results[1].Check.Description
This check detects deprecated or discontinued features used on target SQL Server instance. Deprecated features may be
removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.
PS> Invoke-SqlAssessment $inst -Check $results[1].Check
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
PS> Invoke-SqlAssessment $inst -Check ($results).Check
TargetPath : Server[@Name='LOCAL']
Sev. Message Check ID Origin
---- ------- -------- ------
Info Enable trace flag 834 to use large-page allocations to improve TF834 Microsoft Ruleset 0.1.202
analytical and data warehousing workloads.
Low Detected deprecated or discontinued feature uses: String literals DeprecatedFeatures Microsoft Ruleset 0.1.202
as column aliases, syscolumns, sysusers, SET FMTONLY ON, XP_API,
Table hint without WITH, More than two-part column name. We
recommend to replace them with features actual for SQL Server
version 14.0.1000.
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources.
此示例演示如何重复使用使用评估结果返回的 Check。 可以重新运行之前生成的 AssessmentNote 的检查。
示例 14:将评估结果存储到表
PS:> $serverInstance = Get-SqlInstance -ServerInstance '(local)'
PS:> Invoke-SqlAssessment $serverInstance -FlattenOutput |
Write-SqlTableData -ServerInstance localhost -DatabaseName SqlAssessment -SchemaName Assessment -TableName Results -Force
此示例的第二行演示如何将 -FlattenOutput 参数与 Write-SqlTableData cmdlet 配合使用,将评估结果存储到 SQL 数据库。
示例 15:显式指定凭据
PS> $cred = Get-Credential
PowerShell credential request
Enter your credentials.
User: Administrator
Password for user Administrator: ********
PS> $inst = Get-SqlInstance -ServerInstance 10.0.3.118 -Credential $cred
PS> Invoke-SqlAssessment $inst
TargetPath : Server[@Name='ContosSQL']
Sev. Message Check ID Origin
---- ------- -------- ------
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources
此示例演示如何使用显式指定的凭据调用 SQL 评估。
示例 16:对 Azure VM 实例上的 SQL Server 调用评估
PS> Connect-AzAccount
PS> Set-Subscription My-Pay-As-You-Go
PS> $cred = Get-Credential
PowerShell credential request
Enter your credentials.
User: Administrator
Password for user Administrator: ********
PS> $inst = Get-SqlInstance -ServerInstance 10.0.3.118 -Credential $cred
PS> Invoke-SqlAssessment $inst
TargetPath : Server[@Name='ContosoAzureSQL']
Sev. Message Check ID Origin
---- ------- -------- ------
Medi Amount of single use plans in cache is high (100%). Consider PlansUseRatio Microsoft Ruleset 0.1.202
enabling the Optimize for ad hoc workloads setting on heavy OLTP
ad-hoc workloads to conserve resources
Info Use memory optimized virtual machine sizes for the best AzSqlVmSize Microsoft Ruleset 0.1.202
performance of SQL Server workloads
此示例演示如何对 Azure VM 实例上的 SQL Server 调用评估。
活动 Azure 订阅连接可在 Azure VM 相关检查(此示例中的 AzSqlVmSize)上启用 SQL Server。 第一行连接到 Azure 帐户,从 Azure Resource Graph 获取数据。 第二行是可选的。
若要运行这些检查,SQL 评估需要 Az.ResourceGraph 模块。
参数
-Check
一个或多个检查、检查 ID 或标记。
对于每个检查对象,Invoke-SqlAssessment 运行该检查是否支持输入对象。
对于每个检查 ID,Invoke-SqlAssessment 运行相应的检查(如果它支持输入对象)。
对于标记,Invoke-SqlAssessment 使用其中任何标记运行检查。
类型: | Object[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Configuration
指定包含自定义配置的文件的路径。 自定义文件将按指定顺序应用于默认配置。 范围仅限于此 cmdlet 调用。
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-FlattenOutput
指示此 cmdlet 生成类型为 Microsoft.SqlServer.Management.Assessment.Cmdlets.AssessmentNoteFlat 的简单对象,而不是 Microsoft.SqlServer.Management.Assessment.Cmdlets.AssessmentNote。
从 Invoke-SqlAssessment 返回的常规 AssessmentNote 包含对其他有用的复杂对象的引用(请参阅示例 12)。 使用 Check 属性,可以获取检查的说明或重复使用检查(请参阅示例 13)。 但某些 cmdlet 不支持复杂属性。 例如,尝试将 AssessmentNote 写入数据库时,Write-SqlTableData 将引发错误。 为了避免这种情况,可以使用 -FlattenOutput 参数将 Check 属性替换为两个简单的字符串:CheckId 和 CheckName(请参阅示例 14)。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定 SQL Server 对象或此类对象的路径。 该 cmdlet 为此对象运行评估。 省略此参数时,当前位置将用作输入对象。 如果当前位置不是受支持的 SQL Server 对象,则 cmdlet 会发出错误信号。
类型: | PSObject |
别名: | Target |
Position: | 10 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-MinSeverity
指定要查找的检查的最低严重性级别。 例如,当 -MinSeverity 高时,将不会返回“低”、“中”或“信息”级别的检查。
类型: | SeverityLevel |
别名: | Severity |
接受的值: | Information, Low, Medium, High |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ProgressAction
确定 PowerShell 如何响应脚本、cmdlet 或提供程序生成的进度更新,例如由 Write-Progress cmdlet 生成的进度栏。 Write-Progress cmdlet 创建显示命令状态的进度栏。
类型: | ActionPreference |
别名: | proga |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
System.String[]
Microsoft.SqlServer.Management.Smo.SqlSmoObject[]
输出
Microsoft.SqlServer.Assessment.Cmdlets.AssessmentNote