貓哥負責公司的postgre-XL數據庫集羣已經有一年多的時間,總結了一套postgre數據庫的運維方法,涉及數據庫日誌查看、集羣重啓、自定義詞典、數據庫參數分類、數據庫用戶創建、數據庫常用運維指令等。
★查看pg集羣日誌:
node1節點,路徑:/home/postgres/pgxc_ctl/pgxc_log
★查看pg日誌:
非gtm節點
路徑:/data1/pgxl_1/nodes/coord/pg_log
ps:coord中的pg_log保存的是該服務器的連接日誌
dn_master的pg_log保存的是數據庫數據具體操作日誌
★集羣重啓:
node1節點(gtm)
停止:pgxc_ctl -c /home/pgxl/pgxc_ctl/pgxc_ctl.conf stop all
啓動:pgxc_ctl -c /home/pgxl/pgxc_ctl/pgxc_ctl.conf start all
★文件傳輸(Bash命令)
scp dict_extra.txt root@node2:/usr/pgsql-10/share/tsearch_data
★自定義詞典路徑(只需修改node2節點)
第一步: /home/postgres/pgxl/share/tsearch_data/dict_extra.txt
第二步:並在postgres.conf中添加:
zhparser.extra_dicts = "dict_extra.txt"
hparser.dict_in_memory = true
★修改數據庫用戶密碼
第一步:登錄每個服務器的pg數據庫,修改對應用戶名的密碼:alter user "postgres" with password '123456';
第二步:登錄每臺服務器(除gtm)修改協調節點和數據節點下的pg_hba.conf文件(路徑:/data1/pgxl_1/nodes/coord;/data1/pgxl_1/nodes/dn_master),將對應的Method設置爲password;
第三步:重啓集羣
★數據庫主進程:postmaster
路徑:/usr/local/pgxl/bin/postmaster
##查看系統信息的常用命令
★查看緩存命中率ratio (緩存命中率不可低於99%,如果低於了99%,表明,cache效率太低了,需要增大shared buffer。)
SELECT blks_read,blks_hit, blks_hit::numeric / (blks_read + blks_hit ) AS ratio FROM pg_stat_database WHERE datname = 'postgres' ;
★查看數據庫的大小
SELECT pg_database_size('postgres'), pg_size_pretty(pg_database_size('postgres'));
★查看具體表的大小
包括索引: SELECT pg_size_pretty(pg_total_relation_size('dwd_match_20180601_simple'));
不包括索: SELECT pg_size_pretty(pg_relation_size('dwd_match_20180601_simple'));
僅索引: SELECT pg_size_pretty(pg_indexes_size('dwd_match_20180601_simple'));
★查看全局表空間(pg_global)和默認表空間(pg_default)的大小
SELECT pg_size_pretty(pg_tablespace_size('pg_global'));
SELECT pg_size_pretty(pg_tablespace_size('pg_default'));
##系統維護的常用命令
★修改postgres.conf後,使修改生效的方法(僅針對生效的配置項均爲不需要重啓數據庫服務的)
方法一,在操作系統中使用如下命令:pg_ctl reload
方法二,在psql中使用如下命令:SELECT pg_reload_conf();
★取消一個長時間執行的SQL方法
*pg_cancel_backend(pid) :取消一個正在執行的SQL
*pg_terminate_backend(pid) :終止一個後臺服務進程,同事釋放此後臺進程的資源
PS:這兩個函數的區別是,前者實際上是給正在執行的SQL任務配置一個取消標誌,正在執行的任務在合適的時候檢測到此標誌後會主動退出;但此任務沒有主動檢測到這個標誌,則該任務就無法正常退出,這是就需要使用後者來終止SQL命令。
具體過程:
1.SELECT pid, usename,query_start, query from pg_stat_activity WHERE datname='postgres' and state='active';
2.SELECT pg_cancel_backend(pid)
3.若取消不了,則用 SELECT pg_terminate_backend(pid);
##PG參數分類:
internal:只讀參數,由postgres程序和在初始化實例時寫死。
postmaster:改變這些參數的值需要重啓PostgreSQL。在postgres.conf中修改這些參數後,需要重啓PG才能生效。
sighup:在postgres.conf中修改這些參數後,不需要重啓PG,reload即可。
backend:在postgres.conf中修改這些參數後,不需要重啓PG,reload即可。
superuser:這類參數可以由超級用戶使用set來改變,不需要重啓PG,reload即可。
user:除普通用戶可以改變外,此參數與superuser參數沒有區別。
★查看參數類型:
SELECT name, context FROM pg_settings WHERE name LIKE 'shared_buffers';
★reload語法
pg_ctl reload -D /home/postgres/pgdata
★創建只讀用戶
1.REVOKE CREATE ON SCHEMA public from public;(收回建表權限)
2.CREATE USER readonly with password '123456';(創建readonly用戶)
3.GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;(將當前public 下的schema下的所有表的SELECT權限賦予readonly)
4.ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to readonly; (將今後新建表的SELECT權限賦予readonly
若希望此用戶訪問其他schema下的表,需要重複執行如下語句:
5.GRANT SELECT ON ALL TABLES IN SCHEMA other_schema TO readonly;
6.ALTER DEFAULT PRIVILEGES IN SCHEMA other_schema grant select on tables to readonly;
★查看某用戶的表權限
SELECT* FROM information_schema.table_privileges WHERE grantee='readonly';
★lunix查看錶數據具體存放的數據節點
方法一:\d+ tablename;
方法二:EXPLAIN TABLE tablename
★ EXPLAIN(執行計劃的解釋)
聯合使用analyze選項和buffers選項,可通過實際執行來查看實際的代價和緩衝區命中的情況,命令如下: EXPLAIN ( analyze true, buffers true) SELECT * FROM tablename;
ps具體含義:在共享內存中直接讀到16284個塊,整行表示從磁盤中共讀了196482,寫了196450塊。爲什麼select會寫?因爲共享內存中有髒塊,從磁盤中讀出的塊必須把內存中的髒塊擠出去,所以產生了很多的寫