Как уменьшить нагрузку на MySQL, как показано в phpMyAdmin?

В моей базе данных MySQL я вижу статистику:

Type    Usage  
Data    16,384  Bytes  
Index   32,768  Bytes  
Overhead    405,0   MB  
Effective   -424,624,128    Bytes  
Total   49,152  Bytes  

Когда я пытаюсь выполнить команды check table, ALTER TABLE 'mytable' ENGINE = INNODB, OPTIMIZE TABLE, с служебными данными ничего не происходит.

Почему ничего не происходит, я должен волноваться, и когда я должен волноваться? Я видел другие вопросы, которые говорят "беспокоиться, когда накладные расходы становятся слишком большими". Что слишком велико?

Ответ 1

Накладные расходы в PHPMyAdmin вычисляются столбцом "Data_free", возвращаемым SHOW TABLE STATUS. Фактически это объясняется в документации MySQL: http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

Data_free: количество выделенных, но неиспользуемых байтов.

Начиная с MySQL 5.1.24, эта информация также показана для InnoDB таблицы (ранее это было в значении Comment). Отчеты таблиц InnoDB свободное пространство табличного пространства, к которому принадлежит таблица. Для таблицу, расположенную в общем табличном пространстве, это свободное пространство общее табличное пространство. Если вы используете несколько табличных пространств и таблицу имеет собственное табличное пространство, свободное пространство предназначено только для этой таблицы. Свободно пространство означает количество полностью свободных 1 Мб экстентов минус безопасность поле. Даже если свободное пространство отображается как 0, может быть возможно вставить строк, если не нужно выделять новые экстенты.

Однако для InnoDB это важно. "Таблицы InnoDB сообщают о свободном пространстве табличного пространства, к которому принадлежит таблица. Для таблицы, расположенной в общем пространстве таблиц, это свободное пространство общего табличного пространства". Таким образом, с типичной установкой InnoDB ( "innondb_file_per_table" не задано) вы получите свободное пространство для всех таблиц, а не для одной таблицы. Вероятно, поэтому phpMyAdmin игнорирует/отбрасывает информацию или в таблице оптимизации ничего не происходит.

Вы должны прочитать этот пост, в котором четко объясняется, как оптимизировать таблицу в innodb.

Ответ 2

Run:

OPTIMIZE TABLE table_name;

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

/usr/bin/mysqlcheck --auto-repair --check --optimize --all-databases

Это проверит, отремонтирует и оптимизирует все таблицы во всех базах данных.