Застрял с проблемой тайм-аута.Вот запрос, я получаю тайм-аут для: - PullRequest
0 голосов
/ 06 декабря 2018

Я получаю эту ошибку времени ожидания:

Сообщение: SQLSTATE [57014]: Запрос отменен: 7 ОШИБКА: отмена оператора из-за времени ожидания оператора

ЭтоТайм-аут запроса:

SELECT
    log.id,
    integration.id AS intid,
    log.integration_id AS integration_id,
    integration.name,
    log.createddate
FROM integration log
    LEFT JOIN integration__sf integration on (  integration.id = log.integration_id)                        
    LEFT JOIN property prop on ( log.property_id = prop.id )
    LEFT JOIN account acc on ( acc.sfid = integration.account )
WHERE
    log.id IS NOT NULL
    AND log.script_type = 'Pull'
    AND log.script_name = 'ModifyTags' 
    AND log.createddate >= '2018-11-01 00:00:00' 
    AND log.createddate <= '2018-11-30 23:59:59'
ORDER BY log.id desc  LIMIT 100 OFFSET 0;

Есть ли возможность оптимизировать этот запрос?

Вот вывод EXPLAIN (ANALYZE, BUFFERS):

"Limit  (cost=30809.27..30820.93 rows=100 width=262) (actual time=11.793..11.803 rows=21 loops=1)"
"  Buffers: shared hit=5 read=935"
"  ->  Gather Merge  (cost=30809.27..31199.66 rows=3346 width=262) (actual time=11.791..11.799 rows=21 loops=1)"
"        Workers Planned: 2"
"        Workers Launched: 2"
"        Buffers: shared hit=5 read=935"
"        ->  Sort  (cost=29809.24..29813.43 rows=1673 width=262) (actual time=6.844..6.844 rows=7 loops=3)"
"              Sort Key: log.id DESC"
"              Sort Method: quicksort  Memory: 27kB"
"              Buffers: shared hit=1967 read=937"
"              ->  Hash Left Join  (cost=3003.36..29719.67 rows=1673 width=262) (actual time=6.774..6.819 rows=7 loops=3)"
"                    Hash Cond: ((integration.account__c)::text = (acc.sfid)::text)"
"                    Buffers: shared hit=1953 read=937"
"                    ->  Nested Loop Left Join  (cost=2472.13..29167.33 rows=1673 width=254) (actual time=3.643..3.686 rows=7 loops=3)"
"                          Buffers: shared hit=969 read=468"
"                          ->  Hash Left Join  (cost=2471.71..17895.82 rows=1673 width=228) (actual time=3.635..3.673 rows=7 loops=3)"
"                                Hash Cond: (log.integration_id = integration.id)"
"                                Buffers: shared hit=969 read=468"
"                                ->  Parallel Bitmap Heap Scan on integration_log log  (cost=1936.93..17339.92 rows=1673 width=148) (actual time=0.097..0.132 rows=7 loops=3)"
"                                      Recheck Cond: (((script_name)::text = 'ModifyTags'::text) AND ((script_type)::text = 'Pull'::text) AND (createddate >= '2018-11-01 00:00:00+05:30'::timestamp with time zone) AND (createddate <= '2018-12-07 23:59:59+05: (...)"
"                                      Filter: (id IS NOT NULL)"
"                                      Heap Blocks: exact=19"
"                                      Buffers: shared read=26"
"                                      ->  Bitmap Index Scan on ah_idx_integeration_log_script_name  (cost=0.00..1935.93 rows=4016 width=0) (actual time=0.201..0.201 rows=21 loops=1)"
"                                            Index Cond: (((script_name)::text = 'ModifyTags'::text) AND ((script_type)::text = 'Pull'::text) AND (createddate >= '2018-11-01 00:00:00+05:30'::timestamp with time zone) AND (createddate <= '2018-12-07 23:59:59 (...)"
"                                            Buffers: shared read=5"
"                                ->  Hash  (cost=483.79..483.79 rows=4079 width=80) (actual time=3.463..3.463 rows=4079 loops=3)"
"                                      Buckets: 4096  Batches: 1  Memory Usage: 481kB"
"                                      Buffers: shared hit=887 read=442"
"                                      ->  Seq Scan on integration__c integration  (cost=0.00..483.79 rows=4079 width=80) (actual time=0.012..2.495 rows=4079 loops=3)"
"                                            Buffers: shared hit=887 read=442"
"                          ->  Index Scan using property__c_pkey on property__c prop  (cost=0.42..6.74 rows=1 width=30) (actual time=0.001..0.001 rows=0 loops=21)"
"                                Index Cond: (log.property_id = id)"
"                    ->  Hash  (cost=498.88..498.88 rows=2588 width=42) (actual time=3.098..3.098 rows=2577 loops=3)"
"                          Buckets: 4096  Batches: 1  Memory Usage: 220kB"
"                          Buffers: shared hit=950 read=469"
"                          ->  Seq Scan on account acc  (cost=0.00..498.88 rows=2588 width=42) (actual time=0.011..2.531 rows=2577 loops=3)"
"                                Buffers: shared hit=950 read=469"
"Planning time: 2.513 ms"
"Execution time: 13.904 ms"

На самом делеУ меня есть решение по оптимизации, здесь запрос будет выглядеть следующим образом.

SELECT
    log.id,
    integration.id AS intid,
    log.integration_id AS integration_id,
    integration.name,
    log.createddate
FROM integration log
    LEFT JOIN integration__sf integration on (  integration.id = log.integration_id)                        
    LEFT JOIN property prop on ( log.property_id = prop.id )
    LEFT JOIN account acc on ( acc.sfid = integration.account AND prop.account = acc.sfid AND prop.group_membership = integration.grouping)
WHERE log.id IS NOT NULL
    AND log.script_type = 'Pull'
    AND log.script_name = 'ModifyTags' 
    AND log.createddate >= '2018-11-01 00:00:00' 
    AND log.createddate <= '2018-11-30 23:59:59'
ORDER BY log.id desc  LIMIT 100 OFFSET 0

Если вы предложите больше, я буду благодарен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...