一、部署使用類
1. 是否有提供docker鏡像
官方暫時沒有提供docker鏡像,但使用者可以通過指令一鍵建構docker鏡像。具體參考:
https://github.com/alibaba/PolarDB-for-PostgreSQL#deployment-using-docker-image2. 預設ssh 端口非22 的時候,如何配置
目前程式中沒有針對修改ssh端口的配置,建議将ssh端口修改回預設22。
3. 有沒有提供相關配置清單,可以跑出一定性能的benchmark結果
暫時沒有。不同的硬體下會産生不同的benchmark結果。可以搭建polardb資料庫,使用pgbench作為benchamark工具進行性能測試。具體參考:
https://github.com/alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/benchmark.md4. polardb是否有單點故障(搭建分布式的polardb)
沒有。通過onekey.sh all或者pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone指令部署得到的polardb預設是有三節點部署在同一台實體機器上的。通過将 polardb_paxos.conf配置檔案中localhost改為對應的機器ip,就可以避免單點故障。(注意三台機器的ssh需要被打通)
更改檔案示例:
datanodeMasterServers=(localhost) # none means this master is not available.
datanodeSlaveServers=(localhost) # value none means this slave is not available
datanodeLearnerServers=(localhost) # value none means this learner is not available
——>
datanodeMasterServers=(Server1 IP) # none means this master is not available.
datanodeSlaveServers=(Server2 IP) # value none means this slave is not available
datanodeLearnerServers=(Server3 IP) # value none means this learner is not available
5. XPaxos是否已經完全開源,包含了一個multi-paxos系統的所有特性
是的,已經開源。參考commit "3b2a3a8cea2a872c0179e8d0ebe50a482420bb0a"
6. 使用pgxc_ctl時報錯
使用pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone指令時報錯
答:需要使用非root使用者進行部署。pgxc_ctl會通過scp的方式在多台機器間分發二進制檔案等,是以需要對涉及到的機器打通ssh。可以使用ssh-copy-id指令,如"ssh-copy-id [email protected]"。
7. 使用pgxc_ctl時報錯
pgxc_ctl -c $HOME/polardb/polardb_paxos.conf init all初始化叢集時,報錯如下
答: 需要配置環境變量
vi ~/.bashrc
export PATH="$HOME/polardb/polardbhome/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/polardb/polardbhome/lib:$LD_LIBRARY_PATH"
更多内容參考:
https://github.com/alibaba/PolarDB-for-PostgreSQL/#previous-preparation8. PolarDB-for-PostgreSQL的文法相容性
文法文檔 除了
https://github.com/alibaba/PolarDB-for-PostgreSQL,還有其它地方有嗎?
答:目前版本polardb for postgresql相容社群postgresql文法,在文法上可以認為和社群postgresql相同。
9. PolarDB-for-Postgresql開源版本目前隻支援單機版嗎?
是的,現在是複制高可用叢集。資料庫本身是單機形态。後續會釋出叢集版,請關注我們的github動态。
二、編譯類
1. docker build失敗
使用docker build -t polardb-for-postgresql -f ./docker/Dockerfile . 指令報錯
[ 80%] [ 80%] Building CXX object Source/CMakeFiles/CMakeLib.dir/cmNinjaUtilityTargetGenerator.cxx.o
Building CXX object Source/CMakeFiles/CMakeLib.dir/cmNinjaNormalTargetGenerator.cxx.o
�[91mg++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
這是編譯安裝cmake時的報錯。可能是由記憶體不足引起,可以嘗試擴大虛拟機記憶體。
可以google搜尋“Killed signal terminated program cc1plus”嘗試各種方法來解決。
2. onekey.sh all 編譯報錯
執行onekey.sh all時,報錯:
checking for Python.h... no
configure: error: header file is required for Python
答:在執行onekey.sh前,需要先安裝python。
3. gcc 10.2.0編譯報錯
執行build.sh報錯
/root/PolarDB-for-PostgreSQL/src/backend/polar_dma/libconsensus/dependency/easy/src/thread/easy_uthread.c:266:17: error: ‘SIG_BLOCK’ undeclared (first use in this function)
答:這是gcc版本的問題。已經增加了gcc 10版本下的支援。另外在gcc 4.8或者7.2下也可以正确編譯。
4. 編譯時報錯 link error with SSL_* symbols
編譯報錯如下:
/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_num_locks'
/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_cleanup_all_ex_data'
/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_mem_leaks_fp'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:71: postgres] Error 1
make[2]: Leaving directory '/home/ajung/src/PolarDB-for-PostgreSQL/src/backend'
make[1]: *** [Makefile:42: all-backend-recurse] Error 2
make[1]: Leaving directory '/home/ajung/src/PolarDB-for-PostgreSQL/src'
make: *** [GNUmakefile:11: all-src-recurse] Error 2
答: 在編譯前需要安裝openssl。需要安裝的其他内容參考:
https://github.com/alibaba/PolarDB-for-PostgreSQL#deployment-from-source-code5. macOS上,PG的SPI函數是在哪個so裡面實作的?
PG的SPI函數在 src/backend/executor/spi.c 中。屬于核心子產品。并非編譯成so。
三、架構類
1. 是否會寫一些high-level的設計文檔
文檔在不斷完善補充中。目前已有的可以參考:
https://github.com/alibaba/PolarDB-for-PostgreSQL#architecture--roadmap2. 相對于pg的代碼改動點有哪些
polardb會逐漸開源新特性。目前已經開源的特性主要包括HA增強(基于paxos的HA和基于streaming的HA),CTS等特性。歡迎關注後續即将釋出的各項增強功能。
3. 後續有計劃完整開源吧?想多機、 多DATANODE部署一下
有的,可以看一下roadmap的文檔。文檔位址:
4. 目前開源的版本基本pg哪個版本開發的
基于postgresql 11.2 版本開發
5. 開源版本最大僅支援三個節點的叢集嗎
可以支援多個副本部署。目前開源的版本本質上是多副本,隻有一個計算節點,是以可以在多台機器上部署多個副本,通常三副本就能滿足絕大部分場景的可靠性需求。後續會開源叢集版本,提供多個計算節點,敬請關注。
6. 這個叢集是類似oracle rac 這種share disk的架構嗎?
不是的。目前開源版本是單機資料庫,提供了多個副本,每個副本使用獨立的磁盤,并非shard disk。
四、運維操作類
1. autovacuum操作一月被觸發一次, 每次觸發的時候資料庫就慢
autovacuum觸發頻率可以由配置參數決定。vacuum的目的在于回收page中的dead tuple、freeze transaction xid,vacuum時會産生IO,也會對表加ShareUpdateExclusiveLock鎖。是以會對資料庫有性能影響。
更多原理和細節可以參考官方文檔:
https://www.postgresql.org/docs/11/runtime-config-autovacuum.html https://www.postgresql.org/docs/11/routine-vacuuming.html2. pg12 主從+ patroni2.1 patroni leader 切換之後,pg 主從丢失這個是什麼情況?
正常時:
patroni 切換leader 之後, 在執行檢視主從指令,不再顯示。
原因:
解決patroni leader 故障切換之後,pg 主從也發生了切換。
3. 長事務導緻autovacuum不能推進oldest xmin解決方法
需要terminate該長事務。可以使用指令 select pg_terminate_backend($backend_pid);
4. 有什麼資料庫,對于非固定列的資料,存儲與查詢還有統計支援比較好的?
可以看下HBase 或者 MongoDB。
5. 開源版的polardb支援全文檢索嗎?性能如何?
全文檢索是社群postgresql原生提供的能力,開源版本postgresql for polardb繼承了這個能力,但沒有進行開發增強。
6. pglogical 插件比原生的邏輯複制有什麼優勢?
pglogical是一個獨立插件,原理與原生的邏輯複制是一樣的,pglogical有更加強大的沖突處理能力。具體可以參考:
https://www.2ndquadrant.com/en/resources/pglogical/7. pg 的高可用 在生産環境有在使用pgpool的嗎?
pgpool可以使用。也可以看下Patroni是否滿足需要。
8. PG性能抖動怎麼記錄現場?日志記錄的執行計劃隻能看到執行計劃突然很慢,1000次隻有1次很慢。
可以嘗試下auto_explain。具體可以參考
https://github.com/digoal/blog/blob/master/202106/20210621_03.md9. 阿裡雲的pg支援btree_gin之類的extension麼?
支援。
10. postgresql内置的copyfrom函數為什麼拷貝效率那麼高
copy在多個方面提高了拷貝效率。具體可以參考
https://stackoverflow.com/questions/46715354/how-does-copy-work-and-why-is-it-so-much-faster-than-insert11. pg vacuum analyze 大表的時候,會寫很多wal日志嗎
如果vacuum修改了page,就會産生wal日志。産生的日志量取決于對表的修改量大小,跟表的大小并沒有直接關系。
12. 備份pg表時,為何主鍵和sequence 也被備份了
實體備份本來就含了主鍵和序列
13. 在pg裡面,我一個使用者要授予對所有資料庫隻有查詢和修改,但是沒有删除權限. 這要怎麼實作,我現在很多庫我不想一個一個庫去授權
資料庫沒有提供内置的功能。可以自行編寫腳本來對所有資料庫進行授權。授權和撤銷可以使用 grant和revoke指令。參考
https://www.postgresql.org/docs/11/sql-grant.html https://www.postgresql.org/docs/11/sql-revoke.html