Запросы WMI SQLSERVERAGENT_SQLAgentJobs не возвращают данные о некоторых экземплярах группы доступности SQL 2016

Агент SQL Server имеет объекты производительности и счетчики для мониторинга заданий. Используя приложение Windows Performance Monitor, я всегда могу видеть данные:

перфмон

Но когда я пытаюсь использовать gwmi Win32_PerfFormattedData_SQLSERVERAGENT_SQLAgentJobs в PowerShell на некоторых серверах, экземпляры не возвращаются. Те же результаты при тестировании с помощью 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

Также обратите внимание, что эти счетчики недоступны в системе . .dm_os_performance_counters.


person Greg Bray    schedule 04.08.2016    source источник


Ответы (3)


Я считаю, что проблема может быть связана с авторизацией удаленных пользователей и авторизацией Powershell на этих серверах.

Убедитесь, что вы ведете журнал, используя того же пользователя SQL_AGENT по умолчанию, и проверьте, имеет ли этот пользователь требуемый уровень авторизации, как определено в политиках Windows и/или политиках безопасности SQL.

Удачи.

person David BS    schedule 23.05.2017
comment
Интересно... Надо посмотреть, изменилось ли там что-нибудь. - person Greg Bray; 23.05.2017

Это должно быть довольно просто, основываясь на руководстве здесь

По сути, если вы хотите сделать запрос с помощью 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 и может быть опущено. Наконец, большинство командлетов позволяют опускать имена общих параметров. При использовании командлета Get-WmiObject, если для первого параметра не указано имя, Windows PowerShell рассматривает его как параметр класса. Это означает, что последнюю команду можно было ввести, набрав:

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. Например, если вы хотите отобразить данные о доступной памяти, введите:

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

"

person Community    schedule 22.05.2017
comment
Вопрос был не в том, как выполнить запрос WMI, а в том, почему нет результатов. - person Greg Bray; 23.05.2017

Итак, после второго перезапуска сервера запросы WMI теперь работают. Я считаю, что обновления CU и SP могут включать изменения в поставщике WMI, который не обновляется до перезапуска системы. В обновлениях иногда говорится, что они не требуют перезагрузки, но если запросы WMI перестают работать после обновления, перезапуск сервера может решить проблему.

person Greg Bray    schedule 23.05.2017