1. 數據庫啓動:gpstartsql
經常使用可選參數: -a : 直接啓動,不提示終端用戶輸入確認shell
-m:只啓動master 實例,主要在故障處理時使用數據庫
2. 數據庫中止:gpstop:session
經常使用可選參數:-a:直接中止,不提示終端用戶輸入確認函數
-m:只中止master 實例,與gpstart –m 對應使用post
-M fast:中止數據庫,中斷全部數據庫鏈接,回滾正在運性能
行的事務大數據
-u:不中止數據庫,只加載pg_hba.conf 和postgresql.conf中運行時參數,當改動參數配置時候使用。優化
評:-a用在shell裏,最多用的仍是-M fast。spa
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';
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 -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 -f my_load.yml
COPY country FROM '/data/gpdb/country_data'
WITH DELIMITER '|' LOG ERRORS INTO err_country
SEGMENT REJECT LIMIT 10 ROWS;
# 建立可寫外部表
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 (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/home/gpadmin/a_list_countries.out';
psql gpdbname –f yoursqlfile.sql
或者psql登錄後執行
\i yoursqlfile.sql