2012-01-06 3 views
22

У меня есть база данных, используемая для статистики, с более чем 2000 таблицами, каждая с ~ 100 миллионами строк.оптимизировать и проверить таблицу mysql

Я думаю, что несколько раз в неделю было бы неплохо проверить таблицы, чтобы убедиться, что они здоровы, а если нет, отремонтировать и оптимизировать их.

60% таблиц обновляются каждый день, а остальные - архивы.

Мой вопрос: check(repair)/optimize: Хорошо ли проверять работоспособность стола и оптимизировать их несколько раз в неделю, чтобы обеспечить бесперебойную работу системы?

+0

Таблицы, которые обновляются каждый день: Они MyISAM или InnoDB ??? – RolandoMySQLDBA

ответ

24

Вообще вам нужна ОПТИМИЗАЦИЯ стола, когда его файл данные слишком фрагментирован на диск (инструменты использовать для вашей файловой системы, чтобы проверить - сценарий, связанный GiantRobot не вычисляет фрагментацию), когда было обновлено много строк и изменилось их размер (что создало фрагментацию строк) или после удаления многих записей, когда вы не будете добавлять их снова в ближайшее время. Поскольку свободное пространство используется MySQL для новых строк, когда удаленные и новые записи имеют одинаковый размер строки, OPTIMIZE не требуется.

CHECK TABLE используется только в том случае, если вы подозреваете повреждение данных (что не должно происходить при обычном прогоне). В некоторых дистрибутивах Linux (например, Debian) есть сценарии запуска, которые запускают CHECK TABLE для всех таблиц при запуске сервера MySQL. REPAIR TABLE затем используется для восстановления поврежденных таблиц.

ANALYZE TABLE может использоваться для обновления индекса мощности, которая используется при определении плана выполнения запроса. Обычно это необходимо только в особых случаях.

Непонятно из вашего вопроса, как используются ваши таблицы статистики ... сколько записей, удалений и чтений? Мои таблицы статистики записываются все время, и один раз в день они считываются, данные консолидируются и записываются в другую таблицу, а затем удаляются. В этом случае нет необходимости запускать OPTIMIZE, поскольку данные не часто читаются, а свободное пространство используется для новых данных. Я использую разделение по дням, поэтому вместо удаления записей (что довольно медленно) я просто DROP PARTITION (что занимает 1 сек.)

0

2000 столов и 100 миллионов строк каждый выглядит огромным! , если вы попытаетесь оптимизировать каждую таблицу несколько раз в неделю, во время оптимизации таблицы будут заблокированы, поэтому вы не сможете писать эти таблицы до тех пор, пока не закончите работу. вот скрипт, который проверяет только фрагментированные таблицы (% 60 из ваших таблиц, вероятно) и оптимизировать только фрагментированные, сообщите нам, если он работает.

Примечание: я не смог протестировать сценарий, так как я использую машину Windows для своего текущего проекта. Прочитайте комментарии и примечание ниже сценария для ссылки я предоставил

Optimize only fragmented tables in MySQL

0

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

Вы также можете увидеть проблемы с ремонтом here