Rob*_*sen 5 postgresql performance upgrade postgresql-9.3 postgresql-9.4 postgresql-performance
我们最近将一个 Amazon RDS 实例从 PostgreSQL 9.3 升级到 9.4。升级过程中没有出现问题,之后我们就跑了VACUUM ANALYZE
。性能现在非常缓慢。下面是一个在 9.3 中花费几分之一秒的查询示例:
EXPLAIN ANALYZE SELECT room_name, id FROM common_activityinstance WHERE started_by_id = 1370408 AND room_name IN ('robcv28', 'foobartest', 'noroster', 'jscode', 'cv28', 'johansencouple', 'lv426', 'johansenfamily', 'johansen') AND end_time IS NULL;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on common_activityinstance (cost=55.63..59.65 rows=1 width=13) (actual time=1.082..1.082 rows=0 loops=1)
Recheck Cond: ((started_by_id = 1370408) AND (room_name = ANY ('{robcv28,foobartest,noroster,jscode,cv28,johansencouple,lv426,johansenfamily,johansen}'::text[])))
Filter: (end_time IS NULL)
Rows Removed by Filter: 925
-> BitmapAnd (cost=55.63..55.63 rows=1 width=0) (actual time=0.349..0.349 rows=0 loops=1)
-> Bitmap Index Scan on common_activityinstance_started_by_id (cost=0.00..5.53 rows=146 width=0) (actual time=0.122..0.122 rows=927 loops=1)
Index Cond: (started_by_id = 1370408)
-> Bitmap Index Scan on common_activityinstance_room_name_c1f9997a_like (cost=0.00..49.85 rows=1171 width=0) (actual time=0.171..0.171 rows=926 loops=1)
Index Cond: (room_name = ANY ('{robcv28,foobartest,noroster,jscode,cv28,johansencouple,lv426,johansenfamily,johansen}'::text[]))
Total runtime: 1.116 ms
(10 rows)
Run Code Online (Sandbox Code Playgroud)
这个相同的查询现在在 9.4 中要慢得多:
EXPLAIN ANALYZE SELECT room_name, id FROM common_activityinstance WHERE started_by_id = 1370408 AND room_name IN ('robcv28', 'foobartest', 'noroster', 'jscode', 'cv28', 'johansencouple', 'lv426', 'johansenfamily', 'johansen') AND end_time IS NULL;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on common_activityinstance (cost=10157.60..14038.97 rows=45 width=36) (actual time=3923.011..3923.011 rows=0 loops=1)
Recheck Cond: ((started_by_id = 1370408) AND (end_time IS NULL))
Rows Removed by Index Recheck: 698
Filter: (room_name = ANY ('{robcv28,foobartest,noroster,jscode,cv28,johansencouple,lv426,johansenfamily,johansen}'::text[]))
Heap Blocks: exact=634
-> BitmapAnd (cost=10157.60..10157.60 rows=991 width=0) (actual time=3917.278..3917.278 rows=0 loops=1)
-> Bitmap Index Scan on common_activityinstance_started_by_id (cost=0.00..3282.60 rows=198155 width=0) (actual time=0.245..0.245 rows=927 loops=1)
Index Cond: (started_by_id = 1370408)
-> Bitmap Index Scan on end_time_id (cost=0.00..6874.73 rows=198155 width=0) (actual time=3915.565..3915.565 rows=1674860 loops=1)
Index Cond: (end_time IS NULL)
Planning time: 2.457 ms
Execution time: 3923.065 ms
(12 rows)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么查询计划不同。这只是一个例子——另一个查询在我放弃并停止之前运行了 15 分钟。
我想也许索引有问题,所以我也做了,REINDEX DATABASE
但没有帮助。
有任何想法吗?
由于整个数据库似乎都受到影响,我决定尝试使用VACUUM (FULL, ANALYZE)
. 虽然花了 50 小时 4 分钟才完成,但完全值得。我们的数据库磁盘使用量从 1259 GB 下降到 747 GB(回收了高达 512 GB 的空间),并且全面的性能已恢复到升级前的水平。
归档时间: |
|
查看次数: |
1794 次 |
最近记录: |