Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос с участием таблиц из разных схем / 25 сообщений из 41, страница 1 из 2
08.07.2019, 11:56
    #39834923
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Здравствуйте!

Неожиданно замедлилось выполнение запросов с участием таблиц из разных схем одной БД. Вместо трёх минут в прошлом месяце теперь св. 10 часов. Остальные запросы к таблицам одной схемы выполняются по-прежнему быстро. Все индексы присутствуют, таблицы небольшие, на сервере больше ничего не запущено.
Второй подобный запрос выполняется уже 3 часа.
Эту процедуру мы запускаем раз в месяц, поэтому проблему обнаружили только что.
Подскажите, пожалуйста, с чем такое может быть связано?
...
Рейтинг: 0 / 0
08.07.2019, 11:58
    #39834924
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,
...
Рейтинг: 0 / 0
08.07.2019, 13:09
    #39834954
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Дальнейшие исследования показали, что проблема, видимо, в части группировки GROUP BY, т. к. сам запрос без группировки выполняется быстро.
Однако кажется невероятным, что группировка стала выполняться так долго - несколько часов.
...
Рейтинг: 0 / 0
08.07.2019, 15:14
    #39835019
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
что значит строка cost в плане?
...
Рейтинг: 0 / 0
08.07.2019, 15:45
    #39835055
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Какая-то оценка затрат на операцию. В чём измеряется так и не нашёл.
В статьях видел описание проблемы, что на агрегирование данных иногда уходит время многократно превышающее сам запрос.
Но у нас такой не возникало.
...
Рейтинг: 0 / 0
08.07.2019, 20:54
    #39835218
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Покажите сам запрос.
...
Рейтинг: 0 / 0
08.07.2019, 21:52
    #39835226
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,
Я не знаток PostgreSQL, но по моим наблюдениям скорость не страдает от того, что таблицы в разных схемах. Если скорость неожиданно меняется, то можно посмотреть, как при этом меняются планы запроса.
...
Рейтинг: 0 / 0
09.07.2019, 13:10
    #39835430
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Как я написал выше, дальнейшие исследования показали, что проблема, видимо, в части группировки GROUP BY, т. к. сам запрос без группировки выполняется быстро.
Однако кажется невероятным, что группировка стала выполняться так долго - несколько часов.
Без группировки запрос выполняется 2 минуты, при добавлении группировки - 11 часов

Так.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, age
                  (2019-extract(year FROM cards.birthday))::integer AS age,
                  MAX(CASE WHEN ProfileRep.Basic=1 THEN ProfileRep.PrevExam ELSE 0 END) AS PrevExam    
            FROM public.cards
              INNER JOIN disp.profilerep ON cards.profile=ProfileRep.id_profile
            WHERE cards.ctrldate>='20190101'::date AND cards.ctrldate<='20190630'::date
              AND cards.datein>='20190101'::date
              AND cards.form_code IN ('ДВ1', 'ДВ3')
              AND cards.case_isrepeat='0'
              AND ProfileRep.PrevExam>=1 AND ProfileRep.PrevExam<=3 
              AND EXISTS (SELECT 1
                          FROM disp.dispensary_observation
                          INNER JOIN disp.dispensary_observation_list ON dispensary_observation.id_list=dispensary_observation_list.id
                          WHERE dispensary_observation_list.year=2019::integer
                            AND dispensary_observation_list.id_type=2 
                            AND dispensary_observation_list.flag=1    
                            AND dispensary_observation.plan=1        
                            AND dispensary_observation.surname=cards.surname
                            AND dispensary_observation.name=cards.name1
                            AND dispensary_observation.patronymic=cards.name2
                            AND dispensary_observation.birthday=cards.birthday
                            )) cards                                                       
            GROUP BY cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, ProfileRep.PrevExam   ;



