本文介紹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來加速重啟,關於如何修改參數,請參見設定叢集參數和節點參數。