172 похожих чатов

Уважаемые, как лучше "обрезать" табличку, оставив за последние 2 месяца?


Есть таблица (лог) за 5 лет. 250гиг. Индекс по Id и статусу. Дата есть но без индекса.

20 ответов

21 просмотр

Особо не выпендриваясь -- DELETE FROM WHERE date<... За несколько часов закончит. Всё это время простые INSERT смогут идти, большынство SELECT -- нет.

По опыту из оракла — удалять в цикле небольшими порциями (тысяч по 10 — 50), с промежуточными коммитами.

Ну или как вариант - переложить рядом 2 месяца, а остальное дропнуть. Быстрее может отработать. create а потом insert rename rename в одной транзакции.

Dees7- Автор вопроса
Dees7- Автор вопроса
Nastya Afanaseva
Ну или как вариант - переложить рядом 2 месяца, а ...

так же. индекса нет по дате. а селект просто убьет базу. Сколько будет строиться индекс?

Dees7
так же. индекса нет по дате. а селект просто убьет...

Природа id* известна? Если это лог, то он строго возрастающий, это верно? Достаточно примерно определить границу для селекта. А в новой таблице уже подумать про партицирование и более удачную структуру хранения.

Dees7
на проде неприемлемо.

В 98% случаев прода -- вполне приемлемо. В остальных -- ну, рубите по частям. Хоть DELETE FROM WHERE date < (нужная - 3 года) и т.д., хоть DELETE FROM WHERE date < нужная AND id<какое-то небольшое значение, куда немного попадёт. Первое будет по-минимум отрабатывать минут 5-10, встревать на это время будут только селекты, которые могут получить значения из данных дат. Второе можно сделать практически мгновенным, но суммарно время выполнения будет большэ. Но, ещё раз -- я не очень верю, что у вас как-то сложно запланировать тех.промежуток в котором ваша аналитика не будет читаться.

Можно найти нужный id (если там int), начиная с которого идут даты за последние 2 месяца. И удалить все записи, что меньше него.

Ilya Portnov
По опыту из оракла — удалять в цикле небольшими по...

Здесь не оракл, тут свои погремушки. Там да, там сто миллионов сразу удалённых -- это повод для лулзов и лучшэ так не нарываться.

Dees7- Автор вопроса
Dmitriy Sviridov
Можно найти нужный id (если там int), начиная с ко...

ID похоже простой инкремент. Буду просто бить диапазон и удалять маленькими кусочками в цикле :) Спасибо всем за идеи.

Dmitriy Sviridov
Можно найти нужный id (если там int), начиная с ко...

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

Ilya Anfimov
Здесь не оракл, тут свои погремушки. Там да, там ...

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

Ilya Portnov
я подозреваю что в постгресе тоже не большая радос...

Баз с реально большым объёмом обновлений, которым замершый на несколько часов автовакуум будет создавать проблемы -- не так много.

Dees7- Автор вопроса
Ilya Portnov
я подозреваю что в постгресе тоже не большая радос...

Все как обычно ) так сложилось исторически. данные вообще не нужны в безе =( просто кому то там удобнее искать.

Ilya Anfimov
Если в критэриях удаления добавить и дату -- то и ...

Типа брать кусками по возрастанию id, пока не наткнёмся на нужную дату?

Dmitriy Sviridov
Типа брать кусками по возрастанию id, пока не натк...

Типа брать кусками по возрастанию id, всегда добавляя к условию правильную дату. Тогда не удалится ничего лишнего. Останавливаться ли при этом на каких-то id в районе той даты (можно с запасом +пара дней) или нет -- ужэ не так важно.

Dmitriy Sviridov
Типа брать кусками по возрастанию id, пока не натк...

А, ещё, если у вас по умолчанию транзакцыи serializable (обычно это не так) -- то смените для этого удаления на repeatable read или read committed.

Я подвешиваю новый "партишн" через инхеритенс и констрайнт .Свап имена. В результате все пишется в новую таблицу , а читается с обеих. Через два месяца - дроп старую

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

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта