WMI SQLSERVERAGENT_SQLAgentJobs查询不返回某些SQL 2016可用性组实例上的数据

时间:2016-08-04 20:32:00

标签: wmi sql-agent

SQL Server代理有performance objects and counters用于监视作业。使用Windows性能监视器应用程序,我总能看到数据:

perfmon

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

当我运行typeperf -qx时,我看到了一堆\ SQLAgent:Jobs(_Total)*指标,但我如何使用WMI查询来获取Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobsWin32_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视图中无法使用这些计数器。

3 个答案:

答案 0 :(得分:1)

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

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

祝你好运。

答案 1 :(得分:0)

根据教程here

,这应该非常简单

基本上,如果您想使用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

"

答案 2 :(得分:0)

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