代码改变世界

Sysbench0.5初体验

2013-09-25 10:51 by 心中无码, 928 阅读, 收藏, 编辑
摘要: 最近工作中需要测试数据库的OLTP的性能,参考了下MariaDB的benchmark中的测试脚本,发现脚本中已经使用了Sysbench-0.5,可以在这里https://launchpad.net/sysbench拉下来trunk,这就是传说中的0.5版本。1. 编译安装 1 Shell>pwd 2 3 /home/nocode 4 5 Shell> bzr branch lp:~sysbench-developers/sysbench/0.5 sysbench 6 7 Shell> cd sysbench 8 9 Shell> ./autogen.sh10 11 Sh阅读全文

MariaDB线程池源码分析

2013-05-25 07:57 by 心中无码, 1886 阅读, 收藏, 编辑
摘要: MariaDB线程池源码分析心中无码0前言 MySQL5.5的Enterprise版本以plugin的方式引入了thread pool,在并发请求数达到一定 数量的时候,性能相比社区版貌似有不少提高, 可以看下这个性能对比。在引入线程池之前,MySQL支持的线程处理方式(thread_handling参数控制)有no-threads和one-thread-per-connection两种方式,no-threads方式是指任一时刻最多只有一个连接可以连接到server,一般用于实验性质。 one-thread-per-connection是指针对每个连接创建一个线程来处理这个连接的所有请求,直到阅读全文

MySQL源码学习——USE语句的秘密

2013-04-30 19:45 by 心中无码, 1092 阅读, 收藏, 编辑
摘要: MySQL源码学习——USE语句的秘密Louis Hust0Preface最近一个项目需要解析MySQL的通信协议,这时候便碰到了USE语句的解析,发现客户端 mysql发送到服务器端的USE语句对应的并不是SQLCOM_CHANGE_DB命令,而是COM_INIT_DB。 而且这两个命令的处理逻辑基本一致,都是调用mysql_change_db进行处理,那么什么时候 发送COM_INIT_DB,什么时候发送SQLCOM_CHANGE_DB命令呢?这便是本文需要解释的地方。0COM_INIT_DB 与 SQLCOM_CHANGE_DB首先解释下这两个命令,其实这两个命令不是在一个层次的,COM阅读全文

MySQL Internals——IN,OR,BETWEEN哪个更快?

2013-02-07 22:46 by 心中无码, 1975 阅读, 收藏, 编辑
摘要: MySQL Internals——IN,OR,BETWEEN哪个更快?Louis Hust0前言 微博上看到@金山 提到了一个MySQL中的一个性能问题,select id from table where id > 100 and id < 200 和 select id from table where id = 101 or id = 103 or id = 104 or id = 105 or id = ...哪个更快?这里的查询条件有三种:between,or 和 in。这里id列是索引列,如果不是的话,三个查询都是全表扫描,性能差距应该不大。1准备环境mysql>阅读全文

MySQL Internals-Index Merge优化

2013-01-28 22:39 by 心中无码, 2643 阅读, 收藏, 编辑
摘要: MySQL Internals-Index Merge优化Louis Hust0前言之前搞错了,以为Index Merge是MySQL5.6的新特性,原来不是,发现5.5也有,看了下manual,发现5.0的manual就已经存在了, 可以说是一个历史悠久的优化手段了,好吧,不管怎么样,今天就拨开其神秘的面纱,看看其内部到底如何生成这种Index Merge的计划的。 这里只详细介绍Intersect操作,对于Union和Sort-Union的具体代码,还没开始研究。1Index Merge理论基础Index Merge——索引归并,即针对一张表,同时使用多个索引进行查询,然后将各个索引查出来阅读全文

MySQL5.6 Internals--隐藏的索引列

2013-01-27 16:56 by 心中无码, 1197 阅读, 收藏, 编辑
摘要: MySQL5.6 Internals-隐藏的索引列Louis Hust0前言今天本来想跟踪MySQL5.6中的新特性Index Merge,结果在跟踪的过程中,发现了一个问题,即InnoDB的二级索引中 可能会包含主索引,当然这里的包含并不是说二级索引的row里面会有pk的记录,这一点是一直存在的,这里的包含 是指,二级索引也会包含主索引进行排序。1现场重现1.1初始化数据mysql>showcreatetableindex_merge\G***************************1.row***************************Table:index_merg阅读全文

MySQL Internals--How MySQL optimize single range

2013-01-26 19:06 by 心中无码, 254 阅读, 收藏, 编辑
摘要: MySQL Internals-How MySQL optimize single rangeLouis Hust0PerfaceWhen MySQL calculates the cost of QEP(Query execute plan), it will do a quick test for range scan with const values. But when the condition in where is complex, it should do the right thing for optimization, otherwise the exact plan ma阅读全文

Understanding SELECT_LEX & SELECT_LEX_UNIT

2013-01-16 13:09 by 心中无码, 338 阅读, 收藏, 编辑
摘要: Understanding SELECT_LEX & SELECT_LEX_UNITLouis Hust0PrefaceSELECT_LEX(st_select_lex)&SELECT_LEX_UNIT(st_select_lex_unit) are two important structs in Optimizer. They are used from yacc grammer to senmantics and to optimizer at last. So they are also the basic of understanding the Optimizer.阅读全文

Deep into MySQL QEP with optimizer_trace

2013-01-05 19:32 by 心中无码, 303 阅读, 收藏, 编辑
摘要: Deep into MySQL QEP with optimizer_traceLouis Hust0PrefaceMySQL5.6 add a new option to show QEP more deeply-optimizer_trace. This option is very different from EXPLAIN which just showes the table access method, index using, table join order and so on. But optimizer_trace output every steps of how th阅读全文

MySQL Optimizer Analysis——Join types

2012-12-29 11:25 by 心中无码, 364 阅读, 收藏, 编辑
摘要: MySQL Optimizer Analysis——Join typesLouis Hust0前言通过EXPLAIN查看执行计划,其输出中较为重要的列为type列,此列决定了操作此表的类型,在MySQL内部,此列对应了 enum join_type。这里分别针对Manual中列举出来的各种不同的type,进行实例显示,让大家更加明确的了解各个type的实际意义, 有利于加深大家对explain输出的理解。由于MySQL5.6对Optimizer的代码进行了重构,条理上更加清晰,故本实验的环境是:Serverversion:5.6.6-m9-debug-logSourcedistribution阅读全文