ORCA是开源的Postgres和Greenplum的优化器,相比于Greenplum和Postgres内置的优化器,ORCA在复杂查询以及分区表等场合有很是好的性能提高。这里介绍下如何使Greenplum启用ORCA优化器,以及如何运行Greenplum的测试用例installcheck-world。html
在开始以前须要装编译和运行的依赖,包括Greenplum和ORCA的依赖。这里采用的编译环境以CentOS 7为例。首先安装系统包,执行的命令以下:python
sudo yum -y groupinstall "Development Tools" sudo yum -y install readline-devel zlib-devel curl-devel apr-devel libevent-devel libxml2-devel bzip2-devel python-devel openssl-devel which iproute net-tools perl-Env wget sudo yum install -y epel-release centos-release-scl sudo yum install -y python-pip python-psutil cmake3 sudo yum install -y devtoolset-6-toolchain sudo yum install -y xerces-c-devel
Greenplum源码保包中的README.CentOS.bash有相关的依赖包设置,这里的命令相比README.CentOS.bash增长了部分依赖。接下来按装相关的python依赖,命令以下:linux
sudo pip install --upgrade pip sudo pip install --no-cache-dir lockfile paramiko setuptools psutil conan
而后安装ORCA依赖的编译管理公共ninja,这里用的是1.8.2版本。最新的1.9 依赖了高版本的c++运行库,在CentOS7上执行会报错。c++
wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip unzip ninja-linux.zip sudo mv ninja /usr/local/bin/
最后再来配置额外的环境设置:git
sudo mkdir /usr/local/gpdb sudo chown -R `whoami` /usr/local/gpdb source scl_source enable devtoolset-6 sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake
到此咱们的准备工做就所有完成,能够开始编译了。github
编译ORCA以前须要先编译它的依赖,也就是xerces,ORCA用它来读写xml数据格式。这一步操做是可选的,由于咱们既可使用已经安装好的系统版本,也可使用带gp补丁的版本(地址为:https://github.com/greenplum-db/gp-xerces)。若是要使用gp补丁的版本,须要执行的命令以下:centos
git clone https://github.com/greenplum-db/gp-xerces.git cd gp-xerces/ mkdir build && cd build ../configure --prefix=/usr/local/gpdb make && make install && make install
编译ORCA须要cmake3和gcc-6,在第一步中已经配置完成,开始前可经过以下命令进行确认:api
gcc --version cmake --version
若是版本不对或者命令没有找到,请确保以下两个操做正确执行了:bash
source scl_source enable devtoolset-6 sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake
其中命令`source scl_source enable devtoolset-6`用于修改gcc版本,可将其加入登陆脚本中来自动执行框架
echo 'source scl_source enable devtoolset-6' >> ~/.bashrc
因为Greenplum和ORCA之间存在版本匹配问题,所以咱们采用的方式是用Greenplum源码中的ORCA版原本编译,具体步骤以下:
git clone https://github.com/greenplum-db/gpdb.git --branch 6X_STABLE --single-branch --depth 1 -b 6X_STABLE 6X_STABLE cd 6X_STABLE/depends CFLAGS="-L/usr/local/gpdb/lib/" ./configure --prefix=/usr/local/gpdb make make install_local
此时编好ORCA就被安装于/usr/local/gpdb目录下了。
Greenplum有不少的扩展功能能够在命令行里控制,这里重点在编译ORCA,所以使用的配置关掉其它一些编译参数。在Greenplum的源码根目录执行以下命令:
export LD_LIBRARY_PATH=/usr/local/gpdb/libCFLAGS="-I/usr/local/gpdb/include" LDFLAGS="-L/usr/local/gpdb/lib/" ./configure --enable-orca --without-perl --without-python --with-libxml --without-gssapi --disable-pxf --without-zstd -without-openssl make -j4 && make install
当命令执行成功后,恭喜你,你本身的Greenplum已经就绪。编译好的Greenplum就被安装到/usr/local/gpdb目录,它能够做为一个总体打包,部署到其它机器的一样位置进行集群测试。编译好的gpdb目录内容大体以下:
$ ls /usr/local/gpdb bin docs etc greenplum_path.sh include lib sbin share
Greenplum编译完以后,咱们须要确认全部的相关测试能够正常运行。Greenplum继承了Postgres的测试框架,提供了本身的测试target:installcheck-world。此外,Greenplum还包含了建立测试集群的配置,所以咱们的目标就是用测试集群来执行installcheck-world测试。
为确保测试能够正常执行,强烈建议根据Greenplum官方文档来配置相应的系统配置文件,包括/etc/security/limits.conf和/etc/sysctl.conf等,在源码目录的README.linux.md中也有简单的描述。
此外,因为即便单机版本,Greenplum也须要使用SSH执行命令,所以须要配置好无密码访问:
ssh-keygen cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
经过以下命令能够建立一个3 primary, 3 mirror的Greenplum集群:
source /usr/local/gpdb/greenplum_path.sh make create-demo-cluster
当看到以下信息时,说明demo集群配置成功。
optimizer ----------- on (1 row) gp_opt_version ---------------------------------------------- GPOPT version: 3.48.0, Xerces version: 3.1.2(1 row)
若是出现错误,须要根据提示进行相应的修复。修复完后,能够先经过命令
pkill postgres
来强制结束未完成的操做,而后从新执行。
建立好测试集群后,就能够运行测试了,在Greenplum源码根目录下执行以下命令:
PGPORT=15432 make installcheck-world
全部测试都会在打开ORCA的状况下执行。此外,尽管咱们使用的是STABLE分支,仍有可能出现某些测试失败的状况,欢迎你们提供补丁或者上报bug。
得到更多关于Greenpum的技术干货,请访问Greenplum中文社区网站。