12. 02. 查詢優化
a) 透過 pg_stat_activity 找到慢查詢
• 語法
• 選擇 datname,usename,
current_query 執行
• 歡迎參與 PG 正體中文手冊
https://docs.postgresql.tw/server-administration/monitoring-database-
activity/the-statistics-collector#27.2.3.-pg_stat_activity
Taiwan PostgreSQL User Group 12
7/30/2022
select * from pg_stat_activity;
postgres=# SELECT
datname,usename,current_query FROM
pg_stat_activity ;
datname | usename | current_query
----------+----------+---------------------
-----------------------------------------
postgres | postgres | SELECT
datname,usename,current_query FROM
pg_stat_activity ;
postgres | joe | <IDLE> (2 rows)
13. 02. 查詢優化
a) 透過 pg_stat_activity 找到慢查詢
• 檢視耗時較長的查詢
• 如右例: runtime 34s
Taiwan PostgreSQL User Group 13
7/30/2022
select
current_timestamp - query_start as
runtime, datname, usename,
current_query from
pg_stat_activity
where current_query != '<IDLE>'
order by 1 desc;
18. 02. 查詢優化
d) 設定 materialized view
Taiwan PostgreSQL User Group 18
7/30/2022
https://docs.microsoft.com/zh-tw/azure/architecture/patterns/_images/materialized-view-pattern-diagram.png
在COSCUP 2018 的「What‘s
new in PostgreSQL 11 ?」找得
到
19. 02. 查詢優化
e) 針對 INSERT 優化,TimescaleDB提出下列做法
a. 適度使用索引
b. 重新考慮外鍵約束
c. 避免不必要的 UNIQUE KEY
d. 為 WAL 與資料使用單獨的硬碟
e. 使用高性能磁盤: SSD
f. 使用平行寫入
g. 批量插入(Batch INSERT)
h. 正確配置shared_buffers
i. 在 Linux 主機上使用 TimescaleDB Docker Image
j. 以鬆散的時間順序寫入數據
k. 避免“太大”的Chunk (TimescaleDB)
l. 避免太多或太小的Chunk (TimescaleDB)
Taiwan PostgreSQL User Group 19
7/30/2022
https://www.timescale.com/blog/13-tips-to-
improve-postgresql-insert-performance/
shared_buffers 的合理起始值是系統記憶體的 25%
21. 03. 參數配置
Taiwan PostgreSQL User Group 21
7/30/2022
常用參數配置
Background Writer配置:過度設定會有不必要的IO
優化WAL的相關參數
maintenance_work_mem autovacuum_work_mem
22. 03. 參數配置
Taiwan PostgreSQL User Group 22
2022/7/30
https://github.com/le0pard/pgtune
https://pgtune.leopard.in.ua/
調校的參考工具 PGTune
Tuning PostgreSQL config by your hardware
23. 03. 參數配置
Taiwan PostgreSQL User Group 23
2022/7/30
# DB Version: 14
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 24 GB
# CPUs num: 2
# Connections num: 1000
# Data Storage: ssd
max_connections = 1000
shared_buffers = 6GB
effective_cache_size = 18GB
maintenance_work_mem = 1536MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 6291kB
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 2
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
max_parallel_maintenance_workers = 1
調校的參考工具 PGTune (cont.)
24. 03. 參數配置
Taiwan PostgreSQL User Group 24
2022/7/30
# WARNING
# this tool not being optimal
# for very high memory systems
# DB Version: 14
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 128 GB
# CPUs num: 8
# Connections num: 1000
# Data Storage: ssd
max_connections = 1000
shared_buffers = 32GB
effective_cache_size = 96GB
maintenance_work_mem = 2GB
checkpoint_completion_target = 0.9
# DB Version: 14
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 24 GB
# CPUs num: 2
# Connections num: 1000
# Data Storage: ssd
ALTER SYSTEM SET
max_connections = '1000';
ALTER SYSTEM SET
shared_buffers = '6GB';
ALTER SYSTEM SET
effective_cache_size = '18GB';
ALTER SYSTEM SET
maintenance_work_mem = '1536MB';
ALTER SYSTEM SET
checkpoint_completion_target = '0.9';
ALTER SYSTEM SET
wal_buffers = '16MB';
ALTER SYSTEM SET
default_statistics_target = '100';
建議用來評估
RAM 100GB內
調校的參考工具 PGTune (cont.)