安装依赖包
安装Greenplem管理脚本依赖的Python包
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install
安装依赖包
sudo yum groupinstall 'Development Tools' # GCC, libtools etc
sudo yum install curl-devel bzip2-devel python-devel openssl-devel readline-devel
sudo yum install perl-ExtUtils-Embed # if enable perl
sudo yum install libxml2-devel # if enable XML support
sudo yum install openldap-devel # if enable LDAP
sudo yum install pam pam-devel # if enable PAM
sudo yum install perl-devel # if need install check-world
准备工作
git@github.com:greenplum-db/gpdb.git
编译
$ CFLAGS="-O0 -g3 -ggdb3"
./configure --with-perl --with-python --with-libxml --enable-debug --enable-cassert --disable-orca --disable-gpcloud --disable-gpfdist --prefix=/home/gpadmin/gpdb.master
make
make install
验证安装
source /home/gpadmin/gpdb.master/greenplum_path.sh
which
调整操作系统参数
部署Gp集群
初始化集群
生成可视化plan
使用explain.pl可以生成如下的查询计划图(把explain执行的结果保存到一个名为a.plainplan的文件中),执行explain.pl -opt jpg </tmp/a.plainplan> /tmp/a.jpg
调试(gdb或lldb)
(lldb) b exec_simple_query
(lldb) c
(lldb) p query_string
(lldb) b cdbdisp_dispatchToGang
(lldb) b ExecutorStart
(lldb) b ExecutorRun
(lldb) b ExecProcNode
#继续执行进入ExecProcNode函数
(lldb) p *node
#继续执行等待node类型为T_MotionState
#执行ExecMotion返回一个tuple
(lldb) print tup2str(result)
#继续执行,知道ExecAgg返回,QD收集了所有segment发送来的信息,完成汇总工作
(lldb) expr tup2str(result)
#可以看到count是3
调试QE进程
调试QE进程和QD进程方法类似,唯一的区别是如何获得进程的id,一个简单的方法是:两次执行同一个SQL,第二次执行时可以看到QE的id(gp_vmem_idle_resource_timeout控制QE多久后自动退出)
Bootstrap模式调试
Bootstrap模式会用多种模式启动postgres进程执行主要任务,故而调试相对比较繁琐,需要获得进程的id并在恰当的时刻设置好断点
常用方法是:PG_CMD_OPEN执行完这个语句时获得子进程pid,并设置断点,然后执行PG_CMD_PUTS