SQL Server tempdb на диску RAM?


11

Наша база даних програм постачальників дуже інтенсивна в TempDB.

Сервер є віртуальним (VMWare) з 40 ядрами та 768 ГБ оперативної пам’яті, працює під управлінням SQL 2012 Enterprise SP3.

Всі бази даних, включаючи TempDB, перебувають на SSD першого рівня в SAN. У нас є 10 файлів даних tempdb, кожен попередньо виросли до 1 Гб, і вони ніколи не розростаються автоматично. Те саме з файлом журналу 70 Гб. Прапорці слідів 1117 та 1118 вже встановлені.

sys.dm_io_virtual_file_stats показує понад 50 Терабайт, прочитаних / записаних на файлах даних tempdb & log у минулому місяці, з накопичувальним io_stall 250 годин або 10 днів.

Ми вже налаштували код постачальника та ІП протягом останніх 2 років.

Тепер ми думаємо розмістити файли tempdb на диску RAM, оскільки ми маємо багато пам'яті. Оскільки tempdb знищується / відтворюється під час перезавантаження сервера, він є ідеальним кандидатом для розміщення на енергонезалежній пам'яті, яка також вимивається при перезавантаженні сервера.

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

Хто-небудь ще поставив свій tempdb на оперативну пам’ять у системах високого виробництва oltp? Чи є якийсь великий недолік? Чи є якісь постачальники, які спеціально обирають чи уникають?


Можливо, ви продавець використовує занадто багато tempDB?
папараццо

@Max, це питання відповідає лише на частину питання "чи tempdb пише перейти на диск" .. не читаючи з tempdb
d -_- b

1
Використання SSD на рівні SAN насправді не дає великої переваги через мережеву затримку. Помістіть NVMe SSD в SQL Server і запустіть на ньому tempdb.
Макс Вернон

я просто гуглив 'nvme ssd vs ramdisk', і перший результат - повідомлення reddit, що стверджує, що останній ~ в 3 рази швидше. Крім того, це простіше, ніж загнати в центр обробки даних і встановити його в лезо :)
d -_- b

2
Корпорація Microsoft використовує карти PCI-E FusionIO в деяких кластерах (є незначне рішення, де ви все ще можете використовувати tempdb з локальними дисками, якими вони користуються). Як зазначав Макс, інтерфейс PCI-E значно швидший. Ви хочете виміряти переривання процесора в секунду, щоб виміряти, якщо ви отримуєте більше запитів за секунду. Ви повинні бути, оскільки затримка диска - одна з головних причин низьких запитів на переривання (не час SQL).
Алі Разегі

Відповіді:


7

По-перше, виправлення: переконайтеся, що ви перебуваєте в 2012 році, накопичувальне оновлення 10 оновленого пакета оновлень 10 або новіше. У SQL 2014 Microsoft змінила TempDB, щоб не хотіти писати на диск , і вони приголомшливо підтримали його до 2012 року SP1 CU10 , так що це може зменшити тиск на запис TempDB.

По-друге, отримайте точні цифри затримки. Перевірте sys.dm_io_virtual_file_stats, щоб побачити середню стійку запису для ваших файлів TempDB. Мій улюблений спосіб зробити це:

sp_BlitzFirst @ExpertMode = 1, @Seconds = 30 /* Checks for 30 seconds */
sp_BlitzFirst @SinceStartup = 1 /* Shows data since startup, but includes overnights */

Перегляньте розділ статистики файлів і зосередиться на фізичному записі. Дані SinceStartup можуть бути трохи оманливими, оскільки вони також включають часи, коли CHECKDB працює, і це може дійсно забити ваш TempDB.

Якщо ваша середня затримка запису перевищує 3 мс, то так, у вашому SAN може виникнути твердотільне зберігання, але це все ще не швидко.

Спершу розглянемо локальні SSD для TempDB. Хороші локальні SSD-диски (як, наприклад, PCIe NVMe-карти Intel, які коштують менше $ 2 тис. Доларів США, особливо за розмірами, які ви описуєте), мають надзвичайно низьку затримку, нижчу, ніж ви можете досягти при спільному зберіганні. Однак, при віртуалізації це має недолік: ви не можете переходити гостя від одного хоста до іншого, щоб реагувати на завантаження або на апаратні проблеми.

Розглянемо накопичувач оперативної пам'яті останнім. З цим підходом є дві великі дітки:

По-перше, якщо у вас дійсно є активна робота з написання TempDB, швидкість зміни пам’яті може бути настільки високою, що ви не зможете переходити в гості від одного хоста до іншого, не помічаючи всіх. Під час vMotion вам доведеться копіювати вміст ОЗУ з одного хоста на інший. Якщо це дійсно змінюється так швидко, швидше, ніж ви можете скопіювати його через вашу мережу vMotion, ви можете зіткнутися з проблемами (особливо, якщо це поле пов'язане з дзеркальним відображенням, AG або кластером відмови).

По-друге, накопичувачі оперативної пам'яті - це програмне забезпечення. У тестуванні навантаження, яке я робив, я не був вражений їх швидкістю при дуже важкій активності TempDB. Якщо він настільки важкий, що корпоративний SSD не може йти в ногу, то ви також будете оподатковувати програмне забезпечення для накопичувача оперативної пам'яті. Ви дійсно хочете завантажувати цей тест сильно перед тим, як перейти в прямому ефірі - спробуйте такі речі, як багато одночасних перебудов індексів на різних індексах, усі вони використовують сортування в темпдб.


1

Створення накопичувача оперативної пам'яті має бути тривіальним. Багато завантажуваних пальчикових дисків Linux та оптичних приводів створюють оперативну пам’ять і зберігають там файли ОС. Потім коренева файлова система знаходиться в пам'яті. У Windows в той же час накопичувач RAM завантажувався як драйвер пристрою в config.sys. Зазвичай драйвер завантажували у високу пам'ять. На мою думку, це дуже хороше і просте рішення. Якщо ви створили своє рішення за допомогою накопичувача оперативної пам'яті, я хотів би почути це. Я хотів би зробити щось подібне, але хотів би зробити записи в постійне сховище і зберігати db в оперативній пам'яті. У моєму випадку у нас є машини, які можуть встановити більше оперативної пам’яті, ніж може використовувати ОС. Створення диска оперативної пам’яті перед завантаженням ОС дозволить використовувати оперативну пам’ять, ОС не бачить інакше.

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