Как уменьшить накладные расходы MySQL, отображаемые в phpMyAdmin? - PullRequest
10 голосов
/ 19 февраля 2012

В моей базе данных 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, с заголовком ничего не происходит.

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

Ответы [ 2 ]

12 голосов
/ 16 марта 2012

Накладные расходы в 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 игнорирует / отбрасывает информацию или в таблице Optimize ничего не происходит.

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

7 голосов
/ 14 марта 2012

Пробег:

OPTIMIZE TABLE table_name;

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...