Или так, даже с небольшим упрощением. Не имеет значения.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, age
from (
SELECT cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex,
                  (2019-extract(year FROM cards.birthday))::integer AS age
            FROM public.cards
              INNER JOIN disp.profilerep ON cards.profile=ProfileRep.id_profile
            WHERE cards.ctrldate>='20190101'::date AND cards.ctrldate<='20190630'::date
              AND cards.datein>='20190101'::date
              AND cards.form_code IN ('ДВ1', 'ДВ3')
              AND cards.case_isrepeat='0'
              AND ProfileRep.PrevExam>=1 AND ProfileRep.PrevExam<=3 
              AND EXISTS (SELECT 1
                          FROM disp.dispensary_observation
                          INNER JOIN disp.dispensary_observation_list ON dispensary_observation.id_list=dispensary_observation_list.id
                          WHERE dispensary_observation_list.year=2019::integer
                            AND dispensary_observation_list.id_type=2 
                            AND dispensary_observation_list.flag=1   
                            AND dispensary_observation.plan=1        
                            AND dispensary_observation.surname=cards.surname
                            AND dispensary_observation.name=cards.name1
                            AND dispensary_observation.patronymic=cards.name2
                            AND dispensary_observation.birthday=cards.birthday
                            )) cards                                                       
            GROUP BY cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, age   ;
...
Рейтинг: 0 / 0
09.07.2019, 14:34
    #39835486
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
В первом запросе в предпоследней строке
Код: sql
1.
) cards 


случайно осталось
...
Рейтинг: 0 / 0
09.07.2019, 16:47
    #39835566
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

Покажите текст от
explain (analyze, costs, buffers, timing) вашего запроса
скорее всего все станет сразу ясно.
...
Рейтинг: 0 / 0
15.07.2019, 10:33
    #39837342
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Вот, пожалуйста. Формировался 880 минут.
...
Рейтинг: 0 / 0
15.07.2019, 10:46
    #39837347
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

некорректно скопировали, нарушен порядок строк.
...
Рейтинг: 0 / 0
15.07.2019, 11:03
    #39837356
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

вот как я должен вашу картинку обрабатывать? руками текст с нее в файл перебивать?
Неужели так сложно нормально preformatted text приложить?
Вот как с нее что то скопировать или показать кусок??
...
Рейтинг: 0 / 0
15.07.2019, 11:53
    #39837386
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Подумалось, что всё и так "сразу станет ясно".
В таком виде подойдёт?
...
Рейтинг: 0 / 0
15.07.2019, 12:08
    #39837392
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyLПодумалось, что всё и так "сразу станет ясно".
В таком виде подойдёт?

