Mysql: почему память пула буферов innodb растет после команды «оптимизировать таблицу» - PullRequest
1 голос
/ 21 марта 2019

Я использую docker на локальной машине с контейнером Mysql.

Шаги: 1. Запустите MySQL Docker. Использует память около 2-2,5G; 2. Запустите команду «Оптимизирующая таблица». Использует память растет до 4,5-5G; 3. Перезапустите mysql docker и снова используйте память 2-2.5G (см. Скриншот) 4. Элемент списка;

База данных имеет 10 небольших таблиц (<10 строк) и одну огромную таблицу (10.000.000 строк с 10 столбцами, таблица имеет индекс для каждого столбца). </p>

Почему это происходит? Постскриптум Извините за мой плохой английский.

Скриншот

1 Ответ

0 голосов
/ 10 апреля 2019
  • Не используйте OPTIMIZE TABLE для таблиц InnoDB. Это почти никогда не приносит никакой пользы.
  • OPTIMIZE TABLE копирует таблицу. Очевидно, у вас есть innodb_file_per_table = OFF, что означает, что он создаст вторую копию таблицы в ibdata1.
  • «Индекс для каждого столбца» - обычно это пустая трата времени. Посмотрите на SELECTs, вы должны увидеть, какие индексы вы можете использовать. (Обратитесь за помощью здесь, но предоставьте SHOW CREATE TABLE и соответствующие запросы.)
  • буфер_пул находится в ОЗУ; его размер ограничен innodb_buffer_pool_size. Когда MySQL запускается (например, в вашем Docker), он начинает с малого и увеличивается, возможно, до этого размера.
  • Выполнение OPTIMIZE, особенно с таким большим количеством индексов, будет использовать часть или весь доступный buffer_pool.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...