У меня проблема с производительностью базы данных SQL Server. Я нашел этот инструмент sp_BlitzCache . После выполнения команды я получил следующее утверждение:
У вас есть планы на 92,00%, созданные за последние 24 часа, и 92,00%, созданные за последние 4 часа.
Хотя я обнаружил проблему (используя SQL Server Profiler, я проверил вхождения событий StmtRecompile), я смог найти только несколько запросов полнотекстового поиска, которые часто перестраиваются. Однако полнотекстовые поисковые запросы составляют всего около 5% всех запросов.
Есть ли у вас какие-либо предложения, которые могут вызвать воссоздание оставшихся 87% планов?
У меня есть SQL Server 2012 (версия 11.0.6567.0).
Изменить: я добавил свои счетчики производительности
+---------------------------+--------------------------------+--------------+
| object_name | counter_name | cntr_value |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager | Background writer pages/sec | 0 |
| SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 |
| SQLServer:Buffer Manager | Buffer cache hit ratio base | 28436 |
| SQLServer:Buffer Manager | Checkpoint pages/sec | 8259452 |
| SQLServer:Buffer Manager | Database pages | 4434337 |
| SQLServer:Buffer Manager | Free list stalls/sec | 9 |
| SQLServer:Buffer Manager | Integral Controller Slope | 0 |
| SQLServer:Buffer Manager | Lazy writes/sec | 5608 |
| SQLServer:Buffer Manager | Page life expectancy | 438901 |
| SQLServer:Buffer Manager | Page lookups/sec | 122694703703 |
| SQLServer:Buffer Manager | Page reads/sec | 60994608 |
| SQLServer:Buffer Manager | Page writes/sec | 126076564 |
| SQLServer:Buffer Manager | Readahead pages/sec | 45305420 |
| SQLServer:Buffer Manager | Target pages | 130990080 |
| SQLServer:Buffer Node | Database pages | 4434337 |
| SQLServer:Buffer Node | Page life expectancy | 438901 |
| SQLServer:Buffer Node | Local node page lookups/sec | 0 |
| SQLServer:Buffer Node | Remote node page lookups/sec | 0 |
| SQLServer:Memory Manager | External benefit of memory | 0 |
| SQLServer:Memory Manager | Connection Memory (KB) | 3304 |
| SQLServer:Memory Manager | Database Cache Memory (KB) | 35474784 |
| SQLServer:Memory Manager | Free Memory (KB) | 13229808 |
| SQLServer:Memory Manager | Granted Workspace Memory (KB) | 0 |
| SQLServer:Memory Manager | Lock Memory (KB) | 455928 |
| SQLServer:Memory Manager | Lock Blocks Allocated | 1798154 |
| SQLServer:Memory Manager | Lock Owner Blocks Allocated | 3568588 |
| SQLServer:Memory Manager | Lock Blocks | 10562 |
| SQLServer:Memory Manager | Lock Owner Blocks | 10617 |
| SQLServer:Memory Manager | Maximum Workspace Memory (KB) | 43368000 |
| SQLServer:Memory Manager | Memory Grants Outstanding | 0 |
| SQLServer:Memory Manager | Memory Grants Pending | 0 |
| SQLServer:Memory Manager | Optimizer Memory (KB) | 1400 |
| SQLServer:Memory Manager | Reserved Server Memory (KB) | 0 |
| SQLServer:Memory Manager | SQL Cache Memory (KB) | 229112 |
| SQLServer:Memory Manager | Stolen Server Memory (KB) | 8063232 |
| SQLServer:Memory Manager | Log Pool Memory (KB) | 4192 |
| SQLServer:Memory Manager | Target Server Memory (KB) | 56934400 |
| SQLServer:Memory Manager | Total Server Memory (KB) | 56767824 |
| SQLServer:Memory Node | Database Node Memory (KB) | 35474784 |
| SQLServer:Memory Node | Free Node Memory (KB) | 13229808 |
| SQLServer:Memory Node | Foreign Node Memory (KB) | 0 |
| SQLServer:Memory Node | Stolen Node Memory (KB) | 8063208 |
| SQLServer:Memory Node | Target Node Memory (KB) | 56934376 |
| SQLServer:Memory Node | Total Node Memory (KB) | 56767800 |
+---------------------------+--------------------------------+--------------+
sql-server
sql-server-2012
query-performance
sp-blitzcache
Марчин Тополевский
источник
источник
Ответы:
Этот запрос используется для проверки времени создания плана:
также SP предоставляет некоторые подсказки о том, где начать ваше дальнейшее исследование
Кроме вышеупомянутых подсказок, проверьте, был ли ваш сервер перезапущен.
если ваш сервер не перезагружается, то нижеприведенный подход
Сначала посмотрите, если ваши настройки памяти настроены оптимально. Если это так, вы можете использовать ниже счетчики, чтобы увидеть, если вы сталкиваетесь с давлением памяти
если вы сталкиваетесь с нехваткой памяти, вы можете увидеть и настроить запросы, которые используют больше памяти, или попробуйте добавить больше памяти
Изменения, внесенные в таблицу или представление, на которые ссылается запрос (ALTER TABLE и ALTER VIEW).
Изменения, внесенные в одну процедуру, которая удаляла бы все планы для этой процедуры из кэша (ALTER PROCEDURE).
Изменения любых индексов, используемых планом выполнения
Обновления статистики, используемые планом выполнения, генерируемые либо явно из инструкции, такой как UPDATE STATISTICS, либо генерируемые автоматически.
Удаление индекса, используемого планом выполнения.
вы также можете увидеть этот документ для более подробной информации о планировании кэширования
https://technet.microsoft.com/en-us/library/ee343986(v=sql.100).aspx
источник
Чтобы добавить то, что сказал @TheGameiswar, вы также можете выполнить этот запрос, чтобы увидеть детали планов, которые не получены из кэша.
источник