А просто текст блин в пост вставить в FIX? У меня екселя нет на компе (и вообще никакого офиса).
Ну что за странная идея файлы прикреплять???
...
Рейтинг: 0 / 0
15.07.2019, 12:16
    #39837397
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Пожалуйста.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
  Group Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
  Buffers: shared hit=8328260 read=12361218 written=25, temp read=3591 written=3606
  ->  Sort  (cost=1241597.42..1241600.18 rows=1106 width=35) (actual time=52829237.525..52829285.634 rows=66018 loops=1)
        Sort Method: external sort  Disk: 3216kB
        Sort Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
        Buffers: shared hit=8328260 read=12361218 written=25, temp read=3591 written=3606
        ->  Hash Join  (cost=143173.81..1241541.50 rows=1106 width=35) (actual time=15949.404..52827638.163 rows=66018 loops=1)
              Hash Cond: ((cards.profile)::text = (profilerep.id_profile)::text)
              Buffers: shared hit=8328251 read=12361218 written=25, temp read=3189 written=3204
              ->  Nested Loop  (cost=143167.95..1241465.08 rows=15868 width=41) (actual time=15949.092..52827082.119 rows=66018 loops=1)
              ->  Hash  (cost=5.07..5.07 rows=63 width=6) (actual time=0.266..0.266 rows=63 loops=1)
                    Buffers: shared hit=8328249 read=12361218 written=25, temp read=3189 written=3204
                    Buffers: shared hit=2
                    Buckets: 1024  Batches: 1  Memory Usage: 11kB
                    ->  Unique  (cost=143167.38..144878.77 rows=136911 width=30) (actual time=15811.272..24867.416 rows=310351 loops=1)
                    ->  Seq Scan on profilerep  (cost=0.00..5.07 rows=63 width=6) (actual time=0.080..0.208 rows=63 loops=1)
                    ->  Index Scan using cards_surname_name1_name2_idx on cards  (cost=0.56..8.00 rows=1 width=41) (actual time=160.106..170.125 rows=0 loops=310351)
                          Rows Removed by Filter: 64
                          Rows Removed by Filter: 142
                          Index Cond: (((surname)::text = (dispensary_observation.surname)::text) AND ((name1)::text = (dispensary_observation.name)::text) AND ((name2)::text = (dispensary_observation.patronymic)::text))
                          Filter: ((prevexam >= '1'::numeric) AND (prevexam <= '3'::numeric))
                          Filter: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date) AND (datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text) AND (dispensary_observation.birthday = birthday))
                          Buffers: shared hit=8325491 read=12332730 written=25
                          Buffers: shared hit=2758 read=28488, temp read=3189 written=3204
                          Buffers: shared hit=2
                          ->  Sort  (cost=143167.38..143509.66 rows=136911 width=30) (actual time=15811.268..23324.306 rows=396425 loops=1)
                                Sort Method: external merge  Disk: 22160kB
                                Sort Key: ((dispensary_observation.surname)::text), ((dispensary_observation.name)::text), ((dispensary_observation.patronymic)::text), dispensary_observation.birthday
                                Buffers: shared hit=2758 read=28488, temp read=3189 written=3204
                                ->  Nested Loop  (cost=7480.45..128210.90 rows=136911 width=30) (actual time=6727.556..13424.552 rows=396425 loops=1)
                                      Buffers: shared hit=2758 read=28488
                                      ->  Seq Scan on dispensary_observation_list  (cost=0.00..1.18 rows=1 width=4) (actual time=0.023..0.026 rows=1 loops=1)
                                      ->  Bitmap Heap Scan on dispensary_observation  (cost=7480.45..126840.62 rows=136911 width=34) (actual time=6727.523..13238.988 rows=396425 loops=1)
                                            Rows Removed by Filter: 9
                                            Rows Removed by Filter: 6695
                                            Recheck Cond: (id_list = dispensary_observation_list.id)
                                            Heap Blocks: exact=27059
                                            Filter: (plan = '1'::numeric)
                                            Filter: ((year = 2019) AND (id_type = 2) AND (flag = 1))
                                            Buffers: shared hit=2757 read=28488
                                            Buffers: shared hit=1
                                            ->  Bitmap Index Scan on dispensary_observation_id_list_idx  (cost=0.00..7446.22 rows=144772 width=0) (actual time=6713.152..6713.153 rows=419359 loops=1)
                                                  Index Cond: (id_list = dispensary_observation_list.id)
                                                  Buffers: shared hit=1 read=4185
...
Рейтинг: 0 / 0
15.07.2019, 12:17
    #39837398
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Maxim BogukArkadyLПодумалось, что всё и так "сразу станет ясно".
В таком виде подойдёт?

А просто текст блин в пост вставить в FIX? У меня екселя нет на компе (и вообще никакого офиса).
Ну что за странная идея файлы прикреплять???
Ну хорошо что ТС не запихал скриншот в экселовскую книгу.
Вообще я думал меня одного такое "просто бесит!!" и молчал.
...
Рейтинг: 0 / 0
15.07.2019, 12:21
    #39837401
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Приятно было невольно вас порадовать.
...
Рейтинг: 0 / 0
15.07.2019, 12:42
    #39837408
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

