当前位置: 首页 > 工具软件 > InnoSQL > 使用案例 >

innosql mysql_InnoSQL 8.0.19(MySQL分支)特性系列 - 新特性

沈飞翼
2023-12-01

前言

InnoSQL是网易杭州研究院维护的MySQL分支,从MySQL 5.5.20开始既已在网易内部业务大规模使用。上半年,我们基于社区最新的MySQL 8.0.19版本,开发了InnoSQL 8.0版本。增添了多个实用的新特性,这些特性包括了降低成本、提升性能和提高运维效率等。

接下来计划通过几篇文章对InnoSQL 8.0相比MySQL社区版的增强进行介绍。本文是第一篇,介绍我们新增的部分功能。

索引异步创建特性问题现状:MySQL的DDL操作一直存在不少问题,目前一般用pt-osc/gh-ost等第三方工具,虽然解决了原生alter table操作问题,但引入了存储空间翻倍、产生巨量Binlog导致复制延迟增大等其他问题;

社区改进:MySQL 8.0对此进行了部分优化,对于加列场景,可以仅改元数据秒级加列;

InnoSQL优化:大部分情况下,DDL操作主要有加列和加索引2类,加列社区版已解决,如果再把加索引解决,那么绝大部分DDL操作就基本上可以用原生alter table,在性能和资源消耗上都是最优的;

方案和收益:加索引是一种特殊DDL,不要求严格的实时性。因此将其从前台执行转为后台独立线程执行(对应参数online_ddl_async_index_creating),好处是无需拷表而占用翻倍的存储空间,主库和从库同时建索引以缩短创建时间,避免从库回放阻塞;

隐式列(hidden/invisible column)特性问题现状:外部业务的线上已有服务所使用的MySQL表,没有主键及适合做主键的列,导致性能瓶颈或迁移/升级受阻,但增加列会导致现有程序无法正常运行;

方案和收益:隐式列特性可以在不改当前业务程序代码的前提下为表增加字段,给业务升级和新业务开发提供便利,也有助于现有业务的无主键MySQL实例升级为MGR;

MGR Arbiter和Log角色特性问题现状:目前MGR至少需要3个节点来确保paxos组有容错能力,相比MySQL主从高可用实例增加了50%成本,对推动业务使用MGR非常不友好;

方案和收益:通过将某个MGR节点改造为Arbiter(参数group_replication_arbiter_member,无存储开销,无计算开销)或Log(参数group_replication_log_member,少量存储和计算开销)节点,将MGR的部署成本降低到跟MySQL主从实例差不多水平。在仅增加有限成本的情况下,享受到MGR的众多高价值特性;

基于Binlog幂等回放的分布式故障恢复特性问题现状:OLTP业务的数据库瓶颈主要在IO上,这是由于事务持久性要求每次提交前事务日志必须落盘。数据落盘分为数据写入操作系统缓存和回刷到磁盘2个步骤,前者确保数据库进程crash数据不丢,后者确保操作系统宕机数据不丢。相比前者,后者发生概率小很多;

方案和收益:将数据回刷磁盘从事务提交路径中去掉,改为后台每秒合并刷盘一次,因操作系统宕机丢失的最后一秒数据通过拉取高可用实例其他节点Binlog进行幂等回放来补上(开关参数innosql_perf_mode_async_flush);该特性可以大大提升数据库性能(sysbench update_index提升40%以上);

上述几个特性,是基于业务在使用MySQL/InnoDB时的痛点进行的针对性优化,其中部分特性也backport到了InnoSQL 5.7版本上。对于未来MySQL的部署方案,我们主推MGR,在网易新的基础技术品牌网易数帆 - 轻舟云原生PaaS服务中提供的RDS MySQL服务即是基于MGR的MySQL Operator。

 类似资料: