Как я могу узнать, насколько занят сервер SQL с IO, используя @@ IO_BUSY - PullRequest
1 голос
/ 17 ноября 2009

Я пытаюсь выяснить, насколько занят мой сервер sql 2000 с точки зрения процессора и ввода-вывода с помощью запроса T-SQL.

в настоящее время я использую следующее, чтобы найти использование процессора%:

  DECLARE
  @CPU_BUSY int
  , @IDLE int

  SELECT
  @CPU_BUSY = @@CPU_BUSY
  , @IDLE = @@IDLE

  WAITFOR DELAY '00:00:00:500'

  SELECT
  (@@CPU_BUSY - @CPU_BUSY)/((@@IDLE - @IDLE + @@CPU_BUSY - @CPU_BUSY) *
  1.00) *100 AS CPUBusyPct 

Однако, когда я пытаюсь подобным способом найти IO, я получаю очень низкие значения IO, когда я знаю, что сервер находится под нагрузкой: DECLARE @IO_BUSY int @IDLE int

  SELECT
  @IO_BUSY = @@IO_BUSY
  , @IDLE = @@IDLE

  WAITFOR DELAY '00:00:00:500'

  SELECT
  (@@IO_BUSY - @IO_BUSY)/((@@IDLE - @IDLE + @@IO_BUSY - @IO_BUSY) *
  1.00) *100 AS IOBusyPct

Являются ли эти методы правильными для разумной оценки уровней нагрузки сервера за период времени 500 мс?

Какие-нибудь лучшие предложения?

Я пробовал sp_monitor, но вызывая его каждую 1 секунду, получаю странные результаты, когда% превышает 100

1 Ответ

1 голос
/ 17 ноября 2009

@@ IO_BUSY ... накапливается для всех процессоров, поэтому может превышать фактическое прошедшее время

@@ CPU_BUSY ... накапливается для всех процессоров, поэтому может превышать фактическое истекшее время

Я бы рекомендовал вместо этого использовать счетчики производительности, они намного точнее. Объект процесса для ЦП и SQL Server, объект статистики ожидания для различных ожиданий SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...