powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Partitioning, в чем его минусы?
17 сообщений из 17, страница 1 из 1
Partitioning, в чем его минусы?
    #34287455
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настроил партицирование таблицы (в таблице хранятся данные о трафике за большой период времени, от года и выше), разбиение сделал по месяцам. Запросы стали работать в 2-6 раз быстрее. Скорость вставки пока еще не проверял, но думаю из-за отсутствия больших индексов вставка тоже будет работать быстрее, если ее не замедлят RULE.
Но есть и минусы:
-нет возможности автоматизировать добавление новых таблиц и RULE для вставки при смене месяца (все нужно делать заранее и можно где-то ошибиться или забыть добавить)
Можно ли как-то упростить это или обязательно все делать вручную? Какие еще могут быть непредвиденные недостатки партицирования, ведь не может же все быть так хорошо? Еще интересует как партицирование реализуется в др. СУБД, тоже на основе наследования или как-то еще?
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34288055
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Права на таблици не наследуются, тоесть при добавлении группы пользователей
необходимо устанавливать вручную права на все партиции.
У вообще минусы тут все от большого кол-ва таблиц.

У меня на добпвление таблиц работает ХП, которая запускается по крону в конце каждого отчетного периода.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34288155
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сделал функцию, которая делает insert в таблицу текущего месяца.
и функцию которая создает новые таблицы для нового месяца.
вариант работы через rule мне не понравился.
права на таблицы не раздавал, а написал функцию, которая делает из них выборку и клиенту отдает готовый результат.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34288253
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeWiLя сделал функцию, которая делает insert в таблицу текущего месяца.
и функцию которая создает новые таблицы для нового месяца.
вариант работы через rule мне не понравился.
права на таблицы не раздавал, а написал функцию, которая делает из них выборку и клиенту отдает готовый результат.
Можете примеры выложить? Сейчас пробую что-то придумать для этого, пока безуспешно. Как в руле определать текущий месяц?
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34289097
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select date_trunc('quarter', now()+ INTERVAL '30 days ');
Дает начало текущего квартала.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34289104
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся.. это начало следующего квартала в конце текущего :)
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34289135
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Алексей Ключников
Я не силен в бухгалтерии, но может имелось в виду:
Код: plaintext
select date_trunc('quarter', now()+ INTERVAL '1 month ');
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34289229
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну просто мне не важно.. использую за один день до нового квартала.
так что можно было поставить 2 дня.

а вообще
Код: plaintext
INTERVAL '1 month'
нельзя прибавлять %)
можно что то вроде current_month или имя конкретного месяца указывать :)
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34292865
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключников
а вообще
Код: plaintext
INTERVAL '1 month'
нельзя прибавлять %)
можно что то вроде current_month или имя конкретного месяца указывать :) ?????
Код: plaintext
1.
2.
3.
4.
select now(), date_trunc('month', now()+ INTERVAL '1 month ')
now                            | date_trunc
--------------------------------------------------------------------
"2007-01-30 14:11:44.618636+03";"2007-02-01 00:00:00+03"
PostgreSQL 8.1.6
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34293429
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е.
в выражении
now()+ INTERVAL '1 month '
Он прибавляет просто цифирку в значении месяца..
Не знал, надо записать себе куда нибудь.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34299552
AlexanderFedyukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть большие проблемы с ссылками на партиционированные таблицы. Вернее совершенно не понятно как с этим бороться.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34304273
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanderFedyukovЕсть большие проблемы с ссылками на партиционированные таблицы. Вернее совершенно не понятно как с этим бороться.

можно подробней на этом моменте?
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34304275
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postuser DeWiLя сделал функцию, которая делает insert в таблицу текущего месяца.
и функцию которая создает новые таблицы для нового месяца.
вариант работы через rule мне не понравился.
права на таблицы не раздавал, а написал функцию, которая делает из них выборку и клиенту отдает готовый результат.
Можете примеры выложить? Сейчас пробую что-то придумать для этого, пока безуспешно. Как в руле определать текущий месяц?

Код: plaintext
1.
2.
3.
    -- получить имя таблицы по дате
    SELECT INTO row to_char(_dt::timestamp, 'yyyy_mm');
    _table := row.to_char;
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34304293
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к вопросу о периодах
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34304315
AlexanderFedyukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To DeWiL
Я поднимал вопрос здесь . Хорошего решения так и не нашел.
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34351832
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большой минус в партицировании (или в планировщике запросов), который, как я понял, лишает смысл в партицировании в моем случае вообще.
Есть таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
\d table
                                                 Table "public.table"
     Column      |            Type             |                                    Modifiers
-----------------+-----------------------------+----------------------------------------------------------------------------------
 date      | timestamp without time zone | not null
 ....
Запросы с условием
Код: plaintext
date<='2007-03-01'
выполняются с учетом ограничений CHECK (при SET constraint_exclusion =ON;), но при использовании условия
Код: plaintext
date_trunc('day',date)<='2007-03-01'
сканируются все подтаблицы.
В одних моих запросах есть первое, в других второе условие. И получается выигрыш я получаю только в части запросов.
Не понимаю, почему так тупит планировщик?
PS:
Код: plaintext
PostgreSQL  8 . 1 . 4  on i686-pc-linux-gnu, compiled by GCC i586-alt-linux-gcc (GCC)  3 . 4 . 4   20050721  (ALT Linux, build  3 . 4 . 4 -alt3)
.
Может есть возможность как-то обмануть его или в 8.2 с этим нормально уже?
...
Рейтинг: 0 / 0
Partitioning, в чем его минусы?
    #34352365
Pechnikov Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тупишь ты, а не планировщик. Делай

where save_date between '$date_from'::timestamp and ('$date_to'::date + '1 day'::interval)::timestamp

и будет тебе производительность. Здесь $date_from и $date_to это дата, не дата-время.

А насчет RULE - делаешь набор таблиц, при вставке данные автоматом отправляются в нужную:

CREATE OR REPLACE RULE merch_ansdata_base_insert_yy06mm01 AS
ON INSERT TO merch_ansdata_base
WHERE new.save_date >= '2006-01-01'::date::timestamp without time zone AND new.save_date < '2006-02-01'::date::timestamp without time zone DO INSTEAD INSERT INTO merch_ansdata_yy06mm01 (save_date, user_id, object_id, question_id, answer_id, text)
VALUES (new.save_date, new.user_id, new.object_id, new.question_id, new.answer_id, new.text);

CREATE OR REPLACE RULE merch_ansdata_base_insert_yy06mm02 AS
ON INSERT TO merch_ansdata_base
WHERE new.save_date >= '2006-02-01'::date::timestamp without time zone AND new.save_date < '2006-03-01'::date::timestamp without time zone DO INSTEAD INSERT INTO merch_ansdata_yy06mm02 (save_date, user_id, object_id, question_id, answer_id, text)
VALUES (new.save_date, new.user_id, new.object_id, new.question_id, new.answer_id, new.text);

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


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