26

MySQL源码学习——DBUG调试

在规模稍微大点的项目中,为了方便快速找到bug的所在,我们往往需要在代码中加入一些调试用的代码,比如加入一些printf,打印出一些重点的信息;加入assert,进行断言判断。这些比较随意的调试代码会使整个系统显得比较凌乱。于是Fred Fish开发了一套用于嵌入代码中的库,开发人员只需要调用相应的函数即可加入调试信息。

对于MySQL这种多线程的程序来说,调试也是比较困难的,MySQL选择了DBUG作为其调试代码(在原始代码的基础上进行了略微的改造),充分说明了DBUG的实用性,本文就DBUG的原始代码进行介绍。

继续阅读全文

25

MySQL源码学习——MDL字典锁

MDL,Meta Data lock,元数据锁,一般称为字典锁。字典锁与数据锁相对应。字典锁是为了保护数据对象被改变,一般是一些DDL会对字典对象改变,如两个TX,TX1先查询表,然后TX2试图DROP,字典锁就会lock住TX2,知道TX1结束(提交或回滚)。数据锁是保护表中的数据,如两个TX同时更新一行时,先得到row lock的TX会先执行,后者只能等待。

继续阅读全文

13

MySQL高可用性大杀器之MHA

提到MySQL高可用性,很多人会想到MySQL Cluster,亦或者Heartbeat+DRBD,不过这些方案的复杂性常常让人望而却步,与之相对,利用MySQL复制实现高可用性则显得容易很多,目前大致有MMM,PRM,MHA等方案可供选择:MMM是最常见的方案,可惜它问题太多(What’s wrong with MMM,Problems with MMM for MySQL);至于PRM,它还是个新项目,暂时不推荐用于产品环境,不过作为Percona的作品,它值得期待;如此看来目前只能选MHA了,好在经过DeNA大规模的实践应用证明它是个靠谱的工具。

继续阅读全文

06

使用 Sphinx 更好地进行 MySQL 搜索

尽管 MySQL 是一个出色的通用数据库,但是如果您的应用程序需要进行大量搜索,那么使用 Sphinx 可获得更好的性能。尽管 Sphinx 是一种全文本搜索工具,但即使与非全文本查询一起使用,它仍然可以提高应用程序的速度。本文将介绍如何针对此任务配置 Sphinx,其中包括一些示例查询,度量其执行时间,本文还将演示在考虑以某种通用的、系统的方式使用 Sphinx 时,更改中涉及的一些权衡方法。

继续阅读全文