您当前的位置:首页 > 电脑百科 > 数据库 > 百科

PolarDB-X内核新版本:将MySQL进行到底

时间:2022-09-27 10:52:55  来源:今日头条  作者:阿里云数据库


 

1. 概览

在过去的3个月中,我们发布上线了冷热数据分离存储等功能。今天很高兴和大家交流PolarDB-X最新的内核版本5.4.15。在最新版本中,提供诸多新的功能:存储过程,读写分离优化,表级分区管理,密码、审计优化等。

除此之外,在这一版本中相较于前序版本也有了长足的进步,修复了 15个 Issues,并融入了26个增强特性。我们会不断地将新版本的功能,开放同步到开源社区。

另外,我们将在近期推出PolarDB-X标准版,满足小规模部署要求,降低分布式数据库的使用门槛,未来更加顺滑的过度到分布式数据库,欢迎大家到公共云进行使用。

2. MySQL生态

PolarDB-X坚持MySQL生态,在内核新版本中支持存储过程功能。

2.1 存储过程

在实现某些需求时,需要编写一组复杂的SQL语句才能实现的时候,很多资深数据库用户习惯使用存储过程。很显然存储过程能带来如下好处:

 

  1. 复用性高。存储过程可以重复使用,从而减少数据库开发人员的工作量,同时降低业务出错概率。
  2. 效率高。存储过程编译一次后,就会存到数据库,每次调用时都直接执行。
  3. 降低网络流量。存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的SQL语句。
  4. 安全性高。完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。

 

当然存储过程也存在一些缺点:

 

  1. 可移植性差。
  2. 如果使用大量的存储过程,使用这些存储过程的每个连接的内存使用量将大大增加。

 

在PolarDB-X中我们对内存进行了严格管理。

原理简介


 

存储过程会被持久化到Meta center中,按需加载到计算节点中执行,SQL相关的执行逻辑会发送到SQL engine中执行,然后获取执行结果,存储过程的控制流程等相关的逻辑会在PL engine中执行。

存储过程在真正执行前会注册到运行时存储过程管理中心,同时整个执行过程中存储过程所占用的内存大小会被严格限制。

存储过程内存管理

存储过程执行过程中的内存占用主要为缓存的cursor,因此我们对单个cursor所能使用的最大内存以及整个存储过程在执行时占用的内存进行了限制,由两个参数控制,PL_CURSOR_MEMORY_LIMIT和PL_MEMORY_LIMIT。

其中,变量PL_CURSOR_MEMORY_LIMIT用于控制每个Cursor所占用的内存,超过该阈值时会spill到硬盘中;变量PL_MEMORY_LIMIT用于控制每个存储过程所能使用的最大内存。


 

3. 易用性优化3.1 读写分离优化

PolarDB-X配置了多种读写策略,提供了透明的强一致的读写分离能力。其特点有:

 

  • 无论什么状况都不用担心误写了“备副本或只读副本”,因为它不支持写,写操作会被路由到主副本;
  • 无论什么时候不用担心“备副本或只读副本”故障,因为它会自动路由给其他正常的副本或者切回主副本;
  • 无论什么场景不用担心 “备副本或只读副本”读不到最新的数据,因为它提供的是强一致的读写能力;
  • 大查询不用担心打爆“主副本”,因为它支持将大查询路由给”备副本或只读副本“,避免对主副本造成压力。

 

PolarDB-X会基于CTS+Log 在主副本和只读副本间做一致性复制,基于CTS+TSO确保在只读副本上读到已经提交的最新数据。在一致性读的能力上,配置了规则读写分离和智能读写分离的能力,业务可以更加透明的使用。


 

强一致性读

RW节点会维护好自身MAX CTS(全局一致性日志位点),RO节点通过日志回放,也会不断更新当前自身的CTS。路由到RO节点的强一致性读查询过程如下:

 

  1. 客户端把请求发送到计算节点;
  2. 计算节点识别到请求会发送给RO,首先会从RW节点获取当前最大CTS;
  3. 计算节点把CTS /TSO /请求一起发送给RO;
  4. RO节点根据接收到的CTS判断是否等到RO节点事务状态回放到相应位点;根据TSO判断数据可见性,给CN返回结果。

 

规则读写分离

