# Postgres Master Slave * Slave Conflicts Query ```sql select * from pg_stat_database_conflicts; ``` 減少衝突 1. hot_standby_feedback 2. vacuum_defaer_clean_up * Slave Delay Time ```sql SELECT now() - pg_last_xact_replay_timestamp() AS replication_delay; ``` 什麼情況需要重新建立? - wal_keep_segments太小,來不及備份就被蓋掉。(ex.設定64,64*16MB = 1GB) Slave Data Keeping Time(資料斷掉後保留時間為考量) 1. min_wal 2. wal_keep_segments 2020/12/22 hot_standby_feedback vacuum_defaer_clean_up 或是延長query time(但會延長同步時間) ``` https://blog.csdn.net/dazuiba008/article/details/104966409 ``` 觀察每個Table 需要vacuum的部分 https://chenhuajun.github.io/2017/08/15/PostgreSQL%E7%9A%84%E8%A1%A8%E8%86%A8%E8%83%80%E5%8F%8A%E5%AF%B9%E7%AD%96.html ```sql SELECT schemaname||'.'||relname, n_dead_tup, n_live_tup, round(n_dead_tup * 100 / (n_live_tup + n_dead_tup),2) AS dead_tup_ratio FROM pg_stat_all_tables WHERE n_dead_tup >= 10000 ORDER BY dead_tup_ratio DESC LIMIT 10; ``` 裝server 1. postgresql 先檢查 df -h 先看看未來postgresql 指定的root位置,space夠不夠 2. 裝postgresql 12,調整設定擋postgresql.conf,pg_hba.conf,create database [v4]; 3. 給所有user, slave user 4. 裝apt-get install pgagent(但不要在[v4]extend),然後跑migrate all,並監測有沒有ERROR 5. pgagent /root 底下pg check機制設定上去 DB LOCK 1. 看誰Lock Lock什麼 ```sql SELECT COALESCE(blockingl.relation::regclass::text,blockingl.locktype) as locked_item, blockeda.pid AS blocked_pid, blockeda.query as blocked_query, blockedl.mode as blocked_mode, blockinga.pid AS blocking_pid, blockinga.query as blocking_query, blockingl.mode as blocking_mode FROM pg_catalog.pg_locks blockedl JOIN pg_stat_activity blockeda ON blockedl.pid = blockeda.pid JOIN pg_catalog.pg_locks blockingl ON( ( (blockingl.transactionid=blockedl.transactionid) OR (blockingl.relation=blockedl.relation AND blockingl.locktype=blockedl.locktype) ) AND blockedl.pid != blockingl.pid) JOIN pg_stat_activity blockinga ON blockingl.pid = blockinga.pid WHERE NOT blockedl.granted; ``` 2. 查看 ps axu 看誰執行久 3. 看誰再執行 ```sql SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state FROM pg_stat_activity WHERE now() - pg_stat_activity.query_start > interval '5 minutes'; ``` 4. 未來要改善 ```sql select * from pg_stat_statements pss where temp_blks_read > 0 order by mean_time desc ``` ## 原裡 https://www.796t.com/content/1549241130.html ## 設定 https://mrpolo17.medium.com/set-up-postgresql-12-master-slave-a494e1a60356