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由多张表关联拆开

 

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