greenplum日常維護手冊

1. 數據庫啓動:gpstart

常用可選參數: -a : 直接啓動,不提示終端用戶輸入確認

-m:只啓動master 實例,主要在故障處理時使用

2. 數據庫停止:gpstop:

常用可選參數:-a:直接停止,不提示終端用戶輸入確認

-m:只停止master 實例,與gpstart –m 對應使用

-M fast:停止數據庫,中斷所有數據庫連接,回滾正在運

行的事務

-u:不停止數據庫,只加載pg_hba.conf 和postgresql.conf中運行時參數,當改動參數配置時候使用。

評:-a用在shell裏,最多用的還是-M fast。


3.查看實例配置和狀態

select * from gp_configuration order by 1 ;

主要字段說明:

Content:該字段相等的兩個實例,是一對P(primary instance)和M(mirror

Instance)

Isprimary:實例是否作爲primary instance 運行

Valid:實例是否有效,如處於false 狀態,則說明該實例已經down 掉。

Port:實例運行的端口

Datadir:實例對應的數據目錄

4. gpstate :顯示Greenplum數據庫運行狀態,詳細配置等信息

常用可選參數:-c:primary instance 和 mirror instance 的對應關係

-m:只列出mirror 實例的狀態和配置信息

-f:顯示standby master 的詳細信息

-Q:顯示狀態綜合信息


該命令默認列出數據庫運行狀態彙總信息,常用於日常巡檢。


評:最開始由於網卡驅動的問題,做了mirror後,segment經常down掉,用-Q參數查詢綜合信息還是比較有用的。


5.查看用戶會話和提交的查詢等信息

select * from pg_stat_activity 該表能查看到當前數據庫連接的IP 地址,用戶名,提交的查詢等。另外也可以在master 主機上查看進程,對每個客戶端連接,master 都會創建一個進程。ps -ef |grep -i postgres |grep -i con


評:常用的命令,我經常用這個查看數據庫死在那個sql上了。

6.查看數據庫、表佔用空間

select pg_size_pretty(pg_relation_size('schema.tablename'));

