Вчера, столкнулся с неожиданной, но весьма неприятной проблемой - mssql съел 100% ЦПУ и не хотел быстро отдавать данные. Просто небольшая заметка как мы нашли и пофиксили этот баг
Вчера, на одном из головных проектов нашей компании, клиент отметил необычайно низкую скорость загрузки страниц на сайте. В ходе иследования, было выявлено, что сервер баз данных MSSQL отъел себе 100% времени процессора, и никак не хотел снижать свои аппетиты.
Был привлечен технический лидер нашей компании, и он указал на одну из возможных причин - кеш запросов разросся до такой степени, что выборка из него занимало большое время, и потребляло приличное количество ресурсов.
После того, как я получил толчок от нашего лидера, Гугль принес мне в клюве результат - http://www.sqlservercentral.com/Forums/Topic1037692-1550-1.aspx#bm1038888
Вкратце, для снижения загрузки процедурного кеша и времени компиляции, необходимо включить встроенную процедуру оптимизации AdHoc Workloads при помощи 2х нижеприведенных процедур:
sp_configure 'show advanced options', 1 go reconfigure go sp_configure 'optimize for ad hoc workloads', 1 go reconfigure go
Что моментально снизило нагрузку на процессор до вполне переносимых 60% процентов и позволило сделать клиента довольным ;).