Поведінка TempDB SQL Server у середовищі великої пам'яті


12

Читання цього питання нагадало мені питання, яке у мене було деякий час тому.

У нас є SQL Server, який має 512 Гб оперативної пам’яті, основна база даних - 450 ГБ. Ми бачимо досить багато дій у TempDB (гаразд, я думаю, що це "досить багато дій" - може не бути!). Я встановив демонстраційну версію RamDisk Plus Server, створив 50-ГБ раммінг-накопичувач, вказав на нього TempDB і зовсім не побачив покращення продуктивності.

Чи записи в TempDB завжди призводять до фактичного фізичного запису на диск, або TempDB записує кешування на SQL Server для затримки запису, як у кеші файлової системи Windows?

Чи є раммдиск безглуздим у цьому сценарії?

Я знаю, що SQL Server 6.5 мав підтримку TempDB-In-Ram, але я бачу, що це було давно припинено!

Відповіді:


19

Чи записи в TempDB завжди призводять до фактичного фізичного запису на диск, або TempDB записує кешування на SQL Server для затримки запису, як у кеші файлової системи Windows?

Вони завжди? Більшість точно не. Вони коли-небудь? Так, але не в результаті типового механізму. Посилання тут: Що робить контрольна точка для tempdb? .

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

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

Але не потрібно видаляти tempdb на диск, оскільки відновлення після збоїв ніколи не виконується на tempdb, воно завжди відтворюється під час запуску.

Tempdb не відновлюється в разі збоїв, і тому немає необхідності змушувати брудні сторінки tempdb на диск, за винятком випадків, коли процес lazywriter (частина буферного пулу) повинен створити місце для сторінок з інших баз даних.

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

Редагувати: Суперечливо, чи "погано поводився" - це відповідний опис для бази даних користувачів, яка пише сторінки поза КПП. Незвичайне, нетипове чи, можливо, не ідеальне?

Додаткове редагування (наступні коментарі / чат з @PaulWhite):

Яскравий недолік вище, що тимчасові таблиці не є єдиним джерелом трафіку tempdb. Цитуючи інформацію про події хешу, сортування та обміну розливів :

Окремі операції виконання запитів SQL Server калібруються для найкращого використання, використовуючи (дещо) великий об'єм пам'яті як проміжне сховище. Оптимізатор запитів вибере план і оцінить вартість, виходячи з цих операторів, використовуючи цю подряпину пам'яті. Але це, звичайно, лише оцінка. При виконанні оцінки можуть виявитися неправильними, і план повинен продовжуватися, не маючи достатньої кількості пам'яті. У такому випадку ці оператори розливаються на диск.

Я неправильно припускав, що механізм фізичного запису для операції розливу був точно таким же, як описано раніше, тобто лінивець примушує сторінки tempdb до диска внаслідок тиску на пуфер буфера (викликаного розливом).

@PaulWhite пояснив, де я помилявся (дякую Пол!):

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

Проливання справді є особливими в письмовій формі до зберігання. Фізична активність tempdb спостерігається на розливі, навіть перед обличчям вільної пам'яті та нульового тиску на tempdb.

Пол також вказав мені на свою публікацію в блозі Advanced TSQL Tuning: Why Internals Knowledge Matters, яка включає приклади скриптів для демонстрації розливів, для тих, хто хоче заглибитись глибше.

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