【postgre-XL數據庫】運維總結

貓哥負責公司的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會寫?因爲共享內存中有髒塊,從磁盤中讀出的塊必須把內存中的髒塊擠出去,所以產生了很多的寫

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章