powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос с участием таблиц из разных схем
16 сообщений из 41, страница 2 из 2
Запрос с участием таблиц из разных схем
    #39837913
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите, что с СХД на котором крутиться ВМ.
Помониторте саму ВМ средствами виртуализации.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39837983
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLА почему именно
Код: sql
1.
Index Scan using cards_surname_name1_name2_idx on cards 


Ведь проверяю наличие по EXISTS в другой таблице, где и нужен индекс?

Вы неправильно читаете план.
Там запрос база выполняет начиная от dispensary_observation_list и далее уже присоединяет к этому cards.

Дальше надо думать какой индекс на cards нужен чтобы оно лучше работало (преполагая конечно что диски у вас в ноль не ушатаны).

На вскидку без серьезного анализа могу посоветовать заменить индекс
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;

на (surname, name1, name2, birthday, ctrldate) думаю он уже даст достаточную селективность.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838308
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.
44.
45.
46.
Group  (cost=1252404.38..1252436.17 rows=1156 width=39) (actual time=2351579.317..2351700.645 rows=49544 loops=1)
  Group Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
  Buffers: shared hit=1129769 read=2400772, temp read=3591 written=3606
  ->  Sort  (cost=1252404.38..1252407.27 rows=1156 width=35) (actual time=2351568.373..2351597.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=1129769 read=2400772, temp read=3591 written=3606
        ->  Hash Join  (cost=144175.71..1252345.57 rows=1156 width=35) (actual time=6768.502..2350236.548 rows=66018 loops=1)
              Hash Cond: ((cards.profile)::text = (profilerep.id_profile)::text)
              Buffers: shared hit=1129769 read=2400772, temp read=3189 written=3204
              ->  Nested Loop  (cost=144169.85..1252265.94 rows=16588 width=41) (actual time=6768.251..2349797.582 rows=66018 loops=1)
                    Buffers: shared hit=1129768 read=2400771, temp read=3189 written=3204
                    ->  Unique  (cost=144169.29..145892.22 rows=137835 width=31) (actual time=6745.948..11156.044 rows=310351 loops=1)
                          Buffers: shared hit=2 read=31025, temp read=3189 written=3204
                          ->  Sort  (cost=144169.29..144513.87 rows=137835 width=31) (actual time=6745.920..10302.139 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=8316.43..129102.79 rows=137835 width=31) (actual time=4907.659..5545.996 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.021..0.025 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=8316.43..127570.11 rows=153150 width=35) (actual time=4907.627..5452.442 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..8278.15 rows=161296 width=0) (actual time=4895.196..4895.196 rows=403120 loops=1)
                                                  Index Cond: (id_list = dispensary_observation_list.id)
                                                  Buffers: shared read=3971
                    ->  Index Scan using cards_surname_name1_name2_idx on cards  (cost=0.56..8.02 rows=1 width=41) (actual time=6.083..7.529 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) AND (birthday = dispensary_observation.birthday) AND (ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
                          Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text))
                          Rows Removed by Filter: 7
                          Buffers: shared hit=1129766 read=2369746
              ->  Hash  (cost=5.07..5.07 rows=63 width=6) (actual time=0.224..0.224 rows=93 loops=1)
                    Buckets: 1024  Batches: 1  Memory Usage: 12kB
                    Buffers: shared hit=1 read=1
                    ->  Seq Scan on profilerep  (cost=0.00..5.07 rows=63 width=6) (actual time=0.063..0.170 rows=93 loops=1)
                          Filter: ((prevexam >= '1'::numeric) AND (prevexam <= '3'::numeric))
                          Rows Removed by Filter: 158
                          Buffers: shared hit=1 read=1
Planning time: 93.237 ms
Execution time: 2351724.840 ms
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838352
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А покажите план для


Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex
            FROM public.cards
            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'                                                                   
            GROUP BY cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex;
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838382
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.
Group  (cost=3482324.04..3485499.76 rows=28043 width=31) (actual time=126379.406..126762.179 rows=77798 loops=1)
  Group Key: surname, name1, name2, birthday, sex
  Buffers: shared hit=1 read=272623
  ->  Gather Merge  (cost=3482324.04..3485206.63 rows=23450 width=31) (actual time=126379.402..126677.743 rows=92832 loops=1)
        Workers Planned: 2
        Workers Launched: 2
        Buffers: shared hit=37 read=763459
        ->  Group  (cost=3481324.02..3481499.89 rows=11725 width=31) (actual time=126347.127..126396.247 rows=30944 loops=3)
              Group Key: surname, name1, name2, birthday, sex
              Buffers: shared hit=37 read=763459
              ->  Sort  (cost=3481324.02..3481353.33 rows=11725 width=31) (actual time=126347.118..126361.606 rows=34630 loops=3)
                    Sort Key: surname, name1, name2, birthday, sex
                    Sort Method: quicksort  Memory: 3680kB
                    Buffers: shared hit=37 read=763459
                    ->  Parallel Bitmap Heap Scan on cards  (cost=159933.39..3480531.57 rows=11725 width=31) (actual time=18710.704..126014.729 rows=34630 loops=3)
                          Recheck Cond: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
                          Rows Removed by Index Recheck: 119541
                          Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text))
                          Rows Removed by Filter: 2715421
                          Heap Blocks: exact=13120 lossy=231152
                          Buffers: shared hit=7 read=763459
                          ->  Bitmap Index Scan on cards_ctrldate_idx  (cost=0.00..159926.36 rows=7399379 width=0) (actual time=17748.707..17748.707 rows=8250155 loops=1)
                                Index Cond: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
                                Buffers: shared hit=1 read=28351
Planning time: 203.058 ms
Execution time: 126780.224 ms
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838396
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLВроде, всё сделал, и индекс тоже.
Execution time: 2351724.840 ms

Ну вот уже стало в 20 раз быстрее.
Дальше надо или думать про более оптимальный индекс или что более важно - про то почему вас диски так тормозят.
Можно еще базе ресурсов больше выделить по памяти чтобы она меньше с диска читала (и настроить ее соответственно).
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838400
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukArkadyLВроде, всё сделал, и индекс тоже.
Execution time: 2351724.840 ms

Ну вот уже стало в 20 раз быстрее.
Дальше надо или думать про более оптимальный индекс или что более важно - про то почему вас диски так тормозят.
Можно еще базе ресурсов больше выделить по памяти чтобы она меньше с диска читала (и настроить ее соответственно).

Кстати... какие настройки random_page_cost/seq_page_cost/effective_cache_size у вашей базы стоят?
Похоже они не соответствуют реальности вообще.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838401
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в какой строчке написано про диски?
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838425
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLА в какой строчке написано про диски?

Ни в какой поскольку итоги с включенным track_io_timing вы не показали.

Но вот чем то другим обьяснить строку

-> Index Scan using cards_surname_name1_name2_idx on cards (cost=0.56..8.02 rows=1 width=41) (actual time=6.083..7.529 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) AND (birthday = dispensary_observation.birthday) AND (ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text))
Rows Removed by Filter: 7

Точнее actual time=6.083..7.529 кроме как тормозными дисками я не могу.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838707
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukArkadyLА в какой строчке написано про диски?

Ни в какой поскольку итоги с включенным track_io_timing вы не показали.

Но вот чем то другим обьяснить строку

-> Index Scan using cards_surname_name1_name2_idx on cards (cost=0.56..8.02 rows=1 width=41) (actual time=6.083..7.529 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) AND (birthday = dispensary_observation.birthday) AND (ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text))
Rows Removed by Filter: 7

Точнее actual time=6.083..7.529 кроме как тормозными дисками я не могу.

SHOW ALL Показывает, что track_io_timing=on. Надо каким-то образом сделать её и в базе?

Ещё мы хотели бы получить доступ к VIEW pg_stat_statements.
Мы видим её, запуская SELECT * FROM pg_views where schemaname='public', но SELECT * from public.pg_stat_statements выдаёт ошибку " SQL Error [55000]: ERROR: pg_stat_statements must be loaded via shared_preload_libraries".
Настройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838722
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLЕщё мы хотели бы получить доступ к VIEW pg_stat_statements.
Мы видим её, запуская SELECT * FROM pg_views where schemaname='public', но SELECT * from public.pg_stat_statements выдаёт ошибку " SQL Error [55000]: ERROR: pg_stat_statements must be loaded via shared_preload_libraries".
Настройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали.

А базу то рестартовали?
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838727
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. Уже многократно.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838736
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLНастройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали.
Проверьте по
Код: sql
1.
select * from pg_settings where name = 'shared_preload_libraries';


Может где случайно переписали значение дальше по конфигу. sourcefile, sourceline подскажут где. Ну и если pending_restart = true - значит базу всё-таки не рестартовали.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838746
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLSHOW ALL Показывает, что track_io_timing=on. Надо каким-то образом сделать её и в базе?


а что показывает
select * from pg_settings where name = 'track_io_timing';
?
Какая версия базы у вас используется (все 3 цифры)?
Какая операционная система?

Очень странно что у вас результаты io timing не показываются.
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838759
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkijArkadyLНастройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали.
Проверьте по
Код: sql
1.
select * from pg_settings where name = 'shared_preload_libraries';


Может где случайно переписали значение дальше по конфигу. sourcefile, sourceline подскажут где. Ну и если pending_restart = true - значит базу всё-таки не рестартовали.

Спасибо! Базу рестартовали, но в указанной строке действительно была ссылка на нечто перезаписывающее config.
pg_stat_statements заработала.

select * from pg_settings where name = 'track_io_timing'; показывает, что поле setting=on

