性能优化特性之:16K原子写

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本文介绍了在倚天实例上进行内存优化的调优特性:16K原子写 的优化原理、使用方法。

优化原理

MySQL InnoDB 的 page size 一般为 16KB,数据校验也是按 16KB 页面来计算的。但操作系统写入磁盘是以 4KB 页进行的,因此在极端场景如掉电,操作系统无法保证 InnoDB 的 16KB 页的原子写入,即 partial write。 为了解决 partial write 问题,MySQL 在将脏数据 flush 到数据文件时,会先将脏数据拷贝到 double write buffer,之后通过 double write buffer 写入到共享表空间,再调用 fsync 刷到数据文件。 因此,数据页面存在双倍的写入,这在实际应用场景可能带来如下问题: 1)云盘场景,额外占用存储带宽,抖动问题变多; 2)传统物理机场景,额外的写入会降低 SSD 的寿命(TBW 为 SSD 的生命周期重要指标之一)。 大致原理图如下:

image.png Double Write 介绍:  https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html 

16k 原子写方案旨在通过文件系统 COW 异地更新的机制,确保 MySQL 16k 页面原子写入,同时对 MySQL 应用无侵入,优化 MySQL 的性能和数据写入量,解决 Double Write 带来的额外带宽占用以及降低 SSD 寿命等问题。

使用方法

1、下载 OpenAnolis 社区 SIG 的特性分支代码,并编译安装。

git clone git@gitee.com:anolis/storage-cloud-kernel.git git checkout feature/atomic-write make anolis_defconfig make -j64 -s sudo make modules_install -j64 -s sudo make install sudo reboot

2、安装 MySQL 和客户端:

sudo yum install mariadb mariadb-server mariadb-devel

3、创建 xfs 数据盘并挂载,用于保存 MySQL 数据库。 (注意需确保 xfsprogs 版本支持 reflink 特性)

sudo mkfs.xfs -m reflink=1 <device> sudo mount <device> <mnt_point> sudo chown -R mysql:mysql <mnt_point>

例如:

sudo mkfs.xfs -m reflink=1 /dev/vdb sudo mount /dev/vdb /var/lib/mysql sudo chown -R mysql:mysql /var/lib/mysql

4、修改 MySQL 配置文件 /etc/my.cnf,使用 direct 写入,并关闭 double write。例如:

[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock ... innodb_file_per_table innodb_page_size = 16384 innodb_buffer_pool_size = 12288M innodb_use_native_aio = 0 innodb_flush_method = O_DIRECT innodb_doublewrite = 0  # 已支持 16k 原子写,无需 double write
  • 设置 mysql db 目录为原子写目录,如:
sudo chattr +c /var/lib/mysql
  • dmesg 将显示原子写已针对目录开启信息:
[  330.918099] XFS (vdb): atomic write set on dir ino 128

6、启动 mysqld 服务。

sudo systemctl start mariadb

7、下载并编译 sysbench。

git clone https://github.com/akopytov/sysbench.git cd sysbench ./autogen.sh ./configure make -j64 -s sudo make install

8、运行测试。

sudo ./test-mysql.sh




---------------------------------------------------------------------------------------

更多调优信息,请参考:

龙蜥社区:https://openanolis.cn/

KeenTune SIG:https://openanolis.cn/sig/KeenTune

阿里云龙蜥操作系统专区:https://developer.aliyun.com/group/aliyun_linux

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
算法 安全 编译器
并发的三大特性
并发的三大特性
61 1
|
4月前
|
缓存 NoSQL Java
后端接口性能优化分析-多线程优化(中)
后端接口性能优化分析-多线程优化
111 0
|
4月前
|
消息中间件 存储 监控
后端接口性能优化分析-多线程优化(上)
后端接口性能优化分析-多线程优化
194 0
|
数据中心 Anolis
性能优化特性之:LSE指令集编译优化
本文介绍了倚天实例上的编译优化特性:LSE,并从优化原理、使用方法进行了详细阐述。
|
25天前
|
监控 Java 测试技术
Java并发编程最佳实践:设计高性能的多线程系统
Java并发编程最佳实践:设计高性能的多线程系统
36 1
|
2天前
|
存储 人工智能 算法
探究现代操作系统的架构与性能优化
本文将深入探讨现代操作系统的核心架构,并重点分析其性能优化的关键策略。我们将从宏观和微观两个角度出发,解释操作系统的基本组成部分及其相互作用,并通过具体实例展示如何通过各种技术手段提升系统性能。无论是软件开发者还是计算机专业的学生,都能从中受益,获得对操作系统更深层次的理解。
|
4月前
|
监控 Java 编译器
Go语言内存与并发性能综合优化策略
【2月更文挑战第11天】Go语言以其高效的并发处理能力和简洁的内存管理机制成为了现代软件开发中的热门选择。然而,在实际应用中,如何综合优化Go程序的内存使用和并发性能,仍然是一个值得探讨的话题。本文将深入探讨Go语言内存与并发性能的综合优化策略,包括内存布局优化、并发模式设计、资源池化以及性能监控与分析等方面,旨在帮助开发者全面提升Go程序的整体性能。
|
4月前
|
缓存 NoSQL Java
后端接口性能优化分析-多线程优化(下)
后端接口性能优化分析-多线程优化
177 0
|
10月前
|
存储 缓存 Linux
高效利用CPU缓存一致性:优化技巧与策略分析
高效利用CPU缓存一致性:优化技巧与策略分析
|
11月前
|
Java
并发三大特性
并发三大特性
31 0