用户不需自己做业务改造,去支持读写分离场景。PolarDB-X支持业务透明使用读写分离能力,用户只需要配置读写分离权重,内核自己会将部分读请求发送给主副本,部分读请求发送给只读副本。此外其相比于传统的读写分离,还有如下优势:

 

  • 如果存在多个只读副本,会把请求调度到延迟更低的只读副本上;
  • 支持只读副本异常或者延迟过大,自动将流量切回主副本。

 

智能读写分离

PolarDB-X 提供的只读实例具有MPP查询加速的能力,在内核上我们提供了基于查询代价智能识别工作负载。将AP类查询转发给只读实例计算层CN,在只读实例CN上做MPP查询后,将结果返回给主实例CN。这类读写分离主要针对于混合负载场景。

3.2 表级分区精细化管理

在数据库使用过程中,原来预想的数据分区和实际的数据分布不匹配,导致数据分布不均匀,或者需要进行迁移,那么如何进行调整呢。

分区分裂

当一个分区数据出现倾斜的时候,可以将表的一个分区分裂成多个分区。

原表定义将数据分成P1和P2

CREATE TABLE Table1(a int) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN(20), PARTITION p2 VALUES LESS THAN(100))

那么我们可以通过以下SQL将P1分裂成P10,P11,P12

ALTER TABLE Table1 SPLIT PARTITION p1 INTO (PARTITION p10 VALUES LESS THAN (8), PARTITION p11 VALUES LESS THAN(15), PARTITION p12 VALUES LESS THAN(20))

分区合并

将多个分区(两个或者两个以上)合并成一个分区。

对于Hash/Key/Range/Range column分区,只能将相邻的分区合并,对于List/List column分区,可以将任意分区合并在一起。

例如表tb1的定义如下:

CREATE TABLE tb1(a int) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN(20), PARTITION p2 VALUES LESS THAN(40), PARTITION p3 VALUES LESS THAN(100))

可以通过以下SQL将p1和p2合并:

ALTER TABLE tb1 MERGE PARTITIONS p1,p2 to p12

需要注意的是不能将不相邻的两个分区,例如p1和p3合并到一起。

分区迁移

将分区迁移到指定的存储节点

例如表tb1的定义如下:

CREATE TABLE tb1(a int) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN(20), PARTITION p2 VALUES LESS THAN(40), PARTITION p3 VALUES LESS THAN(100))

可以通过以下SQL将p1,p3迁移到指定的存储节点DN2(其中DN2是存储节点的ID)中

ALTER TABLE tb1 MOVE PARTITIONS p1,p3 to 'DN2'3.3 密码、审计优化

当前,对于数据库安全性要求越来越高,尤其在等保、合规方面,通常都会对密码复杂度、密码是否能定期修改、或者是否配置密码自动过期策略有严格要求。避免出现过于简单的密码或相同密码长期未修改被暴力破解,降低数据库的安全风险。

在新版本中新增支持了以下安全审计功能:

1、基于正则表达式规则来配置密码复杂度;(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).{8,20}配置了密码必须包含大小写字母和数字,且长度在8~20个字符之间;

如果您采用了11位组合字符密码,那在现有技术条件下,需要400年才能破解。


 

2、为不同账户配置不同的密码自动过期策略。当系统时间到达指定日期时间(可精确到秒),对应账户将无法登录数据库。

注意,在开启密码自动过期策略后,用户需要定期检查密码是否即将过期,并及时进行修改,避免影响业务。

4. 展望

越来越多的业务需要弹性,灵活而有效的应对突发情况。如何快速适应业务形态的变化,对云原生分布式数据库提出了更高的要求。我们在细细打磨产品的深度上下功夫的同时,对于这种广度的延伸一致保持着敏锐的洞察。非常期待和大家一起,将分布式数据库对业务的覆盖广度更加延伸,我们将在近期推出PolarDB-X 标准版,满足分布式数据库小规模部署要求,敬请期待。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  Search: MySQL  点击:(7)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  Search: MySQL  点击:(11)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  Search: MySQL  点击:(10)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  Search: MySQL  点击:(25)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10  Search: MySQL  点击:(9)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  Search: MySQL  点击:(28)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  Search: MySQL  点击:(49)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  Search: MySQL  点击:(53)  评论:(0)  加入收藏
为什么高性能场景选用Postgres SQL 而不是 MySQL
一、 数据库简介 TLDR;1.1 MySQL MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP...【详细内容】
2024-02-19  Search: MySQL  点击:(38)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: MySQL  点击:(54)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(5)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(5)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(14)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(14)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(7)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(15)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(6)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(5)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(32)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条