Вам уже написали что у вас строки перепутаны в том что вы прислали и восстановить план запроса из этой каши не реально.
Как и почему они перепутаны - я не знаю вопросы к приложению из которого вы запрос выполняли.
Формат уже верный тепреь осталось строки в правильном порядке прислать.
...
Рейтинг: 0 / 0
16.07.2019, 09:05
    #39837712
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Может быть так? Это от pgAdmin4, а предыдущее от DBeaver.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
"Group  (cost=1244171.76..1244204.43 rows=1188 width=39) (actual time=53045757.593..53045871.977 rows=49544 loops=1)"
"  Group Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age"
"  Buffers: shared hit=8331259 read=12358000, temp read=3591 written=3606"
"  ->  Sort  (cost=1244171.76..1244174.73 rows=1188 width=35) (actual time=53045757.502..53045798.280 rows=66018 loops=1)"
"        Sort Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age"
"        Sort Method: external sort  Disk: 3216kB"
"        Buffers: shared hit=8331259 read=12358000, temp read=3591 written=3606"
"        ->  Hash Join  (cost=143214.77..1244111.08 rows=1188 width=35) (actual time=23581.012..53044146.825 rows=66018 loops=1)"
"              Hash Cond: ((cards.profile)::text = (profilerep.id_profile)::text)"
"              Buffers: shared hit=8331250 read=12358000, temp read=3189 written=3204"
"              ->  Nested Loop  (cost=143208.90..1244029.42 rows=17047 width=41) (actual time=23580.758..53043651.431 rows=66018 loops=1)"
"                    Buffers: shared hit=8331249 read=12357999, temp read=3189 written=3204"
"                    ->  Unique  (cost=143208.34..144923.64 rows=137224 width=31) (actual time=23377.507..32066.882 rows=310351 loops=1)"
"                          Buffers: shared hit=2 read=31025, temp read=3189 written=3204"
"                          ->  Sort  (cost=143208.34..143551.40 rows=137224 width=31) (actual time=23377.498..30567.713 rows=396425 loops=1)"
"                                Sort Key: ((dispensary_observation.surname)::text), ((dispensary_observation.name)::text), ((dispensary_observation.patronymic)::text), dispensary_observation.birthday"
"                                Sort Method: external merge  Disk: 22160kB"
"                                Buffers: shared hit=2 read=31025, temp read=3189 written=3204"
"                                ->  Nested Loop  (cost=7479.99..128212.40 rows=137224 width=31) (actual time=4914.229..21202.931 rows=396425 loops=1)"
"                                      Buffers: shared hit=2 read=31025"
"                                      ->  Seq Scan on dispensary_observation_list  (cost=0.00..1.18 rows=1 width=4) (actual time=0.015..0.020 rows=1 loops=1)"
"                                            Filter: ((year = 2019) AND (id_type = 2) AND (flag = 1))"
"                                            Rows Removed by Filter: 9"
"                                            Buffers: shared hit=1"
"                                      ->  Bitmap Heap Scan on dispensary_observation  (cost=7479.99..126838.98 rows=137224 width=35) (actual time=4914.205..21003.741 rows=396425 loops=1)"
"                                            Recheck Cond: (id_list = dispensary_observation_list.id)"
"                                            Filter: (plan = '1'::numeric)"
"                                            Rows Removed by Filter: 6695"
"                                            Heap Blocks: exact=27055"
"                                            Buffers: shared hit=1 read=31025"
"                                            ->  Bitmap Index Scan on dispensary_observation_id_list_idx  (cost=0.00..7445.68 rows=144701 width=0) (actual time=4899.410..4899.410 rows=403120 loops=1)"
"                                                  Index Cond: (id_list = dispensary_observation_list.id)"
"                                                  Buffers: shared hit=1 read=3970"
"                    ->  Index Scan using cards_surname_name1_name2_idx on cards  (cost=0.56..8.00 rows=1 width=41) (actual time=160.242..170.800 rows=0 loops=310351)"
"                          Index Cond: (((surname)::text = (dispensary_observation.surname)::text) AND ((name1)::text = (dispensary_observation.name)::text) AND ((name2)::text = (dispensary_observation.patronymic)::text))"
"                          Filter: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date) AND (datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text) AND (dispensary_observation.birthday = birthday))"
"                          Rows Removed by Filter: 64"
"                          Buffers: shared hit=8331247 read=12326974"
"              ->  Hash  (cost=5.07..5.07 rows=63 width=6) (actual time=0.217..0.217 rows=63 loops=1)"
"                    Buckets: 1024  Batches: 1  Memory Usage: 11kB"
"                    Buffers: shared hit=1 read=1"
"                    ->  Seq Scan on profilerep  (cost=0.00..5.07 rows=63 width=6) (actual time=0.080..0.173 rows=63 loops=1)"
"                          Filter: ((prevexam >= '1'::numeric) AND (prevexam <= '3'::numeric))"
"                          Rows Removed by Filter: 142"
"                          Buffers: shared hit=1 read=1"
"Planning time: 627.084 ms"
"Execution time: 53045901.471 ms"
...
Рейтинг: 0 / 0
16.07.2019, 10:10
    #39837740
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

