Greenplum 資源狀態查看記錄

作爲BI工程師,對SQL的熟練掌握必不可少,greenplum作爲MPP數據庫,當然需要深入瞭解一些重要的開發技巧。

日常SQL開發規範要求:

1.代碼行清晰、整齊、層次分明、結構性強,易於閱讀;
2.代碼中應具備必要的註釋以增強代碼的可讀性和可維護性;
3.代碼應充分考慮執行效率,保證代碼的高效性;

Greenplum數據字典使用,有個重要的schema,分別是:pg_catalog,pg_toolkit,information_schema

information_schema存儲數據字典的視圖。

資源查看列表
編號 查詢主題 查詢腳本
1 查看greenplum資源隊列狀況 SELECT * FROM gp_toolkit.gp_resqueue_status;
2 查看資源隊列中的鎖狀況 SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
3 查看當前處於活動狀態或者等待狀態的語句

SELECT rolname, rsqname, pid, granted, current_query, datname

FROM pg_roles, gp_toolkit.gp_resqueue_status, pg_locks, pg_stat_activity

WHERE pg_roles.rolresqueue=pg_locks.objid

AND pg_locks.objid=gp_toolkit.gp_resqueue_status.queueid

AND pg_stat_activity.procpid=pg_locks.pid;

4 清理語句的進程ID(pid) Select pg_cancel_backend(pid);
5 查看某賬號下運行中sql SELECT * from pg_stat_activity  where current_query <> '<IDLE>' and waiting ='f' and usename = 'user_name';
6 查看等待中的SQL SELECT * from pg_stat_activity  where current_query <> '<IDLE>' and waiting ='t';
7 查看執行時間超長SQL select  * from pg_stat_activity where current_query<>'<IDLE>' and query_start < now() - interval '100 mins';
sql優化
編號 查詢主題 查詢腳本 備註
1 執行計劃(執行SQL前) explain  SQL

如果執行計劃存在針對很大的表做Broadcast Motion 或Nested Loop步驟則 不合理, 則嘗試以下動作:

    執行收集表的統計信息語句:ANALYZE 表名; 

     一般analyze 一天的分區: ANALYZE 表名_1_prt_data_part_20150305;

     “_1_prt_”是數據庫分區表名固定段。 “data_part_”是我們自動腳本里生成的分區名前綴。

      重新看執行計劃,如果合理了,則代表源表缺少統計信息導致執行計劃不合理。 只有在表的數據量發生大變化時或重來沒收集過時需要做一次收集。

ANALYZE完源表重新看執行計劃,如果還不合理,執行一下set optimizer to on;  更換一個執行計劃生成器。

    重新生成執行計劃。如果合理了,則後續在在SQL前加上:set optimizer to on;  不要所有SQL加這個,因爲該特性未發佈。

    如果還不合理, 則需要優化SQL, 即把SQL由多張表關聯拆開

 

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