本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹PolarDB PostgreSQL版的常見問題和解答。
基本問題
Q:什么是PolarDB?
A:PolarDB是一個關系型數據庫云服務,目前已在全球十多個地域(Region)的數據中心部署,向用戶提供開箱即用的在線數據庫服務。PolarDB目前100%兼容PostgreSQL,存儲容量最高可達500 TB。詳情請參見什么是PolarDB PostgreSQL企業版。
Q:為什么云原生數據庫PolarDB優于傳統數據庫?
A:相較于傳統數據庫,云原生數據庫PolarDB支持上百TB級別海量數據存儲,提供高可用和高可靠保障、快速彈性升降級、無鎖備份等功能,詳情請參見產品優勢。
Q:PolarDB是什么時候發布?什么時候開始商用?
A:2017年9月發布公測,2018年3月開始商用。
Q:集群和節點分別指的是什么?
A:PolarDB集群版采用多節點集群的架構,集群中有一個主節點和多個只讀節點。單個PolarDB集群支持跨可用區,但不能跨地域,面向集群進行管理和計費。詳情請參見術語。
Q:支持哪些編程語言?
A:PolarDB支持Java、Python、PHP、Golang、C、C++、.NET、Node.js等編程語言。
Q:購買PolarDB后,如果需要分庫分表是否還需要購買PolarDB-X數據庫中間件?
A:是的。
Q:PolarDB是否支持表的分區?
A:支持。
Q:PolarDB是否已經自動包含了分區機制?
A:PolarDB在存儲層做了分區,對用戶透明,無感知。
費用
集群訪問(讀寫分離)
Q:如何實現PolarDB的讀寫分離?
A:只需在應用程序中使用集群地址,即可根據配置的讀寫模式實現讀寫分離,詳情請參見創建自定義集群地址。
Q:一個PolarDB集群內最多可以支持多少個只讀節點?
A:PolarDB采用分布式集群架構,一個集群包含一個主節點和最多15個只讀節點(至少一個,用于保障高可用)。
Q:多個只讀節點間負載不均衡的原因是什么?
A:只讀節點間負載不均衡的原因有只讀節點連接數較少、自定義集群地址分配時未包括某個只讀節點等。
Q:造成主節點負載高或低的原因是什么?
A:造成主節點(主庫)負載高的原因有直連主地址、主庫接受讀請求、存在大量的事務請求、主從復制延遲高導致請求被路由到主庫、只讀節點異常導致讀請求被路由到主庫等。
而主節點負載較低的原因可能是主庫開啟了不接受讀選項。
Q:怎么降低主節點的負載?
A: 您可以使用如下幾種方式降低主節點負載:
使用集群地址來連接PolarDB集群,詳情請參見創建自定義集群地址。
如果由于事務較多導致主節點壓力大,您可以通過控制臺打開事務拆分功能,把事務中的部分查詢路由到只讀節點,詳情請參見高級選項-事務拆分。
如果由于復制延遲導致請求被路由到主庫,您可以考慮降低一致性等級(如使用最終一致性),詳情請參見高級選項-一致性級別。
主庫接受讀請求,可能也會導致主庫負載高,您可以通過控制臺開啟主庫不接受讀功能,減少讀請求被路由到主庫。
Q:為什么讀不到剛插入的數據?
A:該問題可能是由于一致性級別的配置導致的,PolarDB的集群地址支持如下幾種一致性級別:
最終一致性:不論是同一會話(連接)或不同會話,最終一致性都不保證讀能夠馬上讀到剛插入的數據。
會話一致性:一定能夠讀到同一會話插入之后的數據。
說明一致性等級越高,性能越差,對主庫的壓力越大,請謹慎選擇。對于大多數應用場景會話一致性能夠保證業務正常工作,對于少數有強一致性的需求的語句,可以通過Hint
/* FORCE_MASTER */
來實現,詳情請參見PolarDB PostgreSQL版一致性級別。Q:如何強制SQL到主節點執行?
使用集群地址時,在SQL語句前加上
/* FORCE_MASTER */
或/* FORCE_SLAVE */
,即可強制指定這條SQL的路由方向,詳情請參見自定義路由-Hint。/* FORCE_MASTER */
強制請求被路由到主庫。該用法可以用于解決少數一致性要求較高的讀請求的場景。/* FORCE_SLAVE */
強制請求被路由到從庫。該用法可以用于解決少數PolarDB代理由于保證正確性,要求特殊語法被路由到從庫的場景(比如存儲過程的調用,multistatement的使用等語句默認是會被路由到主庫)。
說明Hint的路由優先級最高,不受一致性級別和事務拆分的約束,使用前請進行評估。
Hint語句里不要有改變環境變量的語句,例如
/*FORCE_SLAVE*/ set names utf8;
等,這類語句可能導致查詢結果非預期。
Q:是否可以給不同的業務分配不同的地址?不同地址間是否可以達到隔離的效果?
A:您可以創建多個自定義地址給不同的業務使用,若底層節點不同則自定義地址間可同時具備隔離的效果,不會互相影響。關于如何創建自定義地址,詳情請參見創建自定義集群地址。
Q:如果有多個只讀節點,如何為其中某個只讀節點單獨創建單節點地址?
A:僅當集群地址讀寫模式為只讀且集群內擁有三個及以上節點時,才支持創建單節點地址,詳細操作步驟請參見創建自定義集群地址。
警告創建單節點地址后,當此節點故障時,該地址可能會出現最多1小時不可用的情況,請勿用于生產環境。
Q:一個集群內最多允許創建多少個單節點地址?
A:如果您的集群內有3個節點,則只允許為其中1個只讀節點創建單節點地址;若集群內有4個節點,則允許為其中2個只讀節點創建各自的單節點地址,以此類推。
Q:只用了主地址,但是發現只讀節點也有負載,是否主地址也支持讀寫分離?
A:主地址不支持讀寫分離,始終只連接到主節點。只讀節點有少量QPS是正常現象,與主地址無關。
管理與維護
Q:主節點(主)與只讀節點(備)是否存在復制延遲?
A:是,它們之間存在毫秒級延遲。
Q:什么情況下會導致復制延遲增大?
A:出現如下情況時會導致復制延遲增大:
主節點寫入負載高,產生了過多的Redo日志,導致只讀節點來不及應用。
只讀節點負載過高,搶占了過多原本屬于應用Redo日志的資源。
I/O出現瓶頸,導致讀寫Redo日志過慢。
Q:存在復制延遲的情況下,如何保證查詢的一致性?
A:您可以使用集群地址并為其選擇合適的一致性級別。目前一致性從高到低分別為會話一致性和最終一致性,詳情請參見創建自定義集群地址。
Q:單節點故障的情況下是否可以保證RPO為0?
A:數據庫集群參數為默認設置時RPO不為0,通過調整
sychronous_commit
參數值后可以保證RPO為0。具體參數默認值說明請參見集群參數默認值說明。Q:升級規格配置(比如從2核8 GB升級到4核16 GB)后端是怎么實現的?對業務有什么影響?
A:PolarDB的代理(Proxy)和數據庫節點(Node)均需要升級到最新的配置,采用多個節點滾動升級的方式盡量減少對業務的影響。目前每次升級大概需要10~15分鐘,對業務的影響時間不超過30秒,期間可能會產生1~3次連接閃斷,詳情請參見變更配置。
Q:添加節點要多久?是否會影響業務?
A:每增加一個節點需要5分鐘,對業務無影響。關于如何添加節點,詳情請參見增加只讀節點。
說明新增只讀節點之后新建的讀寫分離連接會轉發請求到該只讀節點。新增只讀節點之前建立的讀寫分離連接不會轉發請求到新增的只讀節點,需要斷開該連接并重新建立連接,例如,重啟應用。
Q:升級到最新修訂版本需要多久?是否會影響業務?
A:PolarDB采用多節點滾動升級的方式盡量減少對業務的影響。版本升級一般不超過30分鐘,升級過程中會重啟數據庫代理Proxy或內核引擎DB,可能會導致數據庫連接閃斷。請您盡量在業務低峰期執行升級操作,并且確保您的應用有自動重連機制。詳情請參見版本管理。
Q:如何進行故障自動切換?
A:PolarDB采用雙活(Active-Active)的高可用集群架構,可讀寫的主節點和只讀節點之間自動進行故障切換(Failover),系統自動選舉新的主節點。PolarDB每個節點都有一個故障切換(Failover)優先級,決定了故障切換時被選舉為主節點的概率高低。當多個節點的優先級相同時,則有相同的概率被選舉為主節點,詳情請參見自動/手動主備切換。
備份與恢復
Q:PolarDB采用什么備份方式?
A:PolarDB采用快照(Snapshot)的方式進行備份,詳情請參見備份方式二:手動備份。
Q:數據庫恢復的速度如何?
A:目前,基于備份集(快照)進行恢復(克隆)的速度是40分鐘/TB。如果是恢復到任意時間點,則需要包含應用Redo日志的時間,這部分的恢復速度大概是20~70秒/GB,整個恢復時間是這兩部分之和。
性能和容量
Q:表個數上限是多少?表個數到多少時有可能會引起性能下降?
A:表個數的上限受文件數量限制,詳情請參見使用限制。
Q:表分區能夠提高PolarDB的查詢性能嗎?
A:通常來說,如果查詢SQL能夠落在某個分區內,是可以提升性能的。
Q:PolarDB是否支持創建1萬個數據庫?數據庫個數上限是多少?
A:PolarDB支持創建1萬個數據庫。數據庫個數上限受文件數量限制,詳情請參見使用限制。
Q:IOPS是怎么限制和隔離的?是否會出現多個PolarDB集群節點的I/O爭搶?
A:PolarDB集群的每個節點根據規格大小設置IOPS,每個節點之間IOPS獨立隔離,互不影響。
Q:只讀節點的性能變慢是否會影響主節點?
A:只讀節點的負載過高、復制延遲增高時,可能會少量增加主節點的內存消耗。
Q:打開SQL洞察(全量SQL日志審計),對性能有什么影響?
A:無影響。
Q:PolarDB使用了什么高速網絡協議?
A:PolarDB的數據庫計算節點和存儲節點之間,以及存儲數據多副本之間,都使用了雙25 Gbps RDMA技術,提供低延遲、高吞吐的強勁I/O性能。
Q:PolarDB外網連接的帶寬上限是多少?
A:PolarDB外網連接的帶寬上限為10 Gbit/s。
Q:重啟節點需要的時間很長怎么辦?
A:當您的集群中存在的文件數量越多,節點重啟需要的時間會越長。此時您可以通過修改innodb_fast_startup參數值為ON來加速重啟,關于如何修改參數,請參見設置集群參數和節點參數。