Get-SqlAssessmentItem
获取可用于所选 SQL Server 对象的 SQL 评估最佳做法检查。
语法
Get-SqlAssessmentItem
[-Check <String[]>]
[[-InputObject] <PSObject>]
[-Configuration <PSObject>]
[-MinSeverity <SeverityLevel>]
[-FlattenOutput]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
说明
Get-SqlAssessmentItem 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 的输出用作 Invoke-SqlAssessment cmdlet 的 -Check 参数。
可以使用 -Configuration 参数应用自定义配置。
Github上提供了自定义示例
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 登录。 示例 13 显示了交互式登录过程和订阅选择。
注意。 可以使用在 PowerShell 会话之间保留的 Azure 帐户连接,即在一个会话中调用 Connect-AzAccount,稍后省略此命令。 但是,当前版本的 SQL 评估 cmdlet 需要在此示例中显式导入 Az.ResourceGraph 模块:Import-Module Az.ResourceGraph
示例
示例 1:获取本地默认实例的检查
PS:> Get-SqlInstance -ServerInstance 'localhost' | Get-SqlAssessmentItem
Target: [LOCAL]
ID ON Name Origin
-- -- ---- ------
TF1204 True TF 1204 returns deadlock information Microsoft Ruleset 0.1.202
BlackboxTrace True Blackbox trace is configured and running Microsoft Ruleset 0.1.202
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
...
此示例获取可用于当前计算机上运行的 SQL Server 的默认实例的所有检查。
示例 2:使用 Get-Item cmdlet 获取检查
PS:> Get-Item SQLSERVER:\SQL\localhost\default | Get-SqlAssessmentItem
Target: [LOCAL]
ID ON Name Origin
-- -- ---- ------
TF1204 True TF 1204 returns deadlock information Microsoft Ruleset 0.1.202
BlackboxTrace True Blackbox trace is configured and running Microsoft Ruleset 0.1.202
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
...
此示例获取可用于当前计算机上运行的 SQL Server 的默认实例的所有检查。
示例 3:获取包含目标对象路径的检查
PS:> Get-SqlAssessmentItem SQLSERVER:\SQL\localhost\default
Target: [LOCAL]
ID ON Name Origin
-- -- ---- ------
TF1204 True TF 1204 returns deadlock information Microsoft Ruleset 0.1.202
BlackboxTrace True Blackbox trace is configured and running Microsoft Ruleset 0.1.202
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
...
此示例获取可用于当前计算机上运行的 SQL Server 的默认实例的所有检查。
示例 4:使用应用的自定义配置获取检查
PS:> Get-SqlDatabase master -ServerInstance . |
Get-SqlAssessmentItem -Configuration C:\rulesetA.json, D:\rulesetB.json
Target: [LOCAL]
ID ON Name Origin
-- -- ---- ------
TF1204 False TF 1204 returns deadlock information Microsoft Ruleset 0.1.202
BlackboxTrace True Blackbox trace is configured and running Microsoft Ruleset 0.1.202
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth False Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
SomeCustomCheck True Some custom check Ruleset A 1.0
AnotherCustomCheck True Another custom check Ruleset B 1.0
...
此示例获取使用从指定 JSON 文件获取的应用自定义配置的所有可用检查。 请访问 Github 上的 SQL 评估示例文件夹,了解如何进行自定义。
示例 5:获取 localhost 上所有实例的检查
PS:> Get-SqlInstance -ServerInstance localhost | Get-SqlAssessmentItem
Target: [LOCAL]
ID ON Name Origin
-- -- ---- ------
TF1204 True TF 1204 returns deadlock information Microsoft Ruleset 0.1.202
BlackboxTrace True Blackbox trace is configured and running Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
Target: [LOCAL\INSTANCE1]
ID ON Name Origin
-- -- ---- ------
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
...
此示例演示 Get-SqlAssessmentItem cmdlet 通过管道接受一组 SQL Server 实例。
示例 6:获取所有名称以数字结尾的实例的检查
PS:> Get-SqlInstance -ServerInstance localhost | Where { $_.Name -Match '.*\d+' } | Get-SqlAssessmentItem
Target: [LOCAL\INSTANCE1]
ID ON Name Origin
-- -- ---- ------
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
CpuUtil90 True CPU usage over 90% Microsoft Ruleset 0.1.202
...
此示例演示 Get-SqlAssessmentItem cmdlet 通过管道接受一组 SQL Server 实例。 仅处理名称以数字结尾的实例。
示例 7:按路径获取数据库检查
PS:> Get-SqlAssessmentItem SQLSERVER:\SQL\localhost\default\Databases\master
TargetObject: [master]
ID ON Name Origin
-- -- ---- ------
AutoCreateStats True Auto-Create Statistics should be on Microsoft Ruleset 0.1.202
HintsUsageInModules False Hints usage in modules Microsoft Ruleset 0.1.202
FullBackup True Full backup is missed or outdated Microsoft Ruleset 0.1.202
DuplicateIndexes True Duplicate Indexes Microsoft Ruleset 0.1.202
RedundantIndexes True Redundant Indexes Microsoft Ruleset 0.1.202
...
此示例显示 Get-SqlAssessmentItem cmdlet 接受 SQL Server 数据库的路径。
示例 8:获取数据库的严重性检查
PS:> cd SQLSERVER:\SQL\localhost\default\Databases\master
PS:> Get-SqlAssessmentItem -MinSeverity High
此示例显示 Get-SqlAssessmentItem 返回主数据库的严重性较高的可用检查。 它接受当前 PowerShell 提供程序位置作为目标。
示例 9:获取数据库的严重性检查
PS:> $db = Get-SqlDatabase master -ServerInstance localhost
PS:> Get-SqlAssessmentItem $db -MinSeverity High
此示例显示 Get-SqlAssessmentItem 返回主数据库的严重性较高的可用检查。
示例 10:按标记获取检查
PS:> Get-SqlDatabase -ServerInstance . | Get-SqlAssessmentItem -Check Backup
TargetObject: [master]
ID ON Name Origin
-- -- ---- ------
FullBackup True Full backup is missed or outdated Microsoft Ruleset 0.1.202
TargetObject: [msdb]
ID ON Name Origin
-- -- ---- ------
FullBackup True Full backup is missed or outdated Microsoft Ruleset 0.1.202
此示例演示 Get-SqlAssessmentItem cmdlet 返回默认本地 SQL Server 实例上所有数据库的所有与备份相关的检查。
示例 11:以交互方式运行选定的检查
PS:> $serverInstance = Get-SqlInstance -ServerInstance '(local)'
PS:> $checks = Get-SqlAssessmentItem $serverInstance | Select Id, 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:显式指定凭据
PS> $cred = Get-Credential
PowerShell credential request
Enter your credentials.
User: Administrator
Password for user Administrator: ********
PS> $db = Get-SqlDatabase master -ServerInstance 10.0.3.118 -Credential $cred
PS> Get-SqlAssessmentItem $db
TargetObject: [master]
ID ON Name Origin
-- -- ---- ------
AutoCreateStats True Auto-Create Statistics should be on Microsoft Ruleset 0.1.202
FullBackup True Full backup is missed or outdated Microsoft Ruleset 0.1.202
DuplicateIndexes True Duplicate Indexes Microsoft Ruleset 0.1.202
RedundantIndexes True Redundant Indexes Microsoft Ruleset 0.1.202
...
此示例演示如何使用显式指定的凭据获取 SQL 评估检查列表。
示例 13:获取 Azure VM 实例上 SQL Server 的 SQL 评估规则列表
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> Get-SqlAssessmentItem $inst
TargetObject: [ContosoAzureSql]
ID ON Name Origin
-- -- ---- ------
HintsStatistics True Hints are being used Microsoft Ruleset 0.1.202
PlansUseRatio True Amount of single use plans in cache i... Microsoft Ruleset 0.1.202
TempDBFilesAutoGrowth True Some TempDB data files have different... Microsoft Ruleset 0.1.202
AzSqlVmSize True VM size is not memory-optimized Microsoft Ruleset 0.1.202
...
此示例演示如何获取适用于 Azure VM 实例上特定 SQL Server 的规则列表。
活动 Azure 订阅连接启用与 Azure 相关的检查(此示例中的 AzSqlVmSize)。 第一行连接到 Azure 帐户,从 Azure Resource Graph 获取数据。 第二行是可选的。
若要运行这些检查,SQL 评估需要 Az.ResourceGraph 模块。
参数
-Check
一个或多个检查、检查 ID 或标记。
对于每个检查对象,Get-SqlAssessmentItem 返回该检查是否支持输入对象。
对于每个检查 ID,Get-SqlAssessmentItem 返回相应的检查(如果它支持输入对象)。
对于标记,Get-SqlAssessmentItem 返回与其中任何标记的检查。
类型: | String[] |
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。
类型: | 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 |
默认值: | Information |
必需: | 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.Management.Assessment.ICheck