select pg_size_pretty(pg_database_size('databasename));

必須在數據庫所對應的存儲系統裏,至少保留30%的自由空間,日常巡檢,要檢查存儲空間的剩餘容量。

評:可以查看任何數據庫對象的佔用空間,pg_size_pretty可以顯示如mb之類的易讀數據,另外,可以與pg_tables,pg_indexes之類的系統錶鏈接,統計出各類關於數據庫對象的空間信息。


7.收集統計信息,回收空間

定期使用Vacuum analyze tablename 回收垃圾和收集統計信息,尤其在大數據量刪除,導入以後,非常重要

評:這個說的不全面,vacuum分兩種,一種是analize,優化查詢計劃的,還有一種是清理垃圾數據,postres刪除工作,並不是真正刪除數據,而是在被刪除的數據上,坐一個標記,只有執行vacuum時,纔會真正的物理刪除,這個非常重用,有些經常更新的表,各種查詢、更新效率會越來越慢,這個多是因爲沒有做vacuum的原因。


8.查看數據分佈情況

兩種方式:

l Select gp_segment_id,count(*) from tablename group by 1 ;

l 在命令運行:gpskew -t public.ate -a postgres

如數據分佈不均勻,將發揮不了並行計算的優勢,嚴重影響性能。


評:非常有用,gp要保障數據分佈均勻。


9. 實例恢復:gprecoverseg

通過gpstate 或gp_configuration 發現有實例down 掉以後,使用該命令進行回覆。

10. 查看鎖信息

SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid, l.mode, l.granted, a.current_query

FROM pg_locks l, pg_class c, pg_stat_activity a

WHERE l.relation=c.oid AND l.pid=a.procpid

ORDER BY c.relname;

主要字段說明:

relname: 表名

locktype、mode 標識了鎖的類型

11. explain:在提交大的查詢之前,使用explain分析執行計劃、發現潛在優化機會,避免將系統資源熬盡。


評:少寫了個analyze,如果只是explain,統計出來的執行時間,是非常坑爹的,如果希望獲得準確的執行時間,必須加上analyze。


12. 數據庫備份 gp_dump

常用參數:-s: 只導出對象定義(表結構,函數等)

-n: 只導出某個schema

gp_dump 默認在master 的data 目錄上產生這些文件:

gp_catalog_1_<dbid>_<timestamp> :關於數據庫系統配置的備份文件

gp_cdatabase_1_<dbid>_<timestamp>:數據庫創建語句的備份文件

gp_dump_1_<dbid>_<timestamp>:數據庫對象ddl語句

gp_dump_status_1_<dbid>_<timestamp>:備份操作的日誌

在每個segment instance 上的data目錄上產生的文件:

gp_dump_0_<dbid>_<timestamp>:用戶數據備份文件

gp_dump_status_0_<dbid>_<timestamp>:備份日誌

13. 數據庫恢復 gp_restore

必選參數:--gp-k=key :key 爲gp_dump 導出來的文件的後綴時間戳

-d dbname :將備份文件恢復到dbname



14.登陸與退出Greenplum

#正常登陸

psql gpdb

psql -d gpdb -h gphostm -p 5432 -U gpadmin

#使用utility方式

PGOPTIONS="-c gp_session_role=utility" psql -h -d dbname hostname -p port

#退出

在psql命令行執行\q

15.參數查詢

psql -c 'SHOW ALL;' -d gpdb

gpconfig --show max_connections


評:這個有用,可以管道給grep。

創建數據庫

createdb -h localhost -p 5432 dhdw

創建GP文件系統

# 文件系統名

gpfsdw

# 子節點,視segment數創建目錄

mkdir -p /gpfsdw/seg1

mkdir -p /gpfsdw/seg2

chown -R gpadmin:gpadmin /gpfsdw

# 主節點

mkdir -p /gpfsdw/master

chown -R gpadmin:gpadmin /gpfsdw

gpfilespace -o gpfilespace_config

gpfilespace -c gpfilespace_config

創建GP表空間

psql gpdb

create tablespace TBS_DW_DATA filespace gpfsdw;

SET default_tablespace = TBS_DW_DATA;

刪除GP數據庫

gpdeletesystem -d /gpmaster/gpseg-1 -f

查看segment配置

select * from gp_segment_configuration;

文件系統

select * from pg_filespace_entry;

磁盤、數據庫空間

SELECT * FROM gp_toolkit.gp_disk_free ORDER BY dfsegment;

SELECT * FROM gp_toolkit.gp_size_of_database ORDER BY sodddatname;

日誌

SELECT * FROM gp_toolkit.__gp_log_master_ext;

SELECT * FROM gp_toolkit.__gp_log_segment_ext;

表數據分佈

SELECT gp_segment_id, count(*) FROM <table_name> GROUP BY gp_segment_id;

表佔用空間

SELECT relname as name, sotdsize/1024/1024 as size_MB, sotdtoastsize as toast, sotdadditionalsize as other

FROM gp_toolkit.gp_size_of_table_disk as sotd, pg_class

WHERE sotd.sotdoid = pg_class.oid ORDER BY relname;

索引佔用空間

SELECT soisize/1024/1024 as size_MB, relname as indexname

FROM pg_class, gp_toolkit.gp_size_of_index

WHERE pg_class.oid = gp_size_of_index.soioid

AND pg_class.relkind='i';

OBJECT的操作統計

SELECT schemaname as schema, objname as table, usename as role, actionname as action, subtype as type, statime as time

FROM pg_stat_operations

WHERE objname = '<name>';

SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid, l.mode, l.granted, a.current_query

FROM pg_locks l, pg_class c, pg_stat_activity a

WHERE l.relation=c.oid

AND l.pid=a.procpid

ORDER BY c.relname;

隊列

SELECT * FROM pg_resqueue_status;

gpfdist外部表

# 啓動服務

gpfdist -d /share/txt -p 8081 –l /share/txt/gpfdist.log &

# 創建外部表,分隔符爲’/t’

drop EXTERNAL TABLE TD_APP_LOG_BUYER;

CREATE EXTERNAL TABLE TD_APP_LOG_BUYER (

IP text,

ACCESSTIME text,

REQMETHOD text,

URL text,

STATUSCODE int,

REF text,

name text,

VID text)

LOCATION ('gpfdist://gphostm:8081/xxx.txt')

FORMAT 'TEXT' (DELIMITER E'/t'

FILL MISSING FIELDS) SEGMENT REJECT LIMIT 1 percent;

# 創建普通表

create table test select * from TD_APP_LOG_BUYER;

# 索引

# CREATE INDEX idx_test ON test USING bitmap (ip);

# 查詢數據

select ip , count(*) from test group by ip order by count(*);

gpload

# 創建控制文件

# 加載數據

gpload -f my_load.yml

copy

COPY country FROM '/data/gpdb/country_data'

WITH DELIMITER '|' LOG ERRORS INTO err_country

SEGMENT REJECT LIMIT 10 ROWS;

gpfdist外部表

# 創建可寫外部表

CREATE WRITABLE EXTERNAL TABLE unload_expenses

( LIKE expenses )

LOCATION ('gpfdist://etlhost-1:8081/expenses1.out',

'gpfdist://etlhost-2:8081/expenses2.out')

FORMAT 'TEXT' (DELIMITER ',')

DISTRIBUTED BY (exp_id);

# 寫權限

GRANT INSERT ON writable_ext_table TO <name>;

# 寫數據

INSERT INTO writable_ext_table SELECT * FROM regular_table;

copy

COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/home/gpadmin/a_list_countries.out';

執行sql文件

psql gpdbname –f yoursqlfile.sql

或者psql登陸後執行

\i yoursqlfile.sql


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