SQL Server - Хто-небудь використовує SUMA, прапор трас 8048 або прапор трас 8015?


21

Нещодавно включений запуск Trace Flag 8048 для запуску SQL Server для вирішення серйозних проблем із суперечкою відключення в системі SQL Server 2008 R2.

Цікаво почути від інших, хто знайшов випадки використання, коли значення продуктивності передається прапором 8048 сліду (сприяє стратегії надання пам’яті запитів від вузла NUMA до ядра), прапор трасування 8015 (SQL Server ігнорує фізичну NUMA) або SUMA ( достатньо рівномірний доступ до пам'яті, опція BIOS на деяких машинах NUMA).

Слідовий прапор 8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus -presented-per-numa-node-may-need-trace-flag-8048.aspx

Прапор сліду 8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx

Прослідкуйте детальну інформацію про завантаженість системи, зібрані показники з проблемної системи та зібрані показники з системи після втручання.

Слід трас 8048 був "виправленням", але чи було це найкращим виправленням? Чи вдалося б ігнорувати SQL Server фізичну NUMA через прапор 8015 сліду? Що з налаштування BIOS для перемежування пам’яті, залишаючи сервер з поведінкою SUMA, що імітує SMP, замість поведінки NUMA?

Мир! tw: @sql_handle


Про систему: - 4-хекс. Ядро Xeon E7540 при 2,00 ГГц, гіперточена - 128 ГБ оперативної пам’яті - WS2008R2 - MSSQL 2008 R2 SP2 - maxdop 6


Про навантаження: - 1000 тисяч пакетних звітів, запланованих / в черзі, керованих з двох серверів додатків звітів. - 3 різновиди пакетів: щодня, щотижня, щомісяця - Усі підключення серверів додатків звітів до SQL Server здійснюються як єдиний обліковий запис сервісу - Максимальна сумісність звіту = 90


Основні висновки щодо проблемної системи: - від Perfmon, 15-секундні інтервали - - Система залишається зайнятою на 95% -100% процесора - - пошук сторінок буфера SQL Server <10000 в секунду

  • З ДМВ на очікування та закрутки, інтервали 5 хвилин
    • Високі офіціанти CMEMTHREAD та час очікування
    • Високі SOS_SUSPEND_QUEUE крутиться та відтворює

Публікація в блозі Боб Дорра в CSS Engineer про траєкторію 8048 вказує, що системи з більш ніж 8 ядрами на вузлі NUMA можуть зіткнутися з подібними симптомами через вузьке місце в наданні пам’яті запитів. Прапор трасування 8048 змінить стратегію на ядро ​​замість вузла per-NUMA.


Втручання

MSSQL було перезапущено з -T8048 на місці. Різниця була очевидною: швидкість пошуку буферної сторінки зросла понад 1 мільйон і зросла до 8 мільйонів в секунду. Проблемне навантаження, яке раніше не могло завершитись за 24 години, завершилося менше ніж за 4 години. Інша партійна навантаження, яка не була в центрі уваги розслідування чи втручання, була подана як частина перевірки коригуючого значення прапора 8048 сліду (і забезпечення того, щоб його небажані побічні ефекти були мінімальними). Цю партію звітів попередньо завершили за 2 години; зі слідом 8048 на місці партії звіту завершено приблизно за 20 хвилин.

Нічні ETL також стикалися з вигодою. Час ETL знизився приблизно з 60 хвилин до 40 хвилин.

Збираючи інформацію з декількох місць, я припускаю, що високий ступінь черги звітів, кількість одночасних звітів більше, ніж кількість апаратних ниток, і єдиний обліковий запис користувача для всіх звітів, що поєднують тиск на один вузол NUMA, поки тиск робочої нитки не призведе до не буде сприйнято наступний запит на вхідне з'єднання для того самого облікового запису користувача, і тоді наступний вузол NUMA отримає деяку кількість з'єднань. Кожен вузол NUMA закінчується великою ймовірністю підкреслити вузьке місце в пам'яті запитів.

Відкривши більше смуг для надання пам’яті запитів, видалено вузьке місце. Але, я не впевнений у витратах. Повідомлення CSS Боба Дорра дає зрозуміти, що є додаткові накладні об'єм пам’яті з прапором 8048. Це накладні витрати в межах однієї сторінки алокатора, керованої пам'яттю сервера MSSQL 2008 R2 max? Якщо так, то, мабуть, у системі буде просто деяка кількість сторінок баз даних у кеш-пулі пулу. Якщо ні, чи слід знизити максимальну пам'ять сервера для розміщення?

Відповіді:


12

Це приголомшливий пост.

Щоб відповісти на ваше остаточне запитання, я б припускав, що ваша відповідь - так.

Однак, я, мабуть, переслідував би м'яку нуму, перш ніж вдаватися до слідів. Я думаю, ти маєш рацію щодо розподілу вузла numa, і це може бути в основі вашої проблеми. Через м'яку нуму ви можете масштабувати запити, залежно від вашого числа вузлів numa (4?) - до 4, якщо це правильне число, а потім присвоювати через ip адресу кожному хосту певний вузол numa, крім того до цього я б відключив гіпер-нарізку. У поєднанні це питання, ймовірно, зменшиться, однак це зробить це ціною меншої кількості планувальників.

На думку окремо, я б розглядав примусову параметризацію - дуже цікавим є той факт, що ваше навантаження приводить ваш центральний процесор настільки високо, і, можливо, варто це вивчити.

Нарешті, у системах з багаточисельними вузлами я, як правило, отримую висновки з наступних запитів, що скидаються до таблиці кожні N секунд. Здійснює цікавий аналіз, коли впроваджуються зміни завантаженості чи прапорці слідів:

SELECT getdate() as poll_time, node_id, node_state_desc, memory_node_id, online_scheduler_count, active_worker_count, avg_load_balance, idle_scheduler_count
FROM sys.dm_os_nodes WITH (NOLOCK) 
WHERE node_state_desc <> N'ONLINE DAC'

і

SELECT top 10 getdate() as sample_poll, wait_type, count (*)
FROM sys.dm_os_waiting_tasks
WHERE [wait_type] NOT IN
('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK','SLEEP_SYSTEMTASK',
'SQLTRACE_BUFFER_FLUSH','WAITFOR', 'BROKER_TASK_STOP',
'BROKER_RECEIVE_WAITFOR', 'OLEDB','CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT' ) 
GROUP BY wait_type
ORDER BY COUNT (*) DESC

Дякуємо, що згадали про sys.dm_os_nodes та sys.dm_os_waiting_tasks. Я записую ряд збережених процедур, щоб визначити активність системи: спочатку слід трохи оптимізувати базовий рівень, а потім слідкувати за варіаціями. Зараз відбувається зйомка очікувань і закруток, наступні гранти пам’яті (включаючи доп на грант пам’яті)… наступні окремі офіціанти та вузли, як ви обговорювали…, то, можливо, на пам’ятники та лічильники кеш-пам'яті…
sql_handle

1
Ще один цікавий лічильник, на який слід звернути увагу, є в perfmon: SQLServer: Buffer Node :. Лічильниками цієї родини, що цікавлять, є іноземні сторінки, безкоштовні сторінки, тривалість життя сторінок, загальна кількість сторінок, цільові сторінки та викрадені сторінки. Я здогадуюсь, що перед тим, як реалізувати прапор трассингу, у вас була дуже велика кількість іноземних сторінок - чи увімкнено TF 834? Якщо це так, я виявив, що він не розподіляє пам'ять для кожного вузла numa врівноваженим чином, що призводить до дуже великої кількості дорогих віддалених пошуку пам'яті вузла numa. Система, в якій я мав цю проблему, містила на той час 1 ТБ оперативної пам’яті.
Джеремі Лоуелл

хороші моменти. Я дивився показники вузла буферного вузла. Найцікавішим було те, що спочатку вузол 00 не мав сторонніх сторінок, тоді як інші вузли мали велику кількість. Я думаю, що це було пов’язано з тим, що наш ETL виконував буферну рампу з достатньо низьким числом потоків, щоб повністю вміститися на буферний вузол / вузол NUMA 00. У нас не включений прапор слідів 834, але незабаром розпочнемо тестування. Наше тестування навантаження на Linux Oracle 11gR2 показало велику користь для великих сторінок пам'яті, я думаю, що ми побачимо і посилення в Windows з SQL Server.
sql_handle

@Mike Soft NUMA vs TF 8048. Я думаю, що м'який NUMA дозволив би мені створити "вузли пам'яті" в межах NUMA-вузлів. Тож якби я створив м'яку NUMA для кожного ядра, було б (можливо) 24 смуги для запитів на отримання запитів на пам'ять. Але, можливо, також 24 вузли пам'яті? Я б трохи переживав про накладні витрати в управлінні 24 вузлами пам'яті з кожним ядром, що робить «іноземні» посилання на сторінку кожного разу, коли він перетинає м'яку межу NUMA, і справді зарубіжними посиланнями, коли він переходить межу для посилання на сторінку, яка є різною. м'яка NUMA і тверда NUMA. Я подумаю і побачу, чи зможу я щось помітити.
sql_handle
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.