powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Partitioning с большим количеством партиций
3 сообщений из 3, страница 1 из 1
Partitioning с большим количеством партиций
    #35710116
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем Привет!

С годами заметил что база начала существенно тормозить.
Выяснилось, количество партиций выросло до 1300 (это много или не много?).

Создал тестовую базу с таким количеством партиций, партиции пустые, тоесть данных в них нет.
Делаю выборкую.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
devdata3=# explain analyze SELECT id, data, datatime FROM arch.base WHERE id= 2  AND datatime > '2008-12-11 16:00:00' AND datatime < '2008-12-11 23:29:47' ORDER BY datatime;
                                                                                   QUERY PLAN                                                                                   
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort  (cost= 38 . 52 .. 38 . 53  rows= 2  width= 20 ) (actual time= 0 . 066 .. 0 . 066  rows= 0  loops= 1 )
   Sort Key: arch.base.datatime
   Sort Method:  quicksort  Memory: 17kB
   ->  Result  (cost= 0 . 00 .. 38 . 51  rows= 2  width= 20 ) (actual time= 0 . 034 .. 0 . 034  rows= 0  loops= 1 )
         ->  Append  (cost= 0 . 00 .. 38 . 51  rows= 2  width= 20 ) (actual time= 0 . 030 .. 0 . 030  rows= 0  loops= 1 )
               ->  Seq Scan on base  (cost= 0 . 00 .. 25 . 75  rows= 1  width= 20 ) (actual time= 0 . 003 .. 0 . 003  rows= 0  loops= 1 )
                     Filter: ((datatime > '2008-12-11 16:00:00'::timestamp without time zone) AND (datatime < '2008-12-11 23:29:47'::timestamp without time zone) AND (id =  2 ))
               ->  Bitmap Heap Scan on base_2_2008 base  (cost= 4 . 28 .. 12 . 76  rows= 1  width= 20 ) (actual time= 0 . 022 .. 0 . 022  rows= 0  loops= 1 )
                     Recheck Cond: (id =  2 )
                     Filter: ((datatime > '2008-12-11 16:00:00'::timestamp without time zone) AND (datatime < '2008-12-11 23:29:47'::timestamp without time zone))
                     ->  Bitmap Index Scan on index_base_2_2008_id  (cost= 0 . 00 .. 4 . 28  rows= 4  width= 0 ) (actual time= 0 . 016 .. 0 . 016  rows= 0  loops= 1 )
                           Index Cond: (id =  2 )
 Total runtime:  1 . 317  ms
( 13  rows)

Пишет 1.3 милисекунды, но на самом деле запрос длится 3-5 секунд!!

Удаляю из базы 1000 таблиц, тоесть остается 300 партиций,
делаю запрос.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
devdata3=# explain analyze SELECT id, data, datatime FROM arch.base WHERE id= 2  AND datatime > '2008-12-11 16:00:00' AND datatime < '2008-12-11 23:29:47' ORDER BY datatime;
                                                                                   QUERY PLAN                                                                                   
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort  (cost= 38 . 52 .. 38 . 53  rows= 2  width= 20 ) (actual time= 0 . 047 .. 0 . 047  rows= 0  loops= 1 )
   Sort Key: arch.base.datatime
   Sort Method:  quicksort  Memory: 17kB
   ->  Result  (cost= 0 . 00 .. 38 . 51  rows= 2  width= 20 ) (actual time= 0 . 033 .. 0 . 033  rows= 0  loops= 1 )
         ->  Append  (cost= 0 . 00 .. 38 . 51  rows= 2  width= 20 ) (actual time= 0 . 030 .. 0 . 030  rows= 0  loops= 1 )
               ->  Seq Scan on base  (cost= 0 . 00 .. 25 . 75  rows= 1  width= 20 ) (actual time= 0 . 003 .. 0 . 003  rows= 0  loops= 1 )
                     Filter: ((datatime > '2008-12-11 16:00:00'::timestamp without time zone) AND (datatime < '2008-12-11 23:29:47'::timestamp without time zone) AND (id =  2 ))
               ->  Bitmap Heap Scan on base_2_2008 base  (cost= 4 . 28 .. 12 . 76  rows= 1  width= 20 ) (actual time= 0 . 021 .. 0 . 021  rows= 0  loops= 1 )
                     Recheck Cond: (id =  2 )
                     Filter: ((datatime > '2008-12-11 16:00:00'::timestamp without time zone) AND (datatime < '2008-12-11 23:29:47'::timestamp without time zone))
                     ->  Bitmap Index Scan on index_base_2_2008_id  (cost= 0 . 00 .. 4 . 28  rows= 4  width= 0 ) (actual time= 0 . 016 .. 0 . 016  rows= 0  loops= 1 )
                           Index Cond: (id =  2 )
 Total runtime:  0 . 340  ms
( 13  rows)
На глаз он выполняется может и не 0.3 милисекунды, но точно намного меньше 1 секунды.

Спрашивается как теперь быть? Уменьшать количество партиций?
Или может можно как то затюнить базу?

ЗЫ на продакшене postgresql 8.3.1, freebsd 6.2, на тестовой postgresql 8.3.5, freebsd 7.0
особой разницы в поведении не заметил.
Машины p4 1800/256mb (ресурсов железа в принципе хватает)
...
Рейтинг: 0 / 0
Partitioning с большим количеством партиций
    #35710248
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обсуждали эту тему http://sql.ru/forum/actualthread.aspx?tid=558070

Алексей КлючниковНа глаз он выполняется ...в psql можно установить \timing
...
Рейтинг: 0 / 0
Partitioning с большим количеством партиций
    #35712484
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно :(
Спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Partitioning с большим количеством партиций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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