Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

INNODB_PAGE_COMPRESSION_FAIL Linux / DevOps

Сжатие таблиц в MySQL InnoDB: экономия места на SSD/NVMe (Page Compression)

Обновлено: 21.08.2026
  • Критическое исчерпание дорогостоящего дискового пространства на NVMe-массивах под базы данных.
  • Огромные объемы архивных или редко изменяемых таблиц с историческими данными (логи, транзакции).
  • Высокая стоимость расширения дисковых квот в облачных провайдерах (AWS EBS, GCP PD).

1. Метод 1: Прозрачное сжатие страниц (Transparent Page Compression - Рекомендуется)

Использует механизм разреженных файлов файловой системы (Punch Hole) на Linux (ext4 / XFS):

# Создание таблицы со сжатием LZ4 или ZLIB
CREATE TABLE app_events (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    event_data JSON,
    created_at TIMESTAMP
) ENGINE=InnoDB COMPRESSION="lz4";

Включение сжатия для существующей таблицы:

ALTER TABLE app_events COMPRESSION="lz4";
OPTIMIZE TABLE app_events;

2. Метод 2: Классическое табличное сжатие (ROW_FORMAT=COMPRESSED)

Добавьте параметры в /etc/mysql/my.cnf:

[mysqld]
innodb_file_per_table = 1
innodb_cmp_per_index_enabled = ON

Создание сжатой таблицы с указанием размера страницы:

CREATE TABLE historical_logs (
    id INT PRIMARY KEY,
    message TEXT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

3. Мониторинг эффективности сжатия

# Проверка реального дискового размера на файловой системе
ls -lhs /var/lib/mysql/production_db/app_events.ibd

# Проверка статистики сжатия в MySQL
SELECT * FROM information_schema.INNODB_CMP;
💡 Практика специалистов: Не применяйте сжатие к таблицам с интенсивным случайным потоком UPDATE/INSERT — пересчет и фрагментация сжатых страниц вызовет повышенную нагрузку на CPU и просадку QPS.

Частые вопросы (FAQ)

В чем преимущество Page Compression (LZ4) над ROW_FORMAT=COMPRESSED?

Transparent Page Compression не тратит память на хранение сжатых и несжатых копий страниц в Buffer Pool одновременно, тем самым устраняя двойной оверхед по оперативной памяти.

Какое сжатие эффективнее: LZ4 или ZLIB?

LZ4 обеспечивает минимальную нагрузку на CPU при средней степени сжатия (40-60%). ZLIB дает более высокий коэффициент сжатия (до 70%), но требует значительно больше процессорных циклов.

Полезные материалы
Рекомендуем