tencent cloud

TDSQL-C MySQL 版

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
产品优势
应用场景
产品架构
产品规格
实例类型
产品功能列表
数据库版本
地域和可用区
常用概念
使用限制
使用规范建议
自研内核
内核概述
内核版本更新动态
内核优化版本
功能类特性
性能类特性
安全类特性
稳定性特性
分析引擎特性
内核问题检查与修复
购买指南
计费概述
产品价格
创建集群
变配说明
续费说明
欠费说明
退费说明
按量转包年包月
按量转 Serverless
增值服务计费说明
查看费用账单
快速入门
数据库审计
简介
查看审计实例列表
开通审计服务
查看审计日志
日志投递
配置事后告警
修改审计规则
修改审计服务
关闭审计服务
审计规则模板
查看审计任务
授权子用户使用数据库审计
Serverless 服务
Serverless 简介
创建和管理 Serverless 版集群
弹性管理工具
Serverless 资源包
多可用区部署
配置变更
常见问题
Serverless 成本预估器
操作指南
操作总览
控制台切换集群页面视图
数据库连接
实例管理
配置变更
实例形态管理
集群管理
只读实例管理
数据库代理
账号管理
数据库管理
数据库管理工具(DMC)
参数配置
多可用区部署
全球数据库
备份与恢复
操作日志
迁移数据
并行查询
列存索引 CSI
分析引擎
数据库安全和加密
监控与告警
SQL 基本操作
使用 SCF 连接 TDSQL-C MySQL 版
标签
实践教程
TDSQL-C MySQL 版数据库审计等保实践
通过 DTS 升级数据库版本 MySQL5.7至8.0
TDSQL-C MySQL 版使用规范
新版本控制台
数据库代理多连接地址实现多 RO 组
数据库代理的优势
如何选择存储空间计费模式
通过 DTS 构建异地灾备
为集群创建 VPC
如何进行数据恢复
如何解决 CPU 使用率高的问题
如何授权子用户查看监控
白皮书
安全白皮书
性能白皮书
故障处理
连接相关
性能相关
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Multi-Availability Zone APIs
Other APIs
Audit APIs
Database Proxy APIs
Backup and Recovery APIs
Parameter Management APIs
Billing APIs
serverless APIs
Resource Package APIs
Account APIs
Performance Analysis APIs
Data Types
Error Codes
常见问题
基础概念
购买与计费
兼容与格式
连接与网络
功能特性
控制台操作
数据库表
性能与日志
数据库审计
TDSQL-C MySQL 版和云数据库 MySQL 有什么区别
相关协议
服务等级协议
服务条款
TDSQL-C 政策
隐私政策
数据处理和安全协议
通用参考
标准与认证
词汇表
联系我们

purge binlog 性能优化

PDF
聚焦模式
字号
最后更新时间: 2024-11-13 21:34:01

功能介绍

在数据库中,binlog 是用于记录数据库操作的日志文件,包括数据库的增删改操作等。随着时间的推移,binlog 文件会越来越多,占用大量磁盘空间,因此需要定期进行清理,也就是 purge binlog 操作。然而,purge binlog 和正常的 rotate 以及写事务会发生冲突,尤其是当 binlog 文件数量很多时,会导致在 purge binlog 操作时容易引起性能抖动。腾讯云内核团队通过对清理 binlog 文件场景的分析,对 purge binlog 的性能进行了优化。
优化 purge binlog 与 rotate binlog 的 LOCK_index 冲突,避免 rotate binlog 读取不到锁而无法继续 binlog 写入
当前在 purge binlog 持有 index lock 期间,binlog 达到了256M后需要 rotate binlog 时读取不到锁,导致写入停止,直到获取到 index lock 后才能继续。针对上述问题,主要优化为,如果 rotate binlog 读取不到 index lock,将不会 rotate binlog,将会继续写 binlog 到当前 binlog 文件。之后不断尝试获取 index lock,直到读取到 index lock 才会 rotate binlog。
减少了需要 purge 的 binlog 文件读取量,从而减少了锁
purge binlog 过程需要读取所有需要 purge 的 binlog 里的 Gtid 信息,然后写入到 mysql.gtid executed 表,所以 purge 期间的会一直持有 gtid 的排他锁,导致正常事务不能获取到 gtid 锁。针对上述问题,主要优化为,只读取 binlog 列表里的最后一个 binlog 文件里的 gtid,从而减少了 gtid 锁的持有时间,减少对正常事务的影响。
binlog 单个文件上限提高到10G,从而大量減少 rotate binlog 的次数
默认 binlog 大小为256MB,5000QPS压力下,大约每1.4s rotate 一次,每次 rotate 耗时10~20ms。当前 max_binlog_size 支持从256MB提升到10G(开源 MySQL 最大支持1G),同样压力下,56s rotate 一次,从而减少了 index 锁的获取频次。当前策略是设置为1G,可以根据业务压力的需要,进一步调整 max_binlog_size 的参数值。

支持版本

内核版本 TDSQL-C MySQL 版8.0 3.1.12及以上。
内核版本 TDSQL-C MySQL 版5.7 2.1.12及以上。

适用场景

在 binlog 文件数量很多时,执行 purge binlog 操作产生锁争用导致业务 binlog 写入阻塞的场景。

使用说明

通过参数使用该功能,将参数 txsql_binlog_rotate_try_lock_index,txsql_binlog_rotate_try_lock_log 设置为 ON,并设置参数 txsql_binlog_purge_check_file_count 的值为10,即可使用该能力,详细参数说明如下:
名称
是否全局
类型
默认
取值范围
说明
txsql_binlog_rotate_try_lock_index
全局
bool
ON
ON/OFF
设置为 ON 后,执行 binlog rotate 时如果读取不到 index 文件的锁,则放弃本次 rotate。
txsql_binlog_rotate_try_lock_log
全局
bool
ON
ON/OFF
设置为 ON 后,执行 binlog rotate 时如果读取不到 binlog 的锁,则放弃本次 rotate。
txsql_binlog_purge_check_file_count
全局
ulonglong
10
0-UINT64_MAX
执行 purge binlog 时会从 binlog index 文件获取 binlog 文件名,当 binlog 数量很多时,这个操作会很耗时,而正常情况下,只需要获取一个 binlog 文件名称就能达到目的。该参数控制了获取的文件名数量,0表示不限制,一般设置成10即可。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