powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение удаления большого количества записей
10 сообщений из 35, страница 2 из 2
Ускорение удаления большого количества записей
    #40117611
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
строка у вас занимает 4000 байт, что для 5 миллионов строк будет чуть меньше 20 мегабайт
Вроде бы 20 гигабайт.
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117632
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

oh my! 20 (тысяч упустил) мегабайт это конечно 18 гигов. Мне надо больше спать.

S_Gur,

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

Можно посчитать innodb_buffer_pool_size что бы меньше дергать диск при "пачковом" удалении.

И тут посмотреть https://mariadb.com/kb/en/big-deletes/

У вас InnoDB, что значит ваши delete идут в лог - читай вы записываете все то, что удаляете в другой файл на случай отката транзакции. Грубо говоря, вы удаляете 1 гиг - вы записываете 1 гиг на время удаления. Это надо место и оперативка, что бы было быстрее .
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117636
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza

У вас InnoDB, что значит ваши delete идут в лог - читай вы записываете все то, что удаляете в другой файл на случай отката транзакции. Грубо говоря, вы удаляете 1 гиг - вы записываете 1 гиг на время удаления. Это надо место и оперативка, что бы было быстрее .


Вот-вот. Я это знаю. Поэтому и спрашивал, можно ли что-то сделать между каждой пачкой делитов. Была мысль выполнять построчно каждые 1000 записей в рамках одной транзакции, чтобы этот лог не разрастался. Но в итоге обошелся без этого, а вся эта дискуссия уже на перспективу
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
Вы не ответили на мой вопрос: сколько времени займет выполнение хранимой процедуры, которая курсором обойдет 5 миллионов записей?

По идее - вряд ли больше 10 секунд. Сервер должен быть при этом загружен на 100%.
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117862
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, а ничего, что их перед этим надо получить? Из 5-миллионной таблицы, частями и по определенным условиям? Только запрос, по которому я получаю список записей основной таблицы, у которых количество записей в логе просто больше двух, выполняется секунды 2-3. Это около 16 000 записей. Потом я должен открыть курсор по этому набору данных и для каждой записи получить все записи в логе, которые надо обработать. Это второй курсор внутри первого, в некоторых случаях до 90 000 записей. Можно, конечно, из чисто спортивного интереса написать такую процедурку, но уж за минут 5 для достаточно оптимизированного сервера я ручаюсь. Причем - как очень правильно замечено - при этом сервер будет загружен полностью
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117878
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur,

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

на перспективу при больших удалениях проще делать зеркало копию таблицы и переносить туда insert-select то, что нужно, а потом грохать основную таблицу и переименовывать. Всяко меньше блокировок и логирования - меньше требования к железу. Все остальное это тюнинг и настройки, потенциально нарушающие работу всего сервера
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117884
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таблице есть дата, временные промежутки...
можно подумать как нить партицировать. Судя по содержимому - это лучший выход
как в рекомендациях #bigdata#mariadb
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117911
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza, Естественно, это самый лучший выход - сделать новую таблицу и занести туда оставшиеся всего-то около 40 000 записей. Вот только проблемка: процедуры, которые к этой таблице обращаются, срабатывают в самом лучшем случае раз в секунду, а то и чаще. Решили не рисковать - во избежание проблем с клиентами. Я же говорил - проблема разовая, возникла из-за поздно выявленной ошибки в одной процедуре. Ошибка поправлена, таблицы почищены, лишние записи туда больше ге капают
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40117914
S_Gur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov, это таблица, содержащая историю изменений. Предполагалось, что обращаться к ней будут редко, в случае возникновения проблем, да и размер ее планировался совсем другой. Поэтому никто не собирался ее как-то оптимизировать и уж тем более партицировать.
...
Рейтинг: 0 / 0
Ускорение удаления большого количества записей
    #40118137
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Gur
а ничего, что их перед этим надо получить? Из 5-миллионной таблицы, частями и по определенным условиям?

Ничего, у хороших серверов дисковая выжимает два гигабайта в секунду. И для "получения из миллионной таблицы" именно она является узким местом. Десять секунд - как раз хватит на чтение Вашей двадцатигигабайтной базы целиком и полностью.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение удаления большого количества записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]