本文介绍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来加速重启,关于如何修改参数,请参见设置集群参数和节点参数。