- 博客(110)
- 收藏
- 关注
原创 各版本MySQL并行复制的实现及优缺点
MySQL并行复制已经是老生常谈,笔者从2010年开始就着手处理线上这个问题,刚开始两三年也乐此不疲分享,现在再提这个话题本来是难免“炒冷饭”嫌疑。 最近触发再谈这个话题,是因为有些同学觉得“5.7的并行复制终于彻底解决了复制并发性问题”, 感觉还是有必要分析一下。大家都说没有银弹,但是又期待银弹。。 既然要说5.7的并行复制,干脆顺手把各个版本的并行复制都说明一下,也...
2016-01-19 18:02:20
421
一个mysqldump导出失败的案例分析
背景MySQL全量逻辑备份恢复最基础的方法,就是mysqldump生成文本,再通过source 命令直接导入。一般用于实例迁移或者版本升级。这里说明最近碰到的一个失败例子。描述这个例子可以简要复现如下,在源库上执行如下操作:use mydb;create table t1 (id int);create view v1 as select * from ...
2014-06-03 23:16:03
871
MySQL 聚集UDF,计算列表中的奇数总和
技痒之作 -__- CREATE AGGREGATE FUNCTION oddsum returns INTEGER SONAME "udf_oddsum.so";CREATE TABLE `v1` ( `c` int(11) DEFAULT NULL, `id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGIN...
2014-06-02 23:08:50
421
autocommit=0引起的业务hang住
背景有用户报告一个普通的select 语句被hang住了,执行超时。查明之后发现是autocommit使用不当导致。这里将case简化,说明复现步骤及原因。复现session1 建表并插入数据:create table if not exists t(id int primary key, c int);set autocommit=0;insert int...
2014-05-25 17:53:48
309
一个用户SQL慢查询分析,原因及优化
问题描述一个用户反映线上一个SQL语句执行时间慢得无法接受。SQL语句看上去很简单(本文描述中修改了表名和字段名):SELECT count(*) FROM a JOIN b ON a.`S` = b.`S` WHERE a.`L` > '2014-03-30 00:55:00' AND a.`L` < '2014-03-30 01:00:00' ; 且查...
2014-05-23 03:25:37
387
一个用户迁移数据库前后的性能差异case
问题 一个用户问题,数据从ECS迁移到RDS,相同的语句,查询性能下降了几十倍。而实际上RDS这个实例在内存上的配置与原来ECS上的实例相当。本文简单说明这个case的原因及建议。用户反馈性能变慢的语句为 (修改了真实表名和列名)select count(1) from HR hr join H h on h.hid = hr.hid join A e on e....
2014-05-21 14:21:34
209
MySQL一个异常查询问题追查
问题线上碰到的问题:相同的语句,只是最后的limit行数不同。奇怪的是,limit 10 的性能比limit 100的语句还慢约10倍。隐藏用户表信息,语句及结果如下SELECT f1 , SUM(`f2`) `CNT` FROM T WHERE f1 IS NOT NULL AND f3 = '2014-05-12' GROUP BY f1 ORDER BY `C...
2014-05-16 12:38:26
274
Webscalesql代码浏览记录
浏览了下webscalesql 的代码。目前包含的62个commit分类如下。 目前还没有能够体现”webscale”特征的代码,不过从roadmap上看,fb回头会继续把一些大动作加进来,可以期待。本文先简要说明一下当前分支中一些有趣的代码。 关于代码洁癖Steaphan Greene (@fb)同学的代码洁癖从多达二十几个关于testcase和编译参数调整的co...
2014-04-03 18:28:04
130
Webscalesql代码浏览记录
浏览了下webscalesql 的代码。目前包含的62个commit分类如下。 目前还没有能够体现”webscale”特征的代码,不过从roadmap上看,fb回头会继续把一些大动作加进来,可以期待。本文先简要说明一下当前分支中一些有趣的代码。 关于代码洁癖Steaphan Greene (@fb)同学的代码洁癖从多达二十几个关于testcase和编译参数调整的com...
2014-04-03 18:27:33
135
Webscalesql代码浏览记录
浏览了下webscalesql 的代码。目前包含的62个commit分类如下。 目前还没有能够体现”webscale”特征的代码,不过从roadmap上看,fb回头会继续把一些大动作加进来,可以期待。本文先简要说明一下当前分支中一些有趣的代码。 关于代码洁癖Steaphan Greene (@fb)同学的代码洁癖从多达二十几个关于testcase和编译参数调整的com...
2014-04-03 18:27:24
151
MySQL Q&A 解析binlog的两个问题
连续碰到两个同学问类似的问题,必须要记录一下。 问题: 一个作解析binlog应用的同学发现不论用utf8还是gbk来解析binlog都可能会碰到无法解析的语句,因为有些用户会用utf8,有些用gbk。尤其在处理Query类型的SQL语句中的中文字符,比如建表语句中的中文注释。 于是他想到用mysqlbinlog来看看binlog里面的内容。 Mysql...
2014-03-31 17:18:54
142
mymysql与go-mysql-driver的一个区别
今天要写个工具就想顺便学下go。网上翻了下发现用比较多的是mymysql和go-mysql-driver。 这两个驱动网上比较的文章也有些了,不过都没有提到一个点,个人觉得是很重要的,记录一下。 先看使用go-mysql-driver的例子。 db,_:=sql.Open("mysql",connect_string) db.Query(...
2014-01-23 21:16:42
215
MySQL-Transfer2.3发布
Transfer 2.3发布,下载地址 此版本除了升级based版本外*优化了无索引表的同步性能*优化了slave模式下超大事务内存消耗问题*Transfer模式相关的功能改动较多*修复transfer模式下超大事务可能同步失败的bug 由于有两个公司的同学在使用5.5.31,因此该版本的改动也同时backport到5.5.31,下载地址版本说明1、 ...
2013-12-01 21:17:40
208
关于MySQL count(distinct) 逻辑的另一个bug
背景 上一篇博文(链接)介绍了count distinct的一个bug。解决完以后发现客户的SQL语句仍然返回错误结果(0), 再查原因,发现了另外一个bug。也就是说,这个SQL语句触发了两个bug -_- 这里只说第二个,将问题简化后复现如下,影响已知的所有版本 。 drop table if exists tb;set tmp_table_si...
2013-11-28 09:59:53
379
Is it a bug in MySQL or in java-connector?
Description In mysql-connector-java-5.1.27, the charset utf8mb4 is supported. But the steps and result bellow looks buggy.1、 set character_set_server=gbk in my.cnf2、 start mysql3、 ...
2013-11-19 13:58:47
138
关于MySQL count(distinct) 逻辑的一个bug
背景 客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用count(distinct)统计后返回的是0。 将问题简化后复现如下,影响已知的所有版本。 drop table if exists tb;set tmp_table_size=1024;create table tb(id int au...
2013-11-16 22:56:16
751
MySQL-Transfer2.2发布
Transfer 2.2发布。下载地址 版本说明1、 基于版本 Percona-5.5.31 ,简单用法是先安装好官方或PS版5531,然后替换为transfer的mysqld。2、 新增观察参数 Com_ts_*在压测过程中,可使用如下命令观察mysqladmin --socket=run/mysql.sock -uroot extended-status --...
2013-06-18 12:08:42
148
MySQL5.5加主键锁读问题—续
背景 上一篇说到MySQL 5.5加主键导致阻塞源表的读的问题。有同学提到从调用函数看,在默认的old_alter_table=off的情况下,加主键过程没有看到copy to tmp table。 这里我们再细说一下。 说说fast index creation 在MySQL 5.1以后InnoDB引入了fast index ...
2013-06-14 17:38:48
195
MySQL5.5加主键锁读问题
背景 有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下。 对照现象 为了说明这个问题的原因,有兴趣的同学可以做对比实验。 1) 在给InnoDB表创建主键期间,会锁住该表上的读数据 2) 但是同样的表执行删除主键期间,不会锁住该表上的读操作--...
2013-06-09 09:30:50
173
InnoDB row_id边界溢出验证
背景 跟同学聊到row_id一个边界问题,这里详细说明下。 InnoDB表若没有定义主键,会使用系统的一个默认递增row_id (dict_sys->row_id)作为主键。每次插入一行加1,到达最大值循环复用。 需要注意的是,虽然dict_sys->row_id 被定义为一个unsigned long long, 但由于这...
2013-05-28 13:34:01
445
MySQL优化器中一个Count和覆盖索引的问题
前天在微薄上发了个优化器的问题,从评论来看,还是需要简单说明一下。 现象说明 其实这里主要要说明的是一个优化器还需要改进的地方。 优化器会根据where条件和select_list里面的字段决定在使用一个索引(sta)后,是否需要回表—回到聚集索引取数据。 基本的做法是:在确定了一个索引后,将select_list和where中出现的所...
2013-05-20 11:23:43
627
关于MySQL建表对DML的影响
今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert、update等。不过也没有保留现场。因此有疑问为什么建表会影响DML? 分析 首先这个现象不是在所有场景都会碰到(否则MySQL的用户们早就跳起来了)。一来建表这个操作本身很快,只涉及到写表定义文件和初始化表空间。中间涉及到redo和undo的操作也很少(这里只讨论InnoDB表)。因此除非碰到磁...
2013-04-27 15:37:13
108
关于session variables 和 global variables
背景 有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row',在binlog里面还是会看到有生成statement格式的事件? 变量分类很多文章都说到MySQL的按照可见性范围分成两类 session和global。实际上是三类 ses...
2013-04-13 17:07:19
270
TARGET_AFFECT_ROWS 与 compound-statement 减少SQL交互的方案
背景 上篇文章我们介绍了MySQL支持的compound statement SQL的语法。有同学指出这个只是“部分compound”,因为这种多语句语法中不支持if这样的逻辑操作,因此在业务中的使用会受限。 这里我们给出一个常见的事务的逻辑。 1) 更新一行 2)若更新成功一行,则在另外一个表中插入一行,否则事务回滚。 在这样的需...
2013-04-11 23:02:10
328
关于MySQL的 compound-statement SQL
背景 将多个语句发给MySQL,可以减少网络交互次数。对于带事务的情况,可以缩短单线程上事务的生存期。 将业务逻辑写成存储过程是一种形式,但是考虑到这样等于是将业务逻辑绑定在服务端,不是最佳选择。有同学提到希望MySQL能够支持类似Oracle的compound-statement SQL ,实际上MySQL在5.0就支持啦。 C API ...
2013-04-07 15:19:34
252
InnoDB中Adaptive hash index存在问题、Percona改进及一个bug
背景 Adaptive hash index (AHI) 是InnoDB中用于加速索引查找的一个结构。InnoDB本身不支持hash索引,所有的索引检索都走B树查询。AHI可以认为是“索引的索引”。当对一个页面的访问次数满足一定条件后,将这个页面的地址存在一个hash表中,下次查询可以直接访问到页面,不需要走B树查询。问题 天下没有免费的午餐,在加速查询的同时,AHI与其他缓存结构一...
2013-03-19 14:01:34
553
InnoDB中dict_update_statistics调用策略及问题
背景 为了提供优化器支持,InnoDB维护了每个表的索引统计信息(index statistics)。在之前的一篇文章中作过介绍。 文章里面介绍到索引统计信息有几个更新策略,并建议允许关闭动态更新。顺便提及,5.6已经提供了Persistent Statistics 选项,达到相同的目的。 在5.5版本还是必须动态更新。本文介绍在动态更...
2013-02-26 16:22:29
137
[MySQL 版本差异] 丢失frm文件之后drop database的不同结果分析
背景 今天在讨论frm丢失后drop database失败的问题。简单复现如下。假设test库中有两个表t1, t2,执行如下脚本:bin/mysql -uroot –socket=run/mysql.sock -e ”drop database if exists test2;create database test2;use test2;create table t1 like ...
2013-02-22 15:54:04
203
量化InnoDB group commit的效果
前几天有位开发的同学问了个问题,InnoDB的group commit效果如何?之前说好了回头给看下,结果险些拖过年。Group commit背景 InnoDB的redo log的group commit历史比较悠久了(有别于binlog的group commit)。如果设置为1,每次事务提交都至少需要写一次redolog。这对IOPS冲击严重,尤其是在HDD上,直接成为性...
2013-02-09 16:22:17
144
5.6 explain update一个疑似bug
5.6 的新增特性,允许对DML语句做explain。这下大家高兴了,碰到复杂更新语句(且还造成慢查询)要自己手动改成select语句的日子终于到头了。 饶有兴致的试用了一把,总体感觉不错,不过发现一个bug。 复现 mysql> create table tb(id int primary key , c int);Query OK, 0 rows affe...
2013-02-07 14:11:42
1299
[MySQL Q&A] 说说checksum table
有同学问到 checksum table在逻辑备份时候前后是否可以用于验证数据一致性。扩展一下发现有一些有趣的问题,比如数据插入顺序不同、表引擎不同、操作系统位数不同等。 插入顺序不同是否有影响 我们知道全表扫描是可以有很多种顺序的,尤其当表里面出现过delete动作以后,逻辑导出再导入另外一个表后,两个表的全表扫描结果可能不同。 ...
2013-02-05 16:14:18
474
Doublebinlog for MySQL
Background In some projects that require very strict data safety, DBAs will except there is a solution to ensure the safety of binlog. That means after the worst case, OS crash or disk dam...
2013-01-22 12:53:13
180
[MySQL Q&A] 关于 table_lock_wait 和 table_lock_immediate
前记 前几天收到一位同行的一个文档,是MySQL High Performance 2的读书笔记, 97页,6w多字。在描述完知识点后,有疑问的地方列出问题,希望和我讨论。看完以后非常敬佩,自感自己无法做到这么细心。为表敬意,承诺会一一回答里面的问题。对于无法简单回复的问题,就想通过博客的方式写出来,便于讨论。因此这个系列,就是回复这位同学的文档中的问题的。 问题...
2013-01-19 23:55:58
477
MySQL字符集和copy_and_convert
关于copy_and_convert 在对MySQL做业务压力测试的时候,我们在perf结果中发现 copy_and_convert 是一个耗费cpu的操作。这个函数的意思,就是在字符集之间做内容转换。 如果源和目标的字符集相同,就可以直接用memcpy,这显然比做字符集转换(按字节或字长拷贝更快,和节省cpu) 当整个系统是CPU瓶颈时,我们希望能够减少这种cpu消耗。 ...
2013-01-07 21:21:59
130
mysqldump输出方式和进度报告
mysqldump在导出数据的过程中是“沉默”的,为了显示导出进度,给它加一个小patch显示进度。感谢 @宁青_ 的需求。 一、mysqldump输出方式这个patch比较简单,先说一下相关的一个背景:mysqldump的输出方式。1、 默认方式 stdout2、 指定文件-r target_file 可以指定导出的内容写入文件target_file中3、–tab=path在pa...
2013-01-04 11:46:43
5785
与MySQL的注释、Query_cache有关的一个bug
今天有同学问了一个关于注释的问题,顺藤摸瓜发现一个bug,简要说明下。有关注释的一些QAQ: MySQL注释有哪些格式A:MySQL的注释格式有三种,分别是 /**/ -- 和 #。具体参见手册 Q:在一些导出文件中见过/*! xxx*/,是不是注释?A: 需要注意的是/*! */ 这种格式,对于MySQL来说不是注释,是能够直接执行的。同时这个格式还支持...
2012-12-17 21:51:02
113
MySQL关于timestamp和mysqldump的一个“bug”
复现来源于一个同事在做数据转储碰到的的问题,简化如下:1、建表drop table if exists tb;CREATE TABLE tb ( c timestamp NOT NULL DEFAULT '0000-00-00 00:00:00') ENGINE=InnoDB DEFAULT CHARSET=gbk;insert into tb values(now(...
2012-12-14 12:31:48
157
关于一次导入数据提示的MySQL server has gone away
背景这个问题由一个同事问到的一次导入数据引发。一个很常见的操作,将数据从一个表中dump出来,在用mysql < a.sql的方式导入到另一个库的一个表中。在执行导入的时候,提示 MySQL server has gone away。在追查的时候突然想到会不会是因为max_allowed_packet太小导致的。将max_allowed_packet改大,确实解决了问题。本文基于...
2012-12-13 15:03:13
344
MySQL-Transfer2.1发布
Transfer 2.1发布, 下载地址: Tranfer-2.1-base-PS-5.5.18 md5sum: 9c8112ba9ca11f8e4a13b935e4bd7f77 最后更新日期 2013-4-23 配置模式作如下修改: 1、 若不增加任何配置,则默认是Slave模式。默认值: transfer_slave_thread = 16 sla...
2012-12-11 22:09:22
128
关于MySQL-Transfer-Pure-Slave的计划
具体的说明见后面附的图片: 版本列表: MySQL-PS-Transfer.5.5.18 md5:0479bbcb2743a722276a3435af1bbb8e 最后更新时间:2012-12-12 MySQL-PS-Transfer.5.5.27 md5:9a72849115de510fcbe87246e4ed9e11 最后更新时间:2012-12-12 ...
2012-11-30 23:59:01
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人