- 博客(148)
- 收藏
- 关注
原创 换blog了,转到个人博客下
我的新博客地址:http://mysqllover.com/讨论的内容主要包括MySQL新的bug,内核代码分析以及一些新的特性(包括我们正在开发的)博客刚建,欢迎光临哦~
2012-07-07 10:47:17
2980
原创 [MySQL Bug] 在RBR复制模式下使用Merge引擎导致备库Crash的bug
转载请署名:印风---------------------------------------------最近碰到一个很蛋疼的BUG,使用merge引擎,row模式下复制,极大的概率crash备库。我的测试环境是5.1的主库,5.5的备库test case:create table m1 (a int primary key, b int) engine=myisam;c
2012-06-30 23:39:14
2969
原创 [MySQL Patch] Binlog文件预分配
转载请署名:印风------------------------------------------------------------------------------------之前已经介绍过实现思路,binlog预分配在两年前被Yoshinori Matsunobu在5.1里实现,但其存在问题的是,即如果在非xfs系统上时,可能会在预分配文件时因为持有大锁,导致tps长时间为0。这
2012-06-28 20:35:06
3269
原创 [MySQL Patch]为mysql增加响应时间status值
转载请署名: 印风----------------实现的思路很简单,借助了percona server5.5的information_schema表:query_response_time过程1.增加变量,记录上次查询rt时,统计的query数,以及总时间(last_count, last_total)2.采集sql执行时间时(collect函数),累加当前query数
2012-05-10 14:24:05
3629
原创 twitter-mysql改进点
目前最新的twitter-mysql版本基于mysql5.5.22,以下总结了一些比较明显的改进点,大部分已经亲自证实,其他一些诸如修复的比较次要的问题(例如编译问题)这里暂不列出,可以详细参阅https://github.com/twitter/mysql/wiki/Change-History 修复的bug1.bug#60682某些场景下,同时执行select/drop t
2012-04-28 09:39:10
3323
原创 MySQL:消息存储引擎Q4M试玩
1. 安装下载二进制包:由于我的mysql是5.1.48,从官网选择对应的包http://q4m.kazuhooku.com/dist/old/下载后解压a. 将support-files/q4m-forward 拷贝到mysql安装目录/bin下b. 将libqueue_engine.so 拷贝到mysql安装目录/lib/mysql/plugin下执行:
2012-04-09 09:35:53
3555
原创 mysql5.5 无法设置为master_host为Null
之前我们通过change master to master_host=""来保证show slave的结果是empty set在5.1里这种策略一直有效,但到了5.5就不行了。。看看show_master_info函数1817 if (mi->host[0])1818 { ……在向客户端传送数据前,会先判断mi->host[0]是否为Null
2012-03-26 15:34:16
2991
原创 MySQL Binlog预分配的实现和性能
最近对http://forge.mysql.com/worklog/task.php?id=4925上提到的binlog预分配进行了实现,基于percoan5.5.18版本在worklog中号称在sync_binlog = 1的情况下有10倍的tps提升。在没有group commit的情况下确实有可能。实现思路:与worklog中提到的不同,这里使用daemon plugin
2012-03-21 19:28:42
3069
原创 MySQL优化:可配置选项的WAIT_FOR_READ
转载请署名:印风-----------------------------------http://bugs.mysql.com/bug.php?id=64258在innodb层使用一个常量WAIT_FOR_READ来控制当需要等待从磁盘读取数据时,需要等待的时间,其默认值在5.5及5.1的版本中都是5000us(5ms),而现在比较牛的存储设备(flush/ssd)一般能在100us
2012-02-19 13:53:57
3300
1
原创 Percona5.5新参数:innodb_fake_changes
转载请署名:印风--------------------------------------------------------------------innodb_fake_changesinnodb_fake_changes是从Percona5.5.16开始增加的一个新特性,其目的是为了在重启备库时对其进行预热,以加快复制的速度。在执行事务的过程中,对于DML操作仅仅移
2012-01-30 15:29:41
2518
原创 MYSQL:同时设置innodb_force_recovery和innodb_purge_thread导致无限loop
转载请署名:印风--------------------------------------------------------------------------版本:Percona5.5.18设置参数:innodb_force_recovery>=2innodb_purge_thread = 1观察alert.log,出现大量信息:InnoDB: Waiti
2012-01-29 13:58:09
5967
原创 innodb purge操作
零散的记录,做备忘用---------------------------------------------由于每次DML操作都会生成Undo页,系统需要定期对这些undo页进行清理,也就是所谓purge操作。在5.5之前这些都是在master线程中完成,但5.5及之后的版本可以通过innodb_purge_threads来控制是否使用独立线程进行purge操作。下面将就undo
2012-01-19 16:55:36
8577
原创 MySQL: mini-transaction简析
转载请署名:印风-----------------------------------------------在innodb里我们经常可以看到一段代码,以mtr_start()开始,以mtr_commit(&mtr)结束;minitransaction主要用于锁和日志信息.Mini事务的控制结构体:struct mtr_struct{#ifdef UNIV_DEBUG
2012-01-15 22:57:22
4202
翻译 innodb的几个模块文件夹
摘录自:http://forge.mysql.com/wiki/MySQL_Internals_Files_In_InnoDB_Sources根据mysql5.5.18略有调整\btr(B-TREE) File Name What Name Stands For Comment Inside File --------- ---------------
2012-01-15 11:02:01
2593
原创 MySQLPlugin之如何编写Auth Plugin
转载请署名:印风---------------------------------------------------------------------1.什么是Auth Plugin我们先介绍一下传统的认证方式。在MySQL服务器上的mysql.user表中存储了所有的用户信息,客户端将用户名和密码传递过来根据user表相应的行进行认证匹配,也就是说,传统的方法是客户端需要明确的给
2012-01-12 14:26:51
4643
原创 mysql:打开profile显示unknown function的问题
今天有同事提到一个问题,在查看profile时显示如下结果:看到没? 在Source_function列显示 unknown function,mysql版本为5.1.48,我们看看代码里是怎么处理的:#ifndef __func__#ifdef __FUNCTION__#define __func__ __FUNCTION__#else#define __fu
2012-01-11 16:24:49
3258
原创 MySQL源代码:由参数query_response_time_stats想到的
转载请署名:印风---------------------------------------------Percona提供了一个参数query_response_time_stats用于在服务器端观察数据库的响应时间root@test 02:29:35>show variables like'query_response_time_stats';+----------------
2012-01-07 19:58:42
3685
原创 MySQL源代码:如何对读写锁进行处理
转载请署名:印风-----------------------------------------------------------最近碰到一个问题,线上一台机器在等待信号量时间过长,mysql的监控线程认为此时mysqld已经hang住了,于是自杀重启。这里涉及到一个有趣的问题,也就是mysql如何对读写锁进行处理。主要包括三个部分:1. 建锁2. 加锁3. 解锁4
2012-01-06 16:52:55
5485
原创 由percona5.5参数innodb_adaptive_flushing_method想到的....
以下是本人凌乱的记录、杂乱无章,不堪入目啊................-------------------参数:innodb_adaptive_flushing_method.控制脏页的刷新,可以动态修改 包括以下三个值:0(native)This setting causes checkpointing to operate exactly asit doe
2011-12-30 15:23:06
4448
原创 mysql5.5新特性:innodb_change_buffering
在5.5之前。这还不叫change buffer,而是insert buffer;当更新/插入的非聚集索引的数据所对应的页不在内存中时(对非聚集索引的更新操作通常会带来随机IO),会将其放到一个insert buffer中,当随后页面被读到内存中时,会将这些变化的记录merge到页中。当服务器比较空闲时,后台线程也会做merge操作但insert buffer会占用buffer p
2011-12-30 10:22:28
5754
原创 innodb如何处理对innodb行记录的update
今天有同事提到一篇博客:http://blogs.innodb.com/wp/2010/09/mysql-5-5-innodb-change-buffering/里面提到:当更新非聚集索引上记录 和 聚集索引上的主键时,是标记删除,然后插入新的记录当更新聚集索引上的非主键列时,是updated-in-place,也就是说原地修改,不会插入新记录。之前一直以为都是以标记删除作处理的,
2011-12-29 17:38:39
2039
原创 mysql5.6对kernel_mutex的优化
参考自:http://blogs.innodb.com/wp/2011/04/mysql-5-6-innodb-scalability-fix-kernel-mutex-removed/在mysql5.5以及之前的版本,kernel_mutex一直是性能的大杀器,在innodb层,被广泛的使用。全局锁是大招,杀死一大片的。之前percona将buffer pool mutex进行了拆分
2011-12-28 13:17:26
1734
原创 MySQL如何创建和删除临时表
1.介绍:MySQL临时表,属于session级别,当session退出时,临时表被删除。临时表允许与其他表同名,并单独维护在thd的结构体中;因此,不同的session可以创建同名的临时表,并且只操作自己拥有的临时表;创建临时表的语法很简单:root@test 03:26:44>show create table tmp1\G*********************
2011-12-20 19:28:55
10902
原创 gdb 基础(1)
摘自(DEBUG HACKS)info reg 显示寄存器p $eax 打印寄存器eax内的内容程序指针 $pc 与$eip等效x命令显示内存中的内容x/格式 地址如:x $pcx/i $pcx/10i $pc 显示从pc所指地址开始的10条指令在gdb里,我们还可以自定义命令:define li
2011-12-18 22:31:00
827
原创 percona5.5.16安装sphinx存储引擎
过程:1.下载源码包:http://sphinxsearch.com/downloads/accept.php?file=sphinx-2.0.2-beta.tar.gz 2.tar -xvzf sphinx-2.0.2-beta.tar.gz 3.cd /u01/download/Percona-Server-5.5.16-rel22.0/storage
2011-12-07 20:33:12
813
原创 快速辅助索引创建(innodb plugin)
记录备忘1.创建:alter table add index.....innodb先扫描表,根据辅助索引的key列进行排序,然后组织成B树,由于在填充时分裂,具有很高的fill-factor 2.删除: Only the internal InnoDB system tables and the MySQL data dictionary tables need to
2011-12-07 11:02:36
1304
原创 MySQL5.1.48后可能会导致crash的bug
从48往后的版本的changelog中收集,还没细看,先整理下来!------------------------------------------------------------------------------------------------------------------fixed in 5.1.49:Bug#50364Replication: FLUSH
2011-11-24 11:04:31
1041
原创 MySQL5.1.60 fix的几个bug
fix的几个跟innodb相关的bug:1.http://bugs.mysql.com/bug.php?id=62294在buf_buddy_relocate里调用不必要的buffer pool互斥锁导致的性能下降2.http://www.mysqlperformanceblog.com/2011/11/20/bug12704861/由5.1.58/59的fix的一个bug
2011-11-22 19:34:50
1257
原创 MySQL:如何编写Audit Plugin审计插件
转载请署名:印风在之前我已经写了一系列介绍audit plugin的博文,当时还很青涩,这里把之前的内容整理出来,并成为mysql plugin编写手册系列的一部分-----------------------------------------------------------------------------------------------1.什么是Audit Pl
2011-11-21 09:52:21
2027
原创 MySQL:如何编写全文索引插件
转载请署名:印风1.简介全文索引插件用于对MYISAM的全文检索特性进行扩展。通过全文检索,我们可以对文档、图片或者视频等丰富的数据类型进行分词,建立索引,以便进行快速的检索。目前MySQL仅在MYISAM存储引擎里支持全文检索,而对于innodb,则要在6.0以后的版本中才会实现。但目前全文索引也有着如下的限制:1. 只支持MyISAM2. 不
2011-11-21 09:47:33
1683
原创 MySQL:如何编写Information Schema Plugin
转载请署名:印风1. 什么是i_s plugin在mysql里面,默认会有一个information schema(以下简写为i_s)数据库,用于记录一些与元数据或表的模式相关的信息,与其他数据库不一样,在data目录下,并没有为i_s建立文件夹,这说明,i_s并不是物理存在的,而是在需要的时候,才会临时创建。这就可以解释为什么i_s库中的表的记录总是无法删除或修改。 2.为什么使
2011-11-18 11:20:31
1101
原创 linux core dump
摘自《DEBUG HACKS 深入调试的技术和工具》#hack4打开core dump:ulimit -c unlimited限制大小ulimit -c 1073741824 //(1G)测试程序:$cat test.c #include int main(int argc, char **argv){char a[1]
2011-11-13 19:45:07
993
原创 Percona 5.5.16与官方MySQL5.5.16的简单TPS对比
今天简单用sysbench测试了下percona5.5.16和mysql5.5.16的TPS。sysbench命令大体如下: ./sysbench --num-threads=60 --max-requests=1000000 --max-time=0 --mysql-table-engine=innodb --test=oltp --oltp-test-mode=complex --ol
2011-11-10 21:24:59
1451
转载 MySQL5.5编译工具configure向cmake过渡指南(转载)
MySQL5.5编译工具configure向cmake过渡指南从mysql5.5起,mysql源码安装开始使用cmake了。下面是介绍configure选项如何映射到CMake的等值参数。1. 命令语法:重新编译时,需要清除旧的对象文件和缓存信息 # make clean # rm -f CMakeCache.txt2.安装选项 CMAKE
2011-11-10 00:10:46
1590
原创 mysql几个和innodb相关的参数
今天有同事问了几个MySQL参数设置,这里简单记录一下:innodb_thread_concurrency ,用于限制能够进入innodb层的线程数当进入innodb层调用read_row/write_row/update_row/delete_row时,会检查已经进入innodb的线程数:innodb_srv_conc_enter_innodb如果已经满了,就会等待i
2011-11-09 14:40:16
782
原创 禁止死锁检测来提升高并发MySQL性能
在一个高并发的MySQL服务器上,事务会递归检测死锁,当超过一定的深度时,性能的下降会变的不可接受。FACEBOOK早就提出了禁止死锁检测。我们做了一个实验,在禁止死锁检测后,TPS得到了极大的提升,如下图所示:禁止死锁检测后,即使死锁发生,也不会回滚事务,而是全部等待到超时Patch比较简单,直接在死锁检测前加一层判断即可:if (innobase_deadloc
2011-11-09 14:22:42
3128
原创 改进MySQL的table_cache
以下为本人在工作中的碎碎念,记录的比较凌乱……........................................................................在mysql里面有一个参数table_cache,当设置过大时,会产生明显的效率下降。这是因为扫描open_cache哈希表时,使用的线性扫描,时间复杂度为O(n),mysql的bug list上有人提
2011-11-02 19:28:57
2714
原创 MySQL:如何编写daemon plugin
1.什么是DaemonPlugin顾名思义,daemon plugin就是一种用来在后台运行的插件,在插件中,我们可以创建一些后台线程来做些有趣的事情。大名鼎鼎的handlesocket就是一个daemon plugin。而在mysql5.6中,也是通过daemon plugin来实现了memcached功能。 2.为什么使用DaemonPlugin就像handlersocket,
2011-11-02 16:19:45
2246
原创 MySQL:如何编写UDF
1.什么是UDFUDF顾名思义,就是User defined Function,用户定义函数。我们知道,MySQL本身支持很多内建的函数,此外还可以通过创建存储方法来定义函数。UDF为用户提供了一种更高效的方式来创建函数。 UDF与普通函数类似,有参数,也有输出。分为两种类型:单次调用型和聚集函数。前者能够针对每一行数据进行处理,后者则用于处理Group By这样的情况。 2.
2011-10-25 09:10:28
3533
原创 使用mysql自有的表分析innodb死锁情况
这几天在研究innodb的死锁问题,翻了下《mysql技术内幕:innodb存储引擎》,原来在mysql内部,已经有三个表记录了事务锁的相关信息。记录下来,防止忘了......................................informat
2011-09-29 16:19:14
1134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人