常用數據庫參數調優
更新時間 2025-02-05 09:36:59
最近更新時間: 2025-02-05 09:36:59
分享文章
本頁介紹天翼云TeleDB數據庫常用的配置參數調優說明。
常用數據庫性能相關參數
| 參數 | 類型 | 用途 | 默認值/最大值 | 生效****方式 |
|---|---|---|---|---|
| shared_buffers | integer | 設置數據庫服務器將使用的共享內存緩沖區大小,這個值一般建議1/4物理內存大小。由于進程之間需要同步共享內存信息、且PG還會使用操作系統緩存,因此不宜太大。需要根據內存命中率的情況適當調整該參數 | 資源模板的1/4 | restart |
| temp_buffers | integer | 連接本地內存,僅用于訪問臨時表,并不是設置多大就分配多大,而是分配一個buffer指針,按需擴展到temp_buffers。 | 8MB | userset |
| work_mem | integer | 連接本地內存,用于連接的一些排序、hash table等操作,如果work_mem不夠,則會申請臨時磁盤空間。 | 4MB | userset |
| maintenance_work_mem | integer | 維護操作能申請的最大內存,例如:VACUUM, CREATE INDEX,提高會加速這些操作,包括pg_restore操作。注意autovacuum_work_mem如果沒有設置,則會使用這個設置,最多能申請autovacuum_max_workers*autovacuum_work_mem大小內存。因此建議在做維護操作的連接單獨設置,并給autovacuum進程單獨設置autovacuum_work_mem。 | 64MB | userset |
| vacuum_cost_limit | integer | 累積的cost消耗到這個值后,vacuum休眠vacuum_cost_delay(默認為0,不休眠)時間。 | PG為200,TDSQL-PG默認為10000 | restart |
| autovacuum_vacuum_cost_delay | floating point | 當前所有autovacuum進程積累的cost消耗到autovacuum_vacuum_cost_limit后休眠的時間。 | PG為2ms,TDSQL-PG默認為20ms | restart |
| wal_compression | boolean | full page image 在寫入到WAL中進行壓縮,目前是gzip壓縮方式,壓縮比能到30%。對wal日志比較大系統有提升,但會消耗CPU,一般在5%左右,不同CPU影響程度不一樣。 | off | restart |
| checkpoint_timeout | integer | 兩次自動checkpoint間隔時間,設置越大故障時間越長,但IO可能會更平滑,但不能一味設置很大,要看系統的IO、業務壓力情況而定。 | PG為5min,TDSQL-PG默認為10min | restart |
| checkpoint_completion_target | floating point | checkpoint完成目標,盡量讓checkpoint在checkpoint_completion_target * checkpoint_timeout時間內完成。 如果checkpoint時間太短,會讓checkpoint進入急速模式,IO壓力驟增。 | PG為0.5min,TDSQL-PG默認為0.93 | restart |
| random_page_cost | integer | 隨機掃描一個塊的代價基準值,建議值:SATA/SAS盤: 4SSD:2Nvme SSD:1 | PG為4,TDSQL-PG默認為2 | restart |
| effective_cache_size | integer | 生成執行計劃時,評估數據庫能用的緩沖內存大小(shared_buffers+操作系統的文件系統緩存),不會實際占用。值越大更偏向于走索引掃描,一般可設置總內存- shared_buffers - 業務內存。 | 4GB | restart |
| log_min_duration_statement | integer | 執行時間超過log_min_duration_statement的SQL將記錄到數據庫運行日志中。 | PG為-1,TDSQL-PG默認為10000 | reload |
| log_statement | enum | 設置數據庫對那些類型SQL進行日志記錄。推薦設置為DDL,加上log_min_duration_statement針對慢SQL的設置即可。 | PG為none,TDSQL-PG默認為ddl | reload |
| autovacuum_vacuum_scale_factor | integer | 表中數據變化(inserted, updated or deleted tuples)超過表數據比例,之后才會觸發autovacuum中的vacuum。 autovacuum_analyze_scale_factor同理(PG為0.1,TDSQL-PG默認為0.0001)。 | PG為0.2,TDSQL-PG默認為0.0002 | 庫/表級參數,表級優先 reload |
| fillfactor | integer | 表填充因子,數據塊在插入多少比例數據之后不再插入,留下空間給update操作copy新行使用。在同一塊中申請空間,將用到HOT update,對update性能提升很大。 | 默認為100 | 表級參數。更改參數需要重建表生效。 |
查詢優化相關GUC參數
| 參數 | 類型 | 用途 | 默認值/最大值 | 生效****方式 |
|---|---|---|---|---|
| prefer_olap | bool | 關閉時復雜查詢不走重分布,直接拉到cn計算 | true | userset |
| olap_optimizer | bool | 關掉,會把數據拉到cn再count;打開,會在dn先聚集一遍,再在cn聚集一遍 | on | userset |
| enable_pullup_subquery | bool | 是否將not in(select xxx)轉換成hash join,注意,如果子查詢存在null,則返回結果是不一致的 | off | userset |
| replication_level | integer | 執行計劃走復制方式的最大層數 | 1/INT_MAX | userset |
| restrict_query | bool | 盡可能將查詢只發給相關的節點 | true | userset |
| enable_subquery_shipping | bool | 子查詢只包含常量的情況將子查詢下推 | true | userset |
| shared_queues | integer | 最大支持數據交換并發個數 | 256/INT_MAX | restart |
| use_data_pump | bool | 使用datapump去做數據交換 | true | reload |
| debug_data_pump | bool | 數據交換優化debug開關 | false | reload |
| sender_thread_num | integer | 數據交換發送線程個數 | 8/512 | reload |
| sender_thread_buffer_size | integer | 數據交換發送緩沖區 | 16/1048576k | restart |
| sender_thread_batch_size | integer | 數據交換緩沖區發送閾值 | 8/524288k | reload |
| persistent_datanode_connections | bool | 是否保持CN和DN之間的會話。高并發業務場景要保持on,否則每次CN和DN之間的連接都需要從連接池獲取。 | on | restart |
| pooler_scale_factor | integer | CN和DN之間的連接池中一次連接擴展個數。高并發場景,用戶連接一次增長太快,可能導致pooler擴展不及時,導致應用報錯獲取連接失敗,需要調大該參數。 | 8 | restart |