Две идентичные базы данных дают разные планы выполнения - PullRequest
0 голосов
/ 27 апреля 2020

Мы создали демонстрационную базу данных Postgress SQL в DO, чтобы протестировать производительность, настроить ее с помощью индексов и т. Д. c. После того, как мы достигли хороших результатов производительности, мы решили свернуть предварительную подготовку идентичной базы данных на новом сервере баз данных Postgress с теми же 16 ГБ оперативной памяти и 6 CPU на SSD, создали базу данных, используя сценарий создания и импортированные данные. Мы не использовали PDump.

К нашему удивлению, запрос, который мы предъявляем к обеим базам данных, в предварительной подготовке базы данных выполняется в 10 раз медленнее, чем в демонстрационной.

EXPLAIN (buffers, analyse, timing )
SELECT
    DATE("DateStamp"), "Result", Count(*), Sum("ConversionCost")
FROM "Log"
WHERE "UserId" = 7841
  AND "DateStamp" > '2019-01-02'
  AND "DateStamp" < '2020-02-26'
GROUP BY 1,2

План выполнения для демонстрационной базы данных

Finalize GroupAggregate  (cost=252123.56..660750.27 rows=3206490 width=21) (actual time=546.500..811.119 rows=714 loops=1)
"  Group Key: (date(""DateStamp"")), ""Result"""
"  Buffers: shared hit=5544, temp read=3903 written=3922"
  ->  Gather Merge  (cost=252123.56..593948.38 rows=2672076 width=21) (actual time=545.942..810.651 rows=1811 loops=1)
        Workers Planned: 2
        Workers Launched: 2
"        Buffers: shared hit=16004, temp read=11035 written=11090"
        ->  Partial GroupAggregate  (cost=251123.54..284524.49 rows=1336038 width=21) (actual time=539.140..793.857 rows=604 loops=3)
"              Group Key: (date(""DateStamp"")), ""Result"""
"              Buffers: shared hit=16004, temp read=11035 written=11090"
              ->  Sort  (cost=251123.54..254463.63 rows=1336038 width=9) (actual time=539.092..657.869 rows=1064916 loops=3)
"                    Sort Key: (date(""DateStamp"")), ""Result"""
                    Sort Method: external merge  Disk: 23992kB
                    Worker 0:  Sort Method: external merge  Disk: 22808kB
                    Worker 1:  Sort Method: external merge  Disk: 22168kB
"                    Buffers: shared hit=16004, temp read=11035 written=11090"
                    ->  Parallel Index Only Scan using "IX_Log_UserId-all" on "Log"  (cost=0.56..72778.81 rows=1336038 width=9) (actual time=0.051..250.464 rows=1064916 loops=3)
                          Index Cond: (("UserId" = 7841) AND ("DateStamp" > '2019-01-02 00:00:00'::timestamp without time zone) AND ("DateStamp" < '2020-02-26 00:00:00'::timestamp without time zone))
                          Heap Fetches: 449
                          Buffers: shared hit=15974
Planning Time: 0.144 ms
Execution Time: 815.399 ms

https://explain.depesz.com/s/IBYt

План выполнения для промежуточной базы данных

GroupAggregate  (cost=1682917.01..1760593.98 rows=3107079 width=21) (actual time=7180.989..7858.667 rows=714 loops=1)
"  Group Key: (date(""DateStamp"")), ""Result"""
"  Buffers: shared hit=21820 read=860249, temp read=8610 written=8627"
  ->  Sort  (cost=1682917.01..1690684.71 rows=3107079 width=9) (actual time=7180.970..7506.138 rows=3194749 loops=1)
"        Sort Key: (date(""DateStamp"")), ""Result"""
        Sort Method: external merge  Disk: 68880kB
"        Buffers: shared hit=21820 read=860249, temp read=8610 written=8627"
        ->  Index Scan using "IX_Log_UserId" on "Log"  (cost=0.56..1317519.17 rows=3107079 width=9) (actual time=0.077..6423.617 rows=3194749 loops=1)
              Index Cond: (("UserId" = 7841) AND ("DateStamp" > '2019-01-02 00:00:00'::timestamp without time zone) AND ("DateStamp" < '2020-02-26 00:00:00'::timestamp without time zone))
              Buffers: shared hit=21820 read=860249
Planning Time: 0.169 ms
Execution Time: 7868.180 ms

https://explain.depesz.com/s/SDae

Есть идеи, где искать? Те же ресурсы, та же база данных с идентичными индексами, тот же запрос SQL, но разная производительность?!

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