Мы создали демонстрационную базу данных 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, но разная производительность?!