Да с этим уже можно работать.
Было бы конечно классно если бы вы включили track_io_timing в конфиге и в базе и прислали итоги заново чтобы понять не хватает диска или процессора.

Вопросы
1)сколько у вас work_mem стоит?

2)Какая модель ssd диска у вас для базы используется?

3)как и ожидалось проблема не в unique/group by/sort
а в
Код: plaintext
1.
2.
3.
4.
5.
"                    ->  Index Scan using cards_surname_name1_name2_idx on cards  (cost=0.56..8.00 rows=1 width=41) (actual time=160.242..170.800 rows=0 loops=310351)"
"                          Index Cond: (((surname)::text = (dispensary_observation.surname)::text) AND ((name1)::text = (dispensary_observation.name)::text) AND ((name2)::text = (dispensary_observation.patronymic)::text))"
"                          Filter: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date) AND (datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text) AND (dispensary_observation.birthday = birthday))"
"                          Rows Removed by Filter: 64"
"                          Buffers: shared hit=8331247 read=12326974"
Чтобы понять что не так и что то посоветовать - надо увидеть структуру этой таблицы и главное наличные индексы в ней.
Скорее всего не хватает индексы под эти условия эффективного.
...
Рейтинг: 0 / 0
16.07.2019, 11:21
    #39837783
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Спасибо за участие.
У нас виртуальная машина, 6Гб памяти.

