Что на самом деле измеряет счетчик Perfmon «Субоптимальные планы / сек»?

13

В SQL Server что измеряет счетчик Perfmon «Статистика рабочей нагрузки группы: субоптимальные планы / сек»?

Это один из счетчиков регулятора ресурсов , поэтому он измеряется в группе рабочей нагрузки (у вас есть, настраиваете ли вы RG или нет).

Я не спрашиваю, что делает хороший план или плохой план, но что конкретно делает эта контрмера, и куда вы идете, чтобы найти точные соответствующие планы? Например, в расширенных событиях я не могу найти ничего, что могло бы соответствовать запросу, запускающему счетчик «Неоптимальные планы / сек».

Брент Озар
источник
1
сейчас я смотрю на экземпляр с 1322 для «неоптимальных планов / сек» и задаюсь вопросом, где искать. Это хороший вопрос, Брент.
Макс Вернон,
Благодарность! Я просто добавил его в sp_BlitzFirst, потому что я никогда не видел его прежде, чем выполнил какую-то работу над Hekaton на этой неделе.
Брент Озар
Интересно, это связано с тем, что время оптимизации уровня плана истекло до получения хорошего плана.
Макс Вернон,
Я думал, что это будет StatementOptmEarlyAbortReason="TimeOut"трудно сказать наверняка! Это не очень хорошо коррелирует со счетчиком perfmon.
Макс Вернон,

Ответы:

6

Этот счетчик отслеживает две вещи:

  1. Тайм-аут
  2. Превышен лимит памяти

Значения можно найти в плане XML, как Макс предложил в комментариях. Я могу подтвердить, что так было по крайней мере с SQL Server 2008.

Слава @Max Вернону и @Joe Obbish.

Описание MSDN BOL Technet Docs не очень полезно.

Шон Галларди
источник
2
Спасибо, Шон. Я просматривал sys.dm_os_performance_countersи искал кэш плана для элементов Timeout, и увидел, что DMV не увеличивается, пока sys.dm_exec_query_statsотображаются недавно использованные запросы на тайм-аут. Возможно, я соберу завтра MCVE, чтобы изучить это. Также следует отметить, что это происходит на одном из наших производственных экземпляров EDW под управлением 2012 Enterprise.
Макс Вернон,