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

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

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

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

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

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

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

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


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

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

Войти через центр авторизации
Похожие вопросы