SQL Server代理有performance objects and counters用于监视作业。使用Windows性能监视器应用程序,我总能看到数据:
但是当我在某些服务器上尝试在PowerShell中使用gwmi Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobs
时,没有返回实例。使用WBEMTest和wmic.exe进行测试时的结果相同。
当我运行typeperf -qx
时,我看到了一堆\ SQLAgent:Jobs(_Total)*指标,但我如何使用WMI查询来获取Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobs
或Win32_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视图中无法使用这些计数器。
答案 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查询在更新后停止工作,则重新启动服务器可能会解决问题。