Как сжатые данные хранятся в буферном кеше, сжатые или несжатые? - PullRequest
6 голосов
/ 05 июня 2011

При использовании сжатия на уровне строк или страниц с SQL Server 2008 R2, SQL Server сохраняет данные в своем буферном кеше в сжатом виде или в расширенном виде.

Например, допустим, у меня есть таблица, которая (на уровне страницы) сжата до 20% от ее первоначального размера:

Original size:  100 GB
Compressed size: 20 GB

Кроме того, (выделенный) хост, которым является этот конкретный экземпляр SQL Serverработает на 24 ГБ памяти.Если запрос выполняет сканирование таблицы, просматривая все столбцы (для примера) и SQL Server кэширует данные как сжатые, теоретически он может хранить все данные в своем буферном кеше и быть доступным для будущих запросов.Однако если данные кэшируются без сжатия, очевидно, что 100 ГБ данных не могут поместиться в 24 ГБ памяти сервера.

Итак, как SQL Server хранит сжатые данные в своем буферном кеше?

1 Ответ

8 голосов
/ 05 июня 2011

Сжатые страницы сохраняются как сжатые на диске и остаются сжатыми при чтении в память.

Ссылка: Сжатие данных в SQL Server 2008: стратегия, планирование емкости и рекомендации :

Данные распаковываются (не вся страница, а только интересующие их значения данных), когда они удовлетворяют одному из следующих условий:

  • Они считываются для фильтрации, сортировки и объединения, как часть ответа на запрос.
  • Он обновляется приложением.

В памяти нет распакованной копии сжатой страницы. Распаковка данных потребляет процессор.Однако поскольку сжатые данные используют меньше страниц данных, они также экономят:

  • Физический ввод-вывод: поскольку физический ввод-вывод дорог с точки зрения рабочей нагрузки, часто приводит к снижению физического ввода-вывода.в большей экономии, чем дополнительные затраты на ЦП для сжатия и распаковки данных.Обратите внимание, что физический ввод-вывод сохраняется как из-за того, что меньший объем данных считывается или записывается на диск, так и из-за того, что в памяти пула буферов может оставаться больше данных.

  • Логический ввод / выводO (если данные находятся в памяти): поскольку логический ввод-вывод потребляет ЦП, сокращение логического ввода-вывода иногда может компенсировать затраты ЦП на сжатие и распаковку данных.

...