Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление пустых строк из БД / 16 сообщений из 16, страница 1 из 1
09.01.2007, 11:07
    #34242167
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Как можно удалить из БД (из всех таблиц) все пустые строки?
...
Рейтинг: 0 / 0
09.01.2007, 11:26
    #34242254
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
SerdggКак можно удалить из БД (из всех таблиц) все пустые строки?
"А как это?" (с) Л. Поддерев'янскьий.
Например написав хранимую процедуру, которая получает имена всех таблиц и для каждой таблицы получает список колонок, и затем формирует для каждой таблицы строку вида
Код: plaintext
1.
DELETE FROM table_name WHERE (field1 IS NULL) AND (field2 IS NULL) ...
и ее выполняет.
Имена таблиц и полей - читаем мануал недалеко от таблицы и колонки
...
Рейтинг: 0 / 0
09.01.2007, 12:04
    #34242420
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
я удалял данные из таблиц за период такой командой:
Код: plaintext
DELETE FROM table_name WHERE date_period < '01.01.06';

размер дампа уменьшился, а развернутая база сколько занимала, столько и занимает. Может быть нужно VACUUM применить?
...
Рейтинг: 0 / 0
09.01.2007, 12:20
    #34242491
alex_v13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Лучше VACUUM ANALYZE, а если нагрузка позволяет, то VACUUM FULL ANALYZE.
Размер базы сильно не уменьшиться, зато расти будет медленне, за счет использования перераспределеного места.
...
Рейтинг: 0 / 0
09.01.2007, 13:30
    #34242712
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Serdggя удалял данные из таблиц за период такой командой:
Код: plaintext
DELETE FROM table_name WHERE date_period < '01.01.06';

Ну, вполне нормально :)

Serdgg
размер дампа уменьшился, а развернутая база сколько занимала, столько и занимает. Может быть нужно VACUUM применить?
Не просто VACUUM, а VACUUM FULL. Просто вакуум - просто освобождает место логически (на винте место не увеличится). Ну и сразу лучше делать VACUUM FULL ANALYZE.
...
Рейтинг: 0 / 0
09.01.2007, 13:54
    #34242804
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
а смысл освобождать место физически, если потом база снова распухнет?
...
Рейтинг: 0 / 0
09.01.2007, 14:36
    #34242971
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
.....и правда, не уменьшилось место. Непонятно, отрезал половину базы, а она не уменьшилась. VACUUM FULL ANALYZE не помогает, может есть ещё какой способ, чтобы уменьшить физически занимаемое пространство ?
...
Рейтинг: 0 / 0
09.01.2007, 14:39
    #34242986
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
st_sergа смысл освобождать место физически, если потом база снова распухнет?

Когда она ещё распухнет до такого же состояния.....а толпа бэкапов БД уже сжирает всё пространство на бэкап-сервере
...
Рейтинг: 0 / 0
09.01.2007, 14:43
    #34243003
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
st_sergа смысл освобождать место физически, если потом база снова распухнет?
Пример. У меня есть БД. В ней хранятся картинки. Много. Очень. Около 4*10^6. И каждая по метру. И тут настяет счастливый момент, когда ну его все нафик и остается только 10^3. Ну и вопрос, нафига мне на винте стока занятого места? И Постгресу его шерстить нафига? Т.е. если страницы будут полностью пустые - тогда конечно нафиг не нужно шерстить, а если нет? Вот где-то здесь и возникает VACUUM FULL ANALYZE.
...
Рейтинг: 0 / 0
09.01.2007, 14:46
    #34243019
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Serdgg.....и правда, не уменьшилось место. Непонятно, отрезал половину базы, а она не уменьшилась. VACUUM FULL ANALYZE не помогает, может есть ещё какой способ, чтобы уменьшить физически занимаемое пространство ?
Ну варианта 3.
1. Полбазы практически не занимали места.
2. Данные не удалились (может условие WHERE неправильное, коммит не сделал или еще чего - ХЗ) :)
3. Что-то глюкнуло :)

