主要云厂商RDS-MySQL8.0版本内核改造汇总
(2022-08-06 10:57:58)分类: mysql使用 |
如下是收集的腾讯云、华为云、和阿里云的RDS-MySQL做的主要内核改动汇总,含版本变更日志中主要优化改动:
产品 | 亮点特性 | 说明 |
腾讯云RDS-mysql (TXSQL内核) |
自动 kill 空闲事务 |
对于处于开启事务状态的连接(显示使用 begin、start transaction
或者隐式开启事务),如果超时时间内没有下一条语句执行,kill 连接。 通过参数 cdb_kill_idle_trans_timeout 控制是否开启该功能 |
腾讯云RDS-mysql (TXSQL内核) |
table级并行复制 | 支持按 table 并行,slave_parallel_type=table,不同表的复制事件可以并行执行。 |
腾讯云RDS-mysql (TXSQL内核) |
动态线程池 | 为了提高 Per_thread 模式与 Thread_pool 模式切换的灵活程度,云数据库 MySQL 提出了线程池动态切换的优化,即在不重启数据库服务的情况下,动态开启或关闭线程池。 |
腾讯云RDS-mysql (TXSQL内核) |
DDL 支持 NO_WAIT 和 WAIT 选项 | 对于 DDL 操作,可通过 WAIT 设置等待 MDL LOCK 的秒数,如果在设定时间内未能获取到 MDL LOCK 则直接返回,也可指定 NO_WAIT 选项,未能获取到 MDL LOCK 直接返回。 |
腾讯云RDS-mysql (TXSQL内核) |
支持 returning |
别支持:INSERT ... RETURNING、REPLACE ... RETURNING、DELETE ...
RETURNING。该语法允许返回所有被 INSERT/REPLACE/DELETE 语句操作过的行(statement
为单位)。 例如:INSERT INTO t1 (id1) SELECT id2 from t2 returning id1; |
腾讯云RDS-mysql (TXSQL内核) |
列压缩 |
列压缩功能可以压缩那些访问不频繁的大字段而不压缩那些访问频繁的小字段,此时不仅能够减少整行字段的存储空间,而且可以提高读写访问的效率。 例如:b BLOB COMPRESSED=zlib |
腾讯云RDS-mysql (TXSQL内核) |
大事务复制 | 大事务复制优化功能将自动识别大事务,并将 row 模式的 binlog 转化为 statement 格式的 binlog,从而减少 binlog 并提升复制效率。 |
腾讯云RDS-mysql (TXSQL内核) |
计划缓存点查优化 | MySQL
数据的 SQL 执行步骤主要包括解析、准备、优化和执行四个阶段。执行计划缓存能力在 prepare statement
模式起作用,prepare statement 模式在 execute
时省略了解析和准备两个阶段,执行计划还会省略优化阶段,将性能进一步提升。 20210830 版本只对(UK&PK)点查起作用。 |
腾讯云RDS-mysql (TXSQL内核) |
bufferpool 初始化 | 加快 buffer pool 初始化速度,降低数据库实例启动耗时。 |
腾讯云RDS-mysql (TXSQL内核) |
Fast DDL | 开启该功能会使用多线程并发对二级索引数据进行外部排序,同时优化 flush bulk loading 阶段对 flush list 的加锁操作,有效降低 CREATE INDEX 的耗时和对并发 DML 的影响。 |
腾讯云RDS-mysql (TXSQL内核) |
计算下推 |
该功能将单表查询的 LIMIT/OFFSET 或 SUM 操作下推到 InnoDB,有效降低查询时延。 LIMIT/OFFSET 下推到二级索引时,该功能将避免“回表”操作,有效降低扫描代价。 SUM 操作下推到 InnoDB 时,在 InnoDB 层进行计算返回“最终”结果,节省 Server 层和 InnoDB 引擎层多次迭代“每行”记录的代价。 |
腾讯云RDS-mysql (TXSQL内核) |
异步审计 |
审计分为同步审计和异步审计两种模式。同步审计同步记录所有审计日志,平均性能影响小于6%;异步审计能确保实例性能近乎不受影响,性能损耗最高仅有不到3%。 记录对数据库的访问及 SQL 语句执行情况(包括语句开启时间、扫描行数、锁等待时间、 CPU 使用时间、客户端 IP、用户名、SQL 内容等) |
腾讯云RDS-mysql (TXSQL内核) |
异步删除大表 | DROP TABLE 会将原数据库文件 (.ibd) 重命名为一个新的临时文件并返回成功,临时文件存放在 innodb_async_drop_tmp_dir 指定的目录下并创建一个硬连接,之后后台线程扫描到硬连接目录中有需要删除的文件,自动在后台 truncate 前面 drop 掉表数据文件。 |
腾讯云RDS-mysql (TXSQL内核) |
热点更新 | 针对于频繁更新或秒杀类业务场景,大幅度优化对于热点行数据的update操作的性能。当开启热点更新自动探测时,系统会自动探测是否有单行的热点更新,如果有,则会让大量的并发 update 排队执行,以减少大量行锁造成的并发性能下降。 |
腾讯云RDS-mysql (TXSQL内核) |
SQL 限流 | 通过关键字的设置,限制特定 SQL 同一时间内可并发执行的并发度。 |
腾讯云RDS-mysql (TXSQL内核) |
statement outline | OUTLINE 主要依靠 HINT 来指定查询计划,我们提供系统表 mysql.outline 让用户添加计划绑定规则,通过开关(cdb_opt_outline_enabled)控制是否开启该功能。 |
腾讯云RDS-mysql (TXSQL内核) |
其他性能优化点 (整理自发版记录) |
1.
优化扫描 flush list 刷脏:通过优化刷脏机制,解决了创建索引过程中的性能抖动问题,提升了系统稳定性。 2. 使用直方图替代索引下探,降低评估误差以及 I/O 开销,该能力默认未打开 3. 通过聚合 event 多个相同的 binlog event 来提升 hash scan 的应用速度。 4. 优化关闭 binlog_order_commits 时事务提交时 gtid 的锁冲突。 5. 优化 BINLOG LOCK_done 锁冲突,提升写入性能。 6. 使用 Lock Free Hash 优化 trx_sys mutex 冲突,提升性能。 |
腾讯云RDS-mysql (TXSQL内核) |
其他功能点 (整理自发版记录) |
1. 2. 支持扩展资源组,可对 IO、内存使用占比以及 SQL 超时策略以用户为单位进行控制 3. 4. 支持 Sort Merge Join 功能。 |
华为云RDS-mysql | MDL锁视图 |
社区版MySQL如果不打开performance_schema开关,则无法获取表元数据锁(MDL)的详细信息,但通常情况下performance_schema默认关闭。 华为云RDS for MySQL推出了MDL锁视图特性,可以查看数据库各会话持有和等待的元数据锁信息,用户可以有效进行系统诊断,优化自身业务,有效降低对业务影响。 该表位于“information_schema”下,表名称是“metadata_lock_info”。 |
华为云RDS-mysql | 在线扩展varchar类型字段 | 当字段类型是varchar时,原生MySQL只支持不跨越256字节的在线扩展(online),对于跨越256字节的扩展只支持复制方式(copy),扩展时需要锁表且禁止对数据表进行写操作。华为云RDS for MySQL支持跨越256字节的扩展,支持对任何长度的varchar类型的字段进行在线扩展操作。 |
华为云RDS-mysql | 主动终止空闲事务 | 华为云RDS
for MySQL针对空闲事务有超时回滚断开连接机制,具有以下特点: - 针对不同类型的事务有不同的参数进行控制 。 - 当空闲事务超时后会被自动的回滚并断开连接。 |
华为云RDS-mysql | DDL进度显示 | 华为云RDS for MySQL推出了DDL进度显示特性,用户可以通过查询“INFORMATION_SCHEMA.INNODB_ALTER_TABLE_PROGRESS”表来实时查看当前的DDL语句所进行的阶段,以及该阶段的进度。 |
华为云RDS-mysql |
其他性能优化点 (整理自发版记录) |
1.
升级编译器到GCC 9.3 2. 开启PGO(Profile-Guided Optimization)编译优化 3. |
华为云RDS-mysql |
其他功能点 (整理自发版记录) |
1.
用户线程内存使用信息、CPU时间使用信息,您可以通过show full processlist进行查询 2. 3. 显示大事务执行时间和等待时间 |
阿里云RDS-mysql | Native Flashback | Native Flashback功能可以通过SQL语句查询或恢复指定时间点的数据,保证在误操作后可以快速获取历史数据。 |
阿里云RDS-mysql | Thread Pool | 阿里云RDS的线程池实现了不同类型SQL操作的优先级及并发控制机制,将连接数始终控制在最佳连接数附近,使RDS数据库在高连接大并发情况下始终保持高性能。 |
阿里云RDS-mysql | Statement Outline | 阿里云利用Optimizer Hint和Index Hint让MySQL稳定执行计划,该方法称为Statement Outline,并提供了工具包(DBMS_OUTLN)便于您快捷使用。 |
阿里云RDS-mysql | Sequence Engine | Sequence Engine通过Sequence Handler接口访问Sequence对象,实现NEXTVAL的滚动、缓存的管理等,最后透传给底层的基表数据引擎,实现最终的数据访问。 |
阿里云RDS-mysql | Returning | AliSQL提供returning功能,支持DML语句返回Resultset,同时提供了工具包(DBMS_TRANS)便于您快捷使用。支持INSERT、UPDATE、DELETE。 |
阿里云RDS-mysql | Lizard事务系统 | 通过在innodb行里存储提交版本号,避免基于活跃事务快照的mvcc实现,减小读写事务冲突。 |
阿里云RDS-mysql | Fast Query Cache | 针对原生MySQL Query Cache的不足,阿里云进行重新设计和全新实现,推出Fast Query Cache,能够有效提高数据库查询性能。 |
阿里云RDS-mysql | Binlog in Redo | Binlog in Redo功能指在事务提交时将Binlog内容同步写入到Redo Log中,减少对磁盘的操作,提高数据库性能。 |
阿里云RDS-mysql | Statement Queue |
AliSQL设计了针对语句的排队机制,将语句进行分桶排队,尽量把可能具有相同冲突的语句(例如操作相同行)放在一个桶内排队,减少冲突的开销。 实现上基于hint实现,可以与outline功能配合使用。 |
阿里云RDS-mysql | Fast DDL | 优化DDL操作过程中的Buffer Pool管理机制,降低DDL操作带来的性能影响,提升在线DDL操作的并发数。 |
阿里云RDS-mysql | Statement Concurrency Control | 为了应对突发的数据库请求流量、资源消耗过高的语句访问以及SQL访问模型的变化, 保证MySQL实例持续稳定运行,阿里云提供基于语句规则的并发控制CCL(Concurrency Control),并提供了工具包(DBMS_CCL)便于您快捷使用。 |
阿里云RDS-mysql | Performance Agent | Performance Agent 通过插件的方式在information_schema系统库下新增了一张内存表PERF_STATISTICS,用于统计最近一段时间的性能数据,您可以直接查询该表获取相关指标的性能数据。默认采样间隔为1秒时,保存最近1小时的性能数据。 |
阿里云RDS-mysql | Purge Large File Asynchronously | 使用InnoDB引擎时,直接删除大文件会导致POSIX文件系统出现严重的稳定性问题,因此InnoDB会启动一个后台线程来异步清理数据文件。当删除单个表空间时,会将对应的数据文件先重命名为临时文件,然后清除线程将异步、缓慢地清理文件。 |
阿里云RDS-mysql | Performance Insight |
Performance
Insight是专注于实例负载监控、关联分析、性能调优的利器,帮助您迅速评估数据库负载,找到性能问题的源头,提升数据库的稳定性。 Performance Insight由如下两部分组成:Object statistics查询表和索引的统计信息,Performance point提供实例基于sql模板的详细性能信息,方便您更快更准确地量化SQL的开销。 |
阿里云RDS-mysql | Recycle Bin | 由于DDL语句无法回滚,开发或运维人员如果误操作(例如DROP TABLE)可能会导致数据丢失。阿里云支持回收站(Recycle Bin)功能,临时将删除的表转移到回收站,还可以设置保留的时间,方便您找回数据,同时提供了工具包(DBMS_RECYCLE)便于您快捷使用。 |
阿里云RDS-mysql |
其他性能优化点 (整理自发版记录) |
1.
优化不同CPU架构下的pause指令执行时间 2. 支持异步多块读(Multi Blocks Read)功能。在SQL语句中添加HINT 可预读多个数据页。 |
阿里云RDS-mysql |
其他功能点 (整理自发版记录) |
1.
透明数据加密TDE(Transparent Data
Encryption)功能,可对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密 2. MySQL Binlog工具增加开始GTID(start gtid)和结束GTID(stop gtid)功能 3. 在performance_schema.events_statements_summary_by_digest_supplement表中增加TCP写入等待时长 4. 在半同步模式下添加网络往返时间,并记录到性能数据 5. 强制将引擎从MyISAM或MEMORY转换为InnoDB:如果全局变量force_mysiam_to_innodb或force_memory_to_innodb为ON,则创建和修改表时会将表引擎从MyISAM或MEMORY转换为InnoDB 6. 支持输出Redo Log的各个LSN值: innodb_lsn:重做日志的lsn编号。 innodb_log_checkpoint_lsn:最后检查点的lsn。 innodb_log_write_lsn:log写入的lsn。 innodb_log_ready_for_write_lsn:log buffer完成时间的lsn。 innodb_log_flush_lsn:磁盘上刷新redo log的lsn。 innodb_log_dirty_pages_added_up_to_lsn:添加脏页的lsn。 innodb_log_oldest_lsn:页面刷新的lsn |
转载请注明转自高孝鑫的博客!