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中文社區網站。