PostgreSQL 10.9 (Ubuntu 10.9-1.pgdg16.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609, 64-bit
...
Рейтинг: 0 / 0
Запрос с участием таблиц из разных схем
    #39838772
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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Group  (cost=3561086.87..3561232.60 rows=1156 width=39) (actual time=32402.488..32529.899 rows=49544 loops=1)
  Group Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
  Buffers: shared hit=111242 read=288972
  I/O Timings: read=20523.304
  ->  Gather Merge  (cost=3561086.87..3561206.58 rows=964 width=35) (actual time=32402.479..32601.142 rows=58911 loops=1)
        Workers Planned: 2
        Workers Launched: 2
        Buffers: shared hit=333878 read=763459
        I/O Timings: read=32541.138
        ->  Group  (cost=3560086.85..3560095.29 rows=482 width=35) (actual time=32365.943..32381.718 rows=19637 loops=3)
              Group Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
              Buffers: shared hit=333878 read=763459
              I/O Timings: read=32541.138
              ->  Sort  (cost=3560086.85..3560088.06 rows=482 width=35) (actual time=32365.938..32369.984 rows=22006 loops=3)
                    Sort Key: cards.surname, cards.name1, cards.name2, cards.birthday, cards.sex, cards.age
                    Sort Method: quicksort  Memory: 2602kB
                    Buffers: shared hit=333878 read=763459
                    I/O Timings: read=32541.138
                    ->  Hash Semi Join  (cost=239228.38..3560065.37 rows=482 width=35) (actual time=19616.814..32267.632 rows=22006 loops=3)
                          Hash Cond: (((cards.surname)::text = (dispensary_observation.surname)::text) AND ((cards.name1)::text = (dispensary_observation.name)::text) AND ((cards.name2)::text = (dispensary_observation.patronymic)::text) AND (cards.birthday = dispensary_observation.birthday))
                          Buffers: shared hit=333834 read=763459
                          I/O Timings: read=32541.138
                          ->  Hash Join  (cost=101935.15..3422585.47 rows=817 width=35) (actual time=18063.736..30636.522 rows=34630 loops=3)
                                Hash Cond: ((cards.profile)::text = (profilerep.id_profile)::text)
                                Buffers: shared hit=67 read=763459
                                I/O Timings: read=32541.138
                                ->  Parallel Bitmap Heap Scan on cards  (cost=101929.29..3422527.47 rows=11725 width=41) (actual time=18063.401..30577.108 rows=34630 loops=3)
                                      Recheck Cond: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
                                      Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text))
                                      Rows Removed by Filter: 2715421
                                      Heap Blocks: exact=260621
                                      Buffers: shared hit=7 read=763459
                                      I/O Timings: read=32541.138
                                      ->  Bitmap Index Scan on cards_ctrldate_idx  (cost=0.00..101922.26 rows=7399379 width=0) (actual time=16952.215..16952.215 rows=8250155 loops=1)
                                            Index Cond: ((ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date))
                                            Buffers: shared hit=1 read=28351
                                            I/O Timings: read=15130.423
                                ->  Hash  (cost=5.07..5.07 rows=63 width=6) (actual time=0.228..0.228 rows=93 loops=3)
                                      Buckets: 1024  Batches: 1  Memory Usage: 12kB
                                      Buffers: shared hit=6
                                      ->  Seq Scan on profilerep  (cost=0.00..5.07 rows=63 width=6) (actual time=0.071..0.174 rows=93 loops=3)
                                            Filter: ((prevexam >= '1'::numeric) AND (prevexam <= '3'::numeric))
                                            Rows Removed by Filter: 158
                                            Buffers: shared hit=6
                          ->  Hash  (cost=134536.52..134536.52 rows=137835 width=31) (actual time=1551.910..1551.910 rows=310354 loops=3)
                                Buckets: 524288 (originally 262144)  Batches: 1 (originally 1)  Memory Usage: 23720kB
                                Buffers: shared hit=333745
                                ->  Hash Join  (cost=1.19..134536.52 rows=137835 width=31) (actual time=0.156..1316.028 rows=396425 loops=3)
                                      Hash Cond: (dispensary_observation.id_list = dispensary_observation_list.id)
                                      Buffers: shared hit=333745
                                      ->  Seq Scan on dispensary_observation  (cost=0.00..129383.75 rows=1378351 width=35) (actual time=0.033..1025.642 rows=1366060 loops=3)
                                            Filter: (plan = '1'::numeric)
                                            Rows Removed by Filter: 75610
                                            Buffers: shared hit=333714
                                      ->  Hash  (cost=1.18..1.18 rows=1 width=4) (actual time=0.020..0.020 rows=1 loops=3)
                                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                            Buffers: shared hit=3
                                            ->  Seq Scan on dispensary_observation_list  (cost=0.00..1.18 rows=1 width=4) (actual time=0.015..0.016 rows=1 loops=3)
                                                  Filter: ((year = 2019) AND (id_type = 2) AND (flag = 1))
                                                  Rows Removed by Filter: 9
                                                  Buffers: shared hit=3
Planning time: 140.122 ms
Execution time: 32647.494 ms
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос с участием таблиц из разных схем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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