`
weitao1026
  • 浏览: 992107 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

greenplum 程序开发优化原则

 
阅读更多

greenplum 程序开发优化原则  
1、批量数据处理后,无论成功与否,都应该进行vaccum analyze <table_name>.  
2、对于大表的DISTINCT操作,请用 GROUP BY操作进行替代  
3、对于大表的UNION操作,请用UNION ALL 加 group by进行改写  
4、嵌套查询操作,尽量改写成连接查询操作  
5、大表更新操作,尽量通过外连接+插入+truncate进行替代  
6、大表删除操作,尽量通过外连接+插入+truncate进行替代  
7、尽量避免进行存储过程函数嵌套导致锁冲突,考虑使用其它语言进行总体调度,比如shell,java,c等。  
8、尽量避免在数据库中使用序列,游标, 循环,考虑对数据进行整体操作。   
9、避免高度频繁的建表删表操作,容易造成字典破碎和字典锁的问题,因此可以通过临时表和其它语言方式替代。  
11、检查大表的hash键定义是否可以保证每个segment存储均匀,数据处理均匀,以及大表连接操作过程中可以尽量避免motion操作。从目前业务看,可以考虑客户ID, 电话号码作为首选的hash键,然后进行检查。  
12、为了加快开发进度,减少开发时的彼此影响,建议每个开发人员装一个gp虚拟机,相关表放入少量记录,进行单步测试。通过单步测试后,统一提交到测试服务器上进行联合测试和压力测试。  
13、运行较大操作时,不建议使用pgadmin完成操作,建议写成shell脚本在后台进行测试。避免频繁不正常中断操作,对整个开发产生影响  
14、尽量避免不正常中断操作,如需不正常中断操作,请使用函数pg_cancel_backend函数,并耐心等待3~5分钟,再继续相关操作,避免造成数据字典破坏。 
pg_cancel_backend and pg_terminate_backend send signals (SIGINT or SIGTERM respectively) to backend processes identified by process ID. The process ID of an active backend can be found from the procpid column of the pg_stat_activity view, or by listing the postgres processes on the server (using ps on Unix or the Task Manager on Windows).  
两者都是boolean类型的,返回为true或者false。  
但是在greenplum(3.3.6)中使用时发现GP中并没有pg_terminate_backend这个函数,故略去不说。

g_cancel_backend这个函数主要是用来取消一个查询(进程),权限必须是管理员或者查询的所有者。具体如下:  
首先,查出你要取消的进程号  
select procpid from pg_stat_activity where ......;  
其次,用这个函数来取消  
select pg_cancel_backend(procpid);。  
这个函数主要是用来回滚事务,但是会话(session)并不会退出去,比如你要用这个函数来终止一个<IDLE>是不可能的。  
当一个查询语句查询时间较长时用这个函数偶尔也不好用,这个时候需要多执行几次或去OS上用kill命令来删除这个进程效果就来得快。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics