Крістіан Болтон, Брент Озар та ін. Я намагаюся шукати розуміння та підтвердження на SQL сервері та багато пошуку в Інтернеті. Я буду вдячний, якщо хтось шукає розуміння та підтвердження на веб-сайті SQL Server 2008 Internals та усунення неполадок (запозичені з місцевої бібліотеки в Іллінойсі). може підтвердити чи виправити моє розуміння.
Кожен запит або операція, що вимагає надання пам’яті запиту, потребує пам’яті робочого простору. Загалом запит із використанням сортування, приєднання хеш-матчу, паралелізму (не впевнений у цьому), масової вставки (не впевнений), відновлення покажчиків тощо потребуватиме пам’яті робочої області запитів ..
Пам'ять робочої області є частиною буферного пулу SQL Server (вона виділяється як частина буферного пулу), а максимальна пам'ять робочої області становить 75% пам'яті, виділеної в буферний пул. За замовчуванням один запит не може отримати більше 25% пам’яті робочої області (у SQL 2008 / SQL 2012 - під контролем групи робочих навантажень за замовчуванням губернатора за межі поля).
Шукаю підтвердження мого розуміння
1) Враховуючи, що система з 48 ГБ оперативної пам’яті та максимальною пам'яттю сервера, налаштована на 40 ГБ, означає це, що максимальна пам'ять робочої області обмежена 30 ГБ, і один запит не може отримати пам’ять робочої області (пам’ять запитів) більше 10 ГБ. Тож якщо у вас поганий запит, що працює з мільярдом рядків, який робить масовий хеш-приєднання, і вам потрібно більше 10 Гб оперативної пам’яті (пам’ять робочої області), чи було б навіть байдуже пройти цю чергу надання пам’яті або відразу пролити на диск?
2) Якщо запиту, який виконує операцію масового сортування, було призначено пам'ять робочої області 5 Мб і під час виконання запиту, якщо оптимізатору запитів зрозуміти, що через погану статистику або відсутні індекси, для цього запиту потрібно буде 30 Мб пам'яті робочої області, негайно перекинеться до tempdb. Навіть якщо система має достатньо пам’яті робочої області під час виконання, коли запит перевищить задану пам’ять робочої області під час виконання, він повинен буде перекинутися на диск. Чи правильно я розумію?