1

SQL Server 代理具有用于监视作业的性能对象和计数器。使用 Windows 性能监视器应用程序,我总是可以看到数据:

性能监视器

但是当我尝试gwmi Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobs在某些服务器上使用 PowerShell 时,没有返回任何实例。使用 WBEMTest 和 wmic.exe 进行测试时的结果相同。

当我运行时,typeperf -qx我看到一堆 \SQLAgent:Jobs(_Total)* 指标,但是如何使用 WMI 查询从Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobsorWin32_PerfRawData_SQLSERVERAGENT_SQLAgentJobs类中获取结果?

更新:嗯...这可能只是查询 SQL Server 2016 CU1 或 SP1 CU2 可用性组实例时的问题,尽管它再次适用于某些服务器但不适用于其他服务器。应用更新后似乎停止工作,即使重新启动系统后,计数器也不会返回任何实例。我还不能在一个独立的实例上复制这个问题,因为它们总是返回预期的数据:

PS C:\> gwmi Win32_PerfRawData_SQLSERVERAGENT_SQLAgentJobs | ft -AutoSize Name,Successfuljobs,FailedJobs,Activejobs

Name      Successfuljobs FailedJobs Activejobs
----      -------------- ---------- ----------
Others                 0          0          0
Alerts                 0          0          0
Schedules             20        106          0
_Total                20        106          0

另请注意,这些计数器在sys.dm_os_performance_counters视图中不可用。

4

3 回答 3

1

我相信问题可能与该服务器上的远程用户授权和 Powershell 授权有关。

检查您是否使用相同的默认 SQL_AGENT 用户进行日志记录,并检查该用户是否具有所需的授权级别,如 Windows 策略和/或 SQL 安全策略中所定义。

祝你好运。

于 2017-05-23T01:25:33.213 回答
0

根据此处的教程,这应该非常简单

基本上,如果您想使用 Powershell 进行查询以获取那些特定的 WMI 类,您需要像这样查询它们:

“如果您已经知道 WMI 类的名称,您可以使用它立即获取信息。例如,通常用于检索计算机信息的 WMI 类之一是 Win32_OperatingSystem。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .

SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

尽管我们显示了所有参数,但命令可以用更简洁的方式表达。连接到本地系统时不需要 ComputerName 参数。我们展示它以演示最一般的情况并提醒您有关参数的信息。命名空间默认为 root/cimv2,也可以省略。最后,大多数 cmdlet 允许您省略常用参数的名称。使用 Get-WmiObject,如果没有为第一个参数指定名称,Windows PowerShell 会将其视为 Class 参数。这意味着可以通过键入以下命令发出最后一个命令:

Get-WmiObject Win32_OperatingSystem

Win32_OperatingSystem 类的属性比此处显示的属性多得多。您可以使用 Get-Member 查看所有属性。WMI 类的属性像其他对象属性一样自动可用:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property

   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

"

此外,关于详细检索:

“如果您想要默认不显示的 Win32_OperatingSystem 类中包含的信息,您可以使用 Format cmdlet 显示它。例如,如果您想显示可用内存数据,请键入:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232

笔记

通配符与 Format-Table 中的属性名称一起使用,因此最终的管道元素可以简化为 Format-Table -Property TotalV*,Free* 如果通过键入以下内容将内存数据格式化为列表,则可能更具可读性:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644

"

于 2017-05-22T21:40:12.497 回答
0

因此,在服务器第二次重新启动后,WMI 查询现在似乎正在工作。我相信 CU 和 SP 更新可以包括对 WMI 提供程序的更改,在系统重新启动之前不会更新。更新有时会说它们不需要重新启动,但如果 WMI 查询在更新后停止工作,那么重新启动服务器可能会解决问题。

于 2017-05-23T18:19:03.087 回答