0
点赞
收藏
分享

微信扫一扫

Greenplum数据库开发调试入门

晒大太阳了 2022-07-28 阅读 67


安装依赖包

安装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


举报

相关推荐

0 条评论