Проверить легко - делаем дамп, и востанавливаем его. Если размеры файлов на винте остались те же, то или 1 или 2. Если нет - то ближе к 3.
...
Рейтинг: 0 / 0
09.01.2007, 14:52
    #34243044
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
я так и проверил. Раньше база занимала 11 гектар в развернутом состоянии (за 3 года). Убил "старые" 1,5 года архив вместо 1,5 гектар стал занимать 700 метров. Восстановил на другом компе эту БД - она там занимает 12 гектар (с учетом уже добавленных данных)......почему?
...
Рейтинг: 0 / 0
09.01.2007, 15:02
    #34243084
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Andrey Daeron st_sergа смысл освобождать место физически, если потом база снова распухнет?...
Т.е. если страницы будут полностью пустые - тогда конечно нафиг не нужно шерстить, а если нет? Вот где-то здесь и возникает VACUUM FULL ANALYZE.
а как сильно это влияло на производительность (VACUUM vs VACUUM FULL в вашем случае)? Всымсле произовдительность при простом вакууме и при полном.
...
Рейтинг: 0 / 0
09.01.2007, 19:13
    #34243915
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
st_serg
а как сильно это влияло на производительность (VACUUM vs VACUUM FULL в вашем случае)? Всымсле произовдительность при простом вакууме и при полном.
К сожалению такого замера не производил :( Делал сразу FULL ANALYZE. Без него - вообще торба была полная. В следующий раз попробую сделать замеры. + у меня удалаялось по дате, т.е. страницы освобождались полностью.

ЗЫ Т.е. наверно стоит считать мое утверждение о НУЖНОСТИ скорее в теории.
...
Рейтинг: 0 / 0
10.01.2007, 11:13
    #34244927
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Serdggя так и проверил. Раньше база занимала 11 гектар в развернутом состоянии (за 3 года). Убил "старые" 1,5 года архив вместо 1,5 гектар стал занимать 700 метров. Восстановил на другом компе эту БД - она там занимает 12 гектар (с учетом уже добавленных данных)......почему?
Ээээ. Ну, чудес не бывает, есть непонимание происходящего.
Попробую сформулировать происходящее:
1. Есть БД за 3 года, файлы физически занимают на винте 11G, pg_dump базы = 1.5G.
2. Проводим удаление данных за 1.5 года. Файлы физически занимают 11G, pg_dump = 700M.
3. Разворачиваем 700М (т.е. новый) дамп на другой машине, файлы БД занимают физически 12G.
Версии PG не меняются, дампы разварачиваются нормально, данных (старых) в новоразвернутой БД нет?
...
Рейтинг: 0 / 0
10.01.2007, 13:39
    #34245535
Serdgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Andrey Daeron
Версии PG не меняются, дампы разварачиваются нормально, данных (старых) в новоразвернутой БД нет?
1. Все операции производились на одном сервере (PG 7.3)
2. Удалялись все записи старше 01.01.06 с помощью команды DELETE из всех таблиц.
3. Первоначальный размер базы занимал 11 гиг в развернутом виде и 1,5 гига в архиве.
4. После удаления данных их в таблице нет, самая старшая запись - в любой таблице 01.01.06 (был один хвост, но после его зачистки ничего не поменялось и повторной процедуры - база уменьшилась на пару килобайт)
5. В итоге имеем архив на 700 метров или в развернутом виде 11 гигов с копейками ( эти копейки набежали уже после того, как был зафиксирован размер БД за 3 года)
Последовательность действий такая: Удаление записей старше 01.01.06(DELETE FROM...) - Бэкап - Удаление БД (DROP) - восстановление БД - VACUUM FULL ANALYZE - Смотрим размер БД.

P.S. при восстановлении БД выписывал такие строки:
авторСоздание таблицы для перекрестных ссылок среди больших объектов.
Число восстановленных больших объектов 6
...
Рейтинг: 0 / 0
10.01.2007, 19:17
    #34246807
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление пустых строк из БД
Мда. Есть ощущение что информация неполна. Может какие таблицы занимают основной объем (например индексами или еще чем), или архив жмется круто. Нужно ковырятся. Может весь объем занимают
автор
Создание таблицы для перекрестных ссылок среди больших объектов.
Число восстановленных больших объектов 6

Ковырятся надобныть.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление пустых строк из БД / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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