Структура такая.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
CREATE TABLE disp.dispensary_observation
(
    id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
    code_mo integer,
    code_mo_p integer,
    id_history integer,
    surname character varying(50) COLLATE pg_catalog."default",
    name character varying(50) COLLATE pg_catalog."default",
    patronymic character varying(50) COLLATE pg_catalog."default",
    birthday date,
    dn_prvs_code smallint,
    dn_period smallint,
    dn_diagnosis character varying(10) COLLATE pg_catalog."default",
    dn_begin date,
    lpuid integer,
    address character varying(254) COLLATE pg_catalog."default",
    sex character varying(5) COLLATE pg_catalog."default",
    rupor_phone character varying(100) COLLATE pg_catalog."default",
    phone character varying(255) COLLATE pg_catalog."default",
    mobile_phone character varying(100) COLLATE pg_catalog."default",
    id_list integer,
    dig_group character varying(20) COLLATE pg_catalog."default",
    policy character varying(20) COLLATE pg_catalog."default",
    time_phone character varying(8) COLLATE pg_catalog."default" DEFAULT 0,
    refusing numeric(1,0) DEFAULT 0,
    ok_phone numeric(1,0) DEFAULT 0,
    ok_letter numeric DEFAULT 0,
    month numeric,
    date_inform timestamp without time zone,
    active numeric DEFAULT 0,
    id_upm integer,
    file character varying(60) COLLATE pg_catalog."default",
    plan numeric DEFAULT 1,
    phone_upm character varying(50) COLLATE pg_catalog."default",
    findex character varying(6) COLLATE pg_catalog."default",
    privilege smallint DEFAULT 0,
    CONSTRAINT dispensary_observation_pk PRIMARY KEY (id),
    CONSTRAINT dispensary_observation_dispensary_observation_list_fk FOREIGN KEY (id_list)
        REFERENCES disp.dispensary_observation_list (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE disp.dispensary_observation
    OWNER to postgres;


CREATE INDEX dispensary_observation_id_history_idx
    ON disp.dispensary_observation USING btree
    (id_history)
    TABLESPACE pg_default;

CREATE INDEX dispensary_observation_id_list_idx
    ON disp.dispensary_observation USING btree
    (id_list)
    TABLESPACE pg_default;

CREATE INDEX dispensary_observation_id_upm_idx
    ON disp.dispensary_observation USING btree
    (id_upm)
    TABLESPACE pg_default;

CREATE INDEX dispensary_observation_mobile_phone_idx
    ON disp.dispensary_observation USING btree
    (mobile_phone COLLATE pg_catalog."default")
    TABLESPACE pg_default;

CREATE INDEX dispensary_observation_rupor_phone_idx
    ON disp.dispensary_observation USING btree
    (rupor_phone COLLATE pg_catalog."default")
    TABLESPACE pg_default;


CREATE INDEX dispensary_observation_surname_idx
    ON disp.dispensary_observation USING btree
    (surname COLLATE pg_catalog."default", name COLLATE pg_catalog."default", patronymic COLLATE pg_catalog."default", birthday)
    TABLESPACE pg_default;



Попробуем установить настройки, но план будет строиться опять ок. 14 часов.
...
Рейтинг: 0 / 0
16.07.2019, 11:45
    #39837798
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
ArkadyL,

90% что у вас проблема с перегруженными дисками которые медленно отвечают
и мониторинга наверняка нет
Вот и тормозит все.
Быстрее чем диски отвечают база работать не может.
А какой размер самой базы у вас?

ps; я про индексы и структуру для таблицы
Index Scan using cards_surname_name1_name2_idx on cards
спрашивал ).
...
Рейтинг: 0 / 0
16.07.2019, 12:51
    #39837852
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
Размер базы 70Гб.
И мониторинга нет, как и специалистов по Postgres.
А индекс существует.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
CREATE TABLE public.cards
(
    datetr date,
    numtr character varying(16) COLLATE pg_catalog."default",
    whorefuse character varying(20) COLLATE pg_catalog."default",
    subnumtr numeric(1,0),
    reciever character varying(20) COLLATE pg_catalog."default",
    payer character varying(20) COLLATE pg_catalog."default",
    tmo character varying(20) COLLATE pg_catalog."default",
    surname character varying(40) COLLATE pg_catalog."default",
    name1 character varying(30) COLLATE pg_catalog."default",
    name2 character varying(30) COLLATE pg_catalog."default",
    birthday date,
    age numeric(3,0),
    sex character varying(1) COLLATE pg_catalog."default",
    hsnet character varying(1) COLLATE pg_catalog."default",
    polis_s character varying(20) COLLATE pg_catalog."default",
    polis_n character varying(20) COLLATE pg_catalog."default",
    polis_w character varying(20) COLLATE pg_catalog."default",
    pasp_s character varying(20) COLLATE pg_catalog."default",
    pasp_n character varying(20) COLLATE pg_catalog."default",
    street character varying(40) COLLATE pg_catalog."default",
    streetype character varying(15) COLLATE pg_catalog."default",
    area character varying(3) COLLATE pg_catalog."default",
    house character varying(17) COLLATE pg_catalog."default",
    korp character varying(20) COLLATE pg_catalog."default",
    flat numeric(4,0),
    who character varying(4) COLLATE pg_catalog."default",
    "order" character varying(1) COLLATE pg_catalog."default",
    hsobject character varying(20) COLLATE pg_catalog."default",
    depart character varying(20) COLLATE pg_catalog."default",
    profile character varying(8) COLLATE pg_catalog."default",
    profilenet character varying(1) COLLATE pg_catalog."default",
    proftype character varying(1) COLLATE pg_catalog."default",
    complexity character varying(1) COLLATE pg_catalog."default",
    datein date,
    dateout date,
    amount numeric(5,1),
    outcome character varying(1) COLLATE pg_catalog."default",
    diagnprev character varying(17) COLLATE pg_catalog."default",
    diagnosis character varying(17) COLLATE pg_catalog."default",
    history character varying(20) COLLATE pg_catalog."default",
    remark character varying(2000) COLLATE pg_catalog."default",
    tmonth character varying(2) COLLATE pg_catalog."default",
    pin integer,
    typeins character varying(1) COLLATE pg_catalog."default",
    sum numeric(11,2),
    sum_n numeric(11,2),
    reftype character varying(3) COLLATE pg_catalog."default",
    cardflags numeric(4,0),
    gosptype character varying(1) COLLATE pg_catalog."default",
    card_id character varying(8) COLLATE pg_catalog."default",
    acntdate date,
    ctrldate date,
    id_account character varying(20) COLLATE pg_catalog."default",
    id_patient character varying(20) COLLATE pg_catalog."default",
    id_case character varying(20) COLLATE pg_catalog."default",
    id_service character varying(20) COLLATE pg_catalog."default",
    id_srv_pnt character varying(20) COLLATE pg_catalog."default",
    id_refuse numeric(10,0),
    ref_act character varying(16) COLLATE pg_catalog."default",
    act_date date,
    id_ref_obj numeric(10,0),
    obj_type numeric(2,0),
    ref_date date,
    case_payer character varying(20) COLLATE pg_catalog."default",
    is_work numeric(1,0),
    numpay character varying(17) COLLATE pg_catalog."default",
    datepay date,
    address character varying(200) COLLATE pg_catalog."default",
    okato character varying(3) COLLATE pg_catalog."default",
    c_datein date,
    vis_count numeric(10,0),
    id_prvs numeric(10,0),
    ksg_type numeric(1,0),
    id_pat_cat numeric(2,0),
    polis_beg date,
    polis_end date,
    oksm character varying(3) COLLATE pg_catalog."default",
    id_smo_r numeric(5,0),
    street_r character varying(150) COLLATE pg_catalog."default",
    street_typ numeric(2,0),
    kladr character varying(13) COLLATE pg_catalog."default",
    cod_z integer,
    case_vmp numeric(4,0),
    case_ump numeric(4,0),
    case_is_crim integer,
    serv_card_type character varying(5) COLLATE pg_catalog."default",
    vid_vme integer,
    case_form_mp integer,
    case_vid_hmp character varying(50) COLLATE pg_catalog."default",
    case_method_hmp integer,
    case_disp_type character varying(50) COLLATE pg_catalog."default",
    case_disp_result integer,
    case_cast integer,
    case_prvs_direct character varying(50) COLLATE pg_catalog."default",
    case_goal_direct character varying(50) COLLATE pg_catalog."default",
    serv_count numeric(15,2),
    serv_amount integer,
    pat_vnov_d character varying(50) COLLATE pg_catalog."default",
    serv_goal character varying(50) COLLATE pg_catalog."default",
    case_goal character varying(50) COLLATE pg_catalog."default",
    id_forming integer,
    form_code character varying(50) COLLATE pg_catalog."default",
    case_lpu_direct character varying(50) COLLATE pg_catalog."default",
    case_lpu_direct_name character varying(250) COLLATE pg_catalog."default",
    case_qresult79 integer,
    case_isrepeat character varying(50) COLLATE pg_catalog."default",
    id_lpu_out character varying(50) COLLATE pg_catalog."default",
    id_lpu_in character varying(50) COLLATE pg_catalog."default",
    serv_has_refuse character varying(50) COLLATE pg_catalog."default",
    serv_tariff character varying(50) COLLATE pg_catalog."default",
    plat character varying(50) COLLATE pg_catalog."default",
    code_mo character varying(50) COLLATE pg_catalog."default",
    smo_nreestr character varying(50) COLLATE pg_catalog."default",
    serv_isrepeat character varying(50) COLLATE pg_catalog."default",
    serv_id_doctor character varying(50) COLLATE pg_catalog."default",
    serv_lpu_dept character varying(50) COLLATE pg_catalog."default",
    serv_lpu_podr_name character varying(50) COLLATE pg_catalog."default",
    serv_lpu_podr character varying(50) COLLATE pg_catalog."default",
    serv_is_main character varying(50) COLLATE pg_catalog."default",
    serv_prvs79 character varying(50) COLLATE pg_catalog."default",
    serv_idprmp character varying(50) COLLATE pg_catalog."default",
    case_dateend character varying(50) COLLATE pg_catalog."default",
    serv_ischild character varying(50) COLLATE pg_catalog."default",
    case_fin_type character varying(50) COLLATE pg_catalog."default",
    case_id_doctor character varying(50) COLLATE pg_catalog."default",
    case_lpu_dept_name character varying(50) COLLATE pg_catalog."default",
    case_lpu_dept character varying(50) COLLATE pg_catalog."default",
    case_lpu_podr_name character varying(50) COLLATE pg_catalog."default",
    case_lpu_podr character varying(50) COLLATE pg_catalog."default",
    case_ischild character varying(50) COLLATE pg_catalog."default",
    case_sppay character varying(50) COLLATE pg_catalog."default",
    case_prmp79_name character varying(50) COLLATE pg_catalog."default",
    case_prmp79 character varying(50) COLLATE pg_catalog."default",
    case_dss character varying(50) COLLATE pg_catalog."default",
    case_dsmain character varying(50) COLLATE pg_catalog."default",
    case_dsp character varying(50) COLLATE pg_catalog."default",
    case_exitus79 character varying(50) COLLATE pg_catalog."default",
    pat_remark character varying(1000) COLLATE pg_catalog."default",
    case_prvs79 character varying(250) COLLATE pg_catalog."default",
    pat_lgot_cat_list character varying(10) COLLATE pg_catalog."default",
    case_inv smallint,
    case_p_per smallint,
    srv_npl smallint,
    talon_d date,
    talon_p date,
    talon_n character varying(30) COLLATE pg_catalog."default",
    case_vbr smallint,
    case_p_otk smallint,
    ds1_pr smallint,
    pr_d_n smallint,
    ds2_n character varying(50) COLLATE pg_catalog."default",
    id integer NOT NULL DEFAULT nextval('cards_id_seq'::regclass),
    vid character varying(1) COLLATE pg_catalog."default",
    npr_date date,
    kd integer,
    vb_p integer,
    id_bed_profile integer,
    profil_k integer,
    case_id_p_cel integer,
    serv_id_p_cel integer,
    reab integer,
    case_p_cel numeric(15,2),
    serv_p_cel numeric(15,2),
    ds_onk integer,
    isonk_sl integer,
    case_order79 smallint
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

CREATE INDEX c_id_account_idx
    ON public.cards USING btree
    (id_account COLLATE pg_catalog."default")
    TABLESPACE pg_default;


CREATE INDEX cards_acntdate_idx
    ON public.cards USING btree
    (acntdate)
    TABLESPACE pg_default;

CREATE INDEX cards_birthday_idx
    ON public.cards USING btree
    (birthday)
    TABLESPACE pg_default;

CREATE INDEX cards_ctrldate_idx
    ON public.cards USING btree
    (ctrldate)
    TABLESPACE pg_default;

CREATE INDEX cards_id_case_idx
    ON public.cards USING btree
    (id_case COLLATE pg_catalog."default")
    TABLESPACE pg_default;

CREATE INDEX cards_id_idx
    ON public.cards USING btree
    (id)
    TABLESPACE pg_default;

CREATE INDEX cards_id_service2_idx
    ON public.cards USING btree
    (id_service COLLATE pg_catalog."default")
    TABLESPACE pg_default;


CREATE INDEX cards_surname_name1_name2_idx
    ON public.cards USING btree
    (surname COLLATE pg_catalog."default", name1 COLLATE pg_catalog."default", name2 COLLATE pg_catalog."default")
    TABLESPACE pg_default;
...
Рейтинг: 0 / 0
16.07.2019, 13:03
    #39837858
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с участием таблиц из разных схем
А почему именно
Код: sql
1.
Index Scan using cards_surname_name1_name2_idx on cards 


Ведь проверяю наличие по EXISTS в другой таблице, где и нужен индекс?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос с участием таблиц из разных схем / 25 сообщений из 41, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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