Задать вопрос

Какие способы очистки таблиц innodb mysql посоветуете?

Исходные данные:

1) 2 сервера, на каждом из которых поднят mysql

2) на каждом из серверов находится таблица типа innodb

3) эти таблицы реплицируются (запросами) между собой по типу мастер-мастер (вдруг это важно, автоинкриментное поле на одном из серверов четное, на другом нечетное)

4) таблицы содержат в себе порядка 50 млн записей (примерно по 128 байт) и каждый день в любую из таблиц может сваливаться до 10-20 млн записей (не единоразово, а в течении дня)

5) чистить таблицы необходимо ежедневно, порядок чистки: 10-20 млн записей

6) на данный момент размер каждой БД на винте — 50 гигабайт (вместе с индексами)


Какие есть варианты, исключая вариант DELETE, OPTIMIZE TABLE?
  • Вопрос задан
  • 4912 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
@Ruslan_Y
Еще один вариант, не знаю подойдет ли он вам, партиции в 5.1. Для вас думаю возможен вариант с alter table truncate partition ..., и факт того, что индексы локальные тоже должен помочь, нет глобального индекса — не останется хвостов от удаленных данных. Из минусов, ну их даже в официальной документации много. И еще тут много зависит от того, как у вас организованы данные, простейший вариант с датой временем, по ним можно побить данные и очищать устаревающие данные.
Ответ написан
sajgak
@sajgak
Уже ж сто раз обсуждалось. Ставьте удалемым записям флаг на удаление, а реально убаляйте только тогда, когда нагрузки на базу нет.
Ответ написан
korel
@korel Автор вопроса
Javascript developer
>решение в стиле говнокод: использовать сиквенс-функцию вместо автоинкремента, у которой ограничивать максимальное количество id в таблице, а последовательность айдишников зацикливать, и использовать insert ignore для затирания старых новыми.
да, решение сильно в стиле говнокод, и в данной ситуации не получится, тк есть нюансы, например пакеты делятся по какому-то признаку, и в каждом конкретном признаке количество пакетов может быть от одного до нескольких миллионов. кроме того, удаление должно производиться не случайным образом, а строго за заданный период времени (поступивших данных), т.е. грубо говоря должен чистится архив, удаление старых ненужных записей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы