Тут багато чого відбувається, і більшість це досить широке і розпливчасте.
2008R2 RTM вийшов 21 квітня 2010 року. Він повністю не підтримується. Ви хочете визначити пріоритет щодо останнього пакета оновлень, який вийшов близько 3 років тому. Таким чином ви будете охоплені, якщо потрапите на дивну помилку чи щось таке. Перейдіть сюди, щоб зрозуміти, що вам потрібно завантажити.
Оскільки ви додали vCPU (від 1 до 4) і не змінили жодних налаштувань, ваші запити тепер можуть йти паралельно. Я знаю, що це звучить так, що всі вони будуть швидше, але зачекай!
Можливо, ви додали оперативну пам’ять, але ви, можливо, не змінили максимальну пам'ять сервера, щоб ваш сервер міг цим скористатися.
З’ясуйте, що чекає ваш сервер. Проект з відкритим кодом, над яким я працюю, пропонує безкоштовні сценарії, які допоможуть вам виміряти свій SQL Server. Зайдіть сюди, якщо ви хочете спробувати.
Ви хочете схопити sp_BlitzFirst, щоб перевірити статистику очікування вашого сервера. Ви можете запустити його двома способами.
Це покаже вам, що ваш сервер чекає з моменту його запуску.
EXEC dbo.sp_BlitzFirst @SinceStartup = 1;
Це покаже вам, які запити чекають зараз, протягом 30 секундного вікна.
EXEC dbo.sp_BlitzFirst @Seconds = 30, @ExpertMode = 1;
Як тільки ви зрозумієте, на які запити вас чекають (там написано багато матеріалів про статистику очікування), ви можете почати вносити зміни, щоб отримати контроль під контролем.
Якщо ви бачите, як вони чекають CXPACKET
, це означає, що ваші запити йдуть паралельно і, можливо, наточують один одного. Якщо ви натиснете на це, ви, ймовірно, захочете розглянути можливість зіткнення порогу вартості для паралельності до 50, а можливо, скинути MAXDOP до 2.
Після цього кроку, коли ви хочете використовувати щось на кшталт sp_WhoIsActive або sp_BlitzWho (останній знаходиться в репортажі GitHub від попереднього), щоб почати фіксувати плани запитів. Крім статистики очікування, вони є однією з найважливіших речей, яку ви можете подивитися, щоб зрозуміти, що відбувається не так.
Ви також можете ознайомитись із цією статтею Джонатана Кехаяса про лічильники VMWare, щоб ознайомитись із сервером SQL.
Оновлення
Перегляд статистики очікування та хлопця вони дивні. З процесорами напевно щось є. Ваш сервер сидить здебільшого нудно, але коли речі нагріваються, справи стають поганими. Я спробую це легко зламати.
Ви потрапляєте на отруту, чекайте, називається THREADPOOL
. У вас немає тонни цього, але це має сенс, оскільки ваш сервер не дуже активний. Я поясню, чому через хвилину.
Ви дійсно довго середні очікування на SOS_SCHEDULER_YIELD
і CXPACKET
. Ви знаходитесь у вітчизняній машині, тому ви хочете переконатися, що на SQL Server є резервації, або що вікно не надто підписане. Шумний сусід справді може зіпсувати вам день. Ви також хочете переконатися, що сервер / гость VM / хост VM не працює в режимі збалансованого живлення. Це змушує ваші процесори повертатися до зайвих низьких швидкостей, і вони не одразу повертаються до повної швидкості.
Як вони зв’язуються? З 4 процесорами у вас є 512 робочих ниток. Майте на увазі, у вас була однакова кількість з одним процесором, але тепер, коли ваші запити можуть йти паралельно, вони можуть споживати ще багато робочих ниток. У вашому випадку 4 нитки на паралельну гілку паралельного запиту.
Що відбувається паралельно? Швидше за все, все. Пороговий рівень вартості для паралелізму становить 5. Цей номер був зроблений за замовчуванням десь наприкінці 90-х, працюючи на робочому столі, який виглядав приблизно так .
Звичайно, ваше обладнання менше, ніж у більшості ноутбуків, але ви все ще трохи попереду цього.
Коли починається безліч паралельних запитів, у вас закінчуються ці робочі потоки. Коли це трапляється, запити просто сидять навколо, чекаючи, коли теми розпочнуть. Тут також SOS_SCHEDULER_YIELD
надходить запит. Запити відключають процесори та не відновлюються надовго. Я не бачу жодних блокуючих очікувань, тож ви, швидше за все, просто набиті на паралелізм внутрішнього запиту.
Що ти можеш зробити?
- Переконайтесь, що в режимі збалансованої потужності нічого не знаходиться
- Змініть MAXDOP на 2
- Змініть поріг витрат на паралелізм на 50
- Виконайте статтю Джона К., щоб перевірити здоров'я ВМ
- Використовуйте скрипт, покликаний
sp_BlitzIndex
шукати будь-які пропущені запити на індекс.
Для більш ретельного усунення несправностей перегляньте документ, який я написав для Google, щодо розміру обладнання в хмарі.
Сподіваюся, це допомагає!