set names都做了什么 发表于 2021-09-18 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论数: | 阅读次数: 背景最近有同事问,set names 时会同时设置了3个session变量 123SET character_set_client = charset_name;SET character_set_results = charset_name;SET character_set_connection = charset_name; 就从变量名字来看,character_set_client 是设置客户端相关的字符集,character_set_results 是设置返回结果相关的字符集,character_set_connection 这个就有点不太明白了,这个有啥用呢? 阅读全文 »
InnoDB预读 VS Oracle多块读 发表于 2021-09-18 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论数: | 阅读次数: 背景目前,IO 仍然是数据库的性能杀手,为了提高 IO 利用率和吞吐量,不同的数据库都设计了不同的方法,本文就介绍下 InnoDB 提供的预读(read-ahead)功能,以及 Oracle 提供的多块读(multiblock-read)功能,并进行一些对比。 阅读全文 »
MySQL数据库SYS CPU高的可能性分析 发表于 2021-09-18 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论数: | 阅读次数: 问题背景我们在管理繁忙的 MySQL 数据库时,可能都有碰到 SYS CPU 高的经历:系统突然 SYS CPU 高起来,甚至比 USER CPU 高很多,这时系统 QPS、TPS 急剧下降。 SYS CPU高是什么造成的呢?主要有2种可能: context switch 不高,但在内核态 spin,导致 SYS CPU 高 context switch 高,每秒超过 200K,有时超过1M,过多 context switch 导致 SYS CPU 高 下面我们对这两种情况逐一分析。 阅读全文 »
zstd压缩算法 发表于 2021-09-18 | 分类于 数据库内核 , TokuDB , 分支特性 | 评论数: | 阅读次数: 压缩很任性TokuDB有着出色的压缩特性,这不是”盖”的: RDS上有个InnoDB实例,1天的数据将近700GB空间,换成TokuDB后(默认zlib压缩),同样的700GB可以保存5天的数据,业务读写性能也无任何影响,空间成本直线下降。 为什么TokuDB的压缩这么给力? 因为TokuDB一个“页”的大小为4MB,压缩起来,这酸爽… 阅读全文 »
InnoDB redo log漫游 发表于 2021-09-18 | 分类于 数据库内核 , MySQL , 引擎差异 | 评论数: | 阅读次数: 前言InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性。 和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改,并保证总是日志先行,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo日志已经写到磁盘。 阅读全文 »
GTID下auto_position=0时数据不一致 发表于 2021-09-17 | 评论数: | 阅读次数: 问题重现搭建一主一备,主备配置分别如下 ,同时设置备库的auto_position=0 阅读全文 »
UPDATE交换列单表和多表的区别 发表于 2021-09-17 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论数: | 阅读次数: 背景描述之前我们遇到一个咨询,客户说: 同一个表,col1=a,col2=b,做 update,set col1=col2,col2=col1,这时候两个都是b 不同表,A表 col1=a,B表 col2=b,做 update,就能进行交换 为什么不同表就能交换呢? 阅读全文 »
Relay log中GTID group完整性检测 发表于 2021-09-17 | 分类于 数据库内核 , MySQL , 捉虫动态 | 评论数: | 阅读次数: bug背景官方 5.7.6 版本对 gtid 有非常多的改进和bugfix,其中有一个 bugfix 是针对 relay log 中没有接收完整的 gtid 事务的。正常的relay log 中的 gtid 事务应该是像下面这样: gtid event query event (begin) row event (write/update/delete) query event (commit) 阅读全文 »
GTID下slave_net_timeout值太小问题 发表于 2021-09-17 | 分类于 数据库内核 , MySQL , 捉虫动态 | 评论数: | 阅读次数: 背景官方 5.6 最新版本 5.6.24 有这样一个bugfix,当使用 GTID 协议进行复制,并且备库的 slave_net_timeout 值设置太小的话,备库的 slave io 线程会卡住,同时主库上的 binlog dump 线程数一直在涨,官方的bug地址 。 阅读全文 »
连接断开导致XA事务丢失 发表于 2021-09-17 | 分类于 数据库内核 , MySQL , 捉虫动态 | 评论数: | 阅读次数: 我们看到在MySQL 5.7版本里大量遗留很多年的bug都被fix掉了,bug#12161就是其中一个,该bug在2005年第一次report到Bug list上,十年之后终于在MySQL 5.7.7 第一个RC版本被fix了。 阅读全文 »