自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除