`
丁林.tb
  • 浏览: 797210 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
 背景            客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用count(distinct)统计后返回的是0。          将问题简化后复现如下,影响已知的所有版本。   drop table if exists tb; set tmp_table_size=1024; create table tb(id int auto_increment primary key, v varchar(32)) charset=gbk; insert into tb(v) values("aaa"); in ...
Transfer 2.2发布。下载地址   版本说明 1、  基于版本 Percona-5.5.31 ,简单用法是先安装好官方或PS版5531,然后替换为transfer的mysqld。 2、  新增观察参数 Com_ts_* 在压测过程中,可使用如下命令观察 mysqladmin --socket=run/mysql.sock -uroot   extended-status --relative --sleep=1 | grep  Com_ts                    得到如下图的示例
背景        上一篇说到MySQL 5.5加主键导致阻塞源表的读的问题。 有同学提到从调用函数看,在默认的old_alter_table=off的情况下,加主键过程没有看到copy to tmp table。          这里我们再细说一下。   说说fast index creation          在MySQL 5.1以后InnoDB引入了fast index creation。在有这个feature之前,MySQL认为所有的加减索引操作都必须创建临时表、拷贝数据、删除源表。          有了这个神奇的功能之后,InnoDB跟M
  背景      有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下。   对照现象          为了说明这个问题的原因,有兴趣的同学可以做对比实验。     1)  在给InnoDB ...
背景          跟同学聊到row_id一个边界问题,这里详细说明下。          InnoDB表若没有定义主键,会使用系统的一个默认递增row_id (dict_sys->row_id)作为主键。每次插入一行加1,到达最大值循环复用。          需要注意的是,虽然dict_sys->row_id 被定义为一个unsigned long long, 但由于这个主键值只有6个字节,因此最大值是2^48。 row_id超过这个值还是会递增,只是写入的时候只取低位,可以认为是做取模操作。   问题          这就涉及到一个问题,一个长期运行的MyS ...
    前天在微薄上发了个优化器的问题,从评论来看,还是需要简单说明一下。     现象说明        其实这里主要要说明的是一个优化器还需要改进的地方。   优化器会根据where条件和select_list里面的字段决定在使用一个索引(sta)后,是否需要回表—回到聚集索引取数据。   基本的做法是:在确定了一个索引后,将select_list和where中出现的所有字段都拿来判断一下,如果字段都存在于sta索引中,则可以使用覆盖索引。   第一个explan可以用上覆盖索引(Using Index),
今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert、update等。不过也没有保留现场。因此有疑问为什么建表会影响DML?   分析          首先这个现象不是在所有场景都会碰到(否则MySQL的用户们早就跳起来了)。 一来建表这个操作本身很快,只涉及到写表定义文件和初始化表空间。中间涉及到redo和undo的操作也很少(这里只讨论InnoDB表)。因此除非碰到磁盘
背景     有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row',在binlog里面还是会看到有生成statement格式的事件?   变量分类 很多文章都说到MySQL的按照可见性范围分成两类 session和global
背景        上篇文章我们介绍了MySQL支持的compound statement SQL的语法。有同学指出这个只是“部分compound”,因为这种多语句语法中不支持if这样的逻辑操作,因此在业务中的使用会受限。          这里我们给出一个常见的事务的逻辑。     1)
背景        将多个语句发给MySQL,可以减少网络交互次数。对于带事务的情况,可以缩短单线程上事务的生存期。      将业务逻辑写成存储过程是一种形式,但是考虑到这样等于是将业务逻辑绑定在服务端,不是最佳选择。 有同学提到希望MySQL能够支持类似Oracle的compound-statement SQL ,实际上MySQL在5.0
背景  Adaptive hash index  (AHI) 是InnoDB中用于加速索引查找的一个结构。InnoDB本身不支持hash索引,所有的索引检索都走B树查询。AHI可以认为是“索引的索引”。当对一个页面的访问次数满足一定条件后,将这个页面的地址存在一个hash表中,下次查询可以直接访问到页面,不需要走B树查询。 问题  天下没有免费的午餐,在加速查询的同时,AHI与其他缓存结构一样,也面临维护的问题。作为一个全局结构,在更新时必然有一个全局锁操作(btr_search_latch),一个查询里面可能会对其作多次加x_lock操作。   Percona的改进    如同Buf ...
背景          为了提供优化器支持,InnoDB维护了每个表的索引统计信息(index statistics)。在之前的一篇文章中作过介绍。          文章里面介绍到索引统计信息有几个更新策略,并建议允许关闭动态更新。顺便提及, ...
背景 今天在讨论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 test.t1;create t ...
前几天有位开发的同学问了个问题,InnoDB的group commit效果如何?之前说好了回头给看下,结果险些拖过年。 Group commit背景         InnoDB的redo log的group commit历史比较悠久了(有别于binlog的group commit)。如果设置为1,每次事务提交都至少需要写一次redolog。这对IOPS冲击严重,尤其是在HDD上,直接成为性能瓶颈。         Group commit的基本想法是将多个并发线程对redo的fsync操作合并成1个。具体的过程可以参照这篇。 Group commit的效果          其实效果 ...
5.6 的新增特性,允许对DML语句做explain。这下大家高兴了,碰到复杂更新语句(且还造成慢查询)要自己手动改成select语句的日子终于到头了。     饶有兴致的试用了一把,总体感觉不错,不过发现一个bug。   复现     my ...
Global site tag (gtag.js) - Google Analytics