Випадкові божевільні плани поганого виконання в Microsoft SQL Server


1

Привіт разом! Я знаю, що це питання обговорювалося вже декілька разів, але ми стикаємось із шаленою дивною проблемою на нашому новому SQL Server 2014 SP3 зараз, і ми просто не можемо відстати.

Ми перейшли з Oracle на MS SQL Server минулого року. Наш міський голова DB досить великий, доречно. 800 ГБ, великі столи, система PDM. +1000 активних користувачів. 16 ядер, пам'ять 192 ГБ, накопичувач SSD SAN. ESX 6.5

Налаштування в SQL Server: -> Створення автоматичної статистики увімкнено -> оптимізація для спеціальних запитів = вірно -> Увімкнено ізоляцію знімка -> Максимальна паралель = 4 -> Поріг 50 -> Оновлення статистики асинхронізовано в TempDB, як правило, увімкнено в наших основних БД.

Як би там не було, у нас є деякі запити, які обробляються надзвичайно погано. Все призводить до того, що оптимізатор сервера SQl створює план виконання, вважає його нормальним, але при виконанні він робить внутрішнє з'єднання (або кратні) з Мільйонами замість очікуваних 1-2 рядків. І з курсів мільйони логічних читань. І я не можу відстати від того, що відбувається в цьому. Ці заяви пройшли тоді хвилин.

Таким чином, ми маємо вже 3 бази даних. Все та ж версія та обладнання, Prod Test та Dev Environment. Мої тести можна зробити досить легко. Всі dbs налаштовані однаково і показують однакову поведінку, але за різними запитами. Скажімо, колись тест-середовище робить те саме твердження багаторазовим за 47 секунд, то прод-біт за секунду. Інші займають секунди в Prod, встановлюються в Test. Що, до біса? Я завжди повторюю твердження у кілька разів, щоб забезпечити кешування.

Гарний випадок

Поганий випадок

1s проти 47s. Обидва ці БД мають однаковий екземпляр SQL.

Будь-які ідеї, що могло бути тут не так? Як виправити окремі плани виконання? Як може статися, що сервер sql дізнається з цього надзвичайно поганого твердження і виправить це наступного разу, коли він запуститься?

Дякуємо за вашу допомогу та ідеї.


1
Ви намагалися використовувати сучасний синтаксис приєднання замість старої шкільної Oracle?
Сет

1
Розгляньте натомість адміністраторів баз даних . Супер Користувач насправді не найкраще місце для цього питання. Ви можете позначити власне запитання, щоб подати запит на переміщення.
Боб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.