Подтвердить что ты не робот

Почему это вакуум не нужен с Mysql по сравнению с PostgreSQL?

Я больше знаком с PostgreSQL, чем с MySQL. Однажды столкнулся с повреждением Id с помощью PostgreSQL db, а затем понял важность вакуумирования в db. Фактически, это была такая огромная накладная работа, с которой можно было справиться (и это было со старой версией 7.4.3, которая обновляется несколько месяцев назад, чтобы иметь автовакуум). При сравнении MySQL с PostgreSQL предположим, что MySQL не должен иметь дело с такими накладными расходами, как вакуум в PostgreSQL. Правильно ли это предположение?

Также почему вакуум не нужен для MySQL по сравнению с PostgreSQL? Существуют ли другие альтернативы оптимизации, похожие на вакуум, для MySQL dbs?

4b9b3361

Ответ 1

Роберт Хаас написал на эту тему.

Короткий вариант заключается в том, что InnoDB использует журналы отката, более похожие на дизайн Oracle. В основной таблице хранится только самая последняя версия строки. Он должен управлять очисткой журналов, асинхронной/отложенной операцией со связанной функцией с PostgreSQL VACUUM.

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

Итак, это компромисс, дизайн с различным набором преимуществ и проблем.

Если вы говорите о таблицах MyISAM, то это совершенно другое. Таблицы PostgreSQL не будут использовать ваши данные. MyISAM будет. Таблицы PostgreSQL являются транзакционными. MyISAM - нет. Плоский файл не требует VACUUM, что не делает его хорошей идеей.

Ответ 2

Аппроксимация MySQL PostgreSQL vacuum составляет OPTIMIZE TABLE tablename (MySQL docs). Он выполняет аналогичную функцию в MySQL как PostgreSQL, поскольку в зависимости от используемого механизма хранения он восстанавливает неиспользуемое пространство, реорганизует индексы и таблицы и дефрагментирует файлы данных. Вы должны определенно запускать его периодически, как vacuum в PostgreSQL.