十二 25

MySQL源码:JOIN顺序选择的复杂度

本文将介绍JOIN在顺序选择上的复杂度分析。
当有多个表需要JOIN的时候,MySQL首先会处理两类特殊情况,一个是常数表,一个是由于外连接导致顺序依赖关系。前者总是放在关联的最前面,后者会在遍历的时候考虑。本文将忽略上面两点,从较宏观角度看JOIN顺序选择时候的复杂度。
在设置了参数prune_level(默认设置)后,MySQL使用”极其”贪婪的方式获取顺序。如果未设置,则使用了有限穷举获取”最优”的执行计划。

继续阅读全文

十二 25

mysql监测工具

mysql监测工具tuning-primer.sh:mysql的运算情况,我们可以一步一步的去查看,分析。这样需要一定的时间,今天推荐给大家一个不错的脚本tuning-primer.sh,可以帮助我们去查看一下msyql的运行情况,产生报告和给出一些建议,我们可以根据这些建议,结合mysql服务器的实际情况,对mysql进行优化。

继续阅读全文

十二 23

MySQL TPCH测试工具简要手册

tpch是TPC(Transaction Processing Performance Council)组织提供的工具包。用于进行OLAP测试,以评估商业分析中决策支持系统(DSS)的性能。它包含了一整套面向商业的ad-hoc查询和并发数据修改,强调测试的是数据库、平台和I/O性能,关注查询能力。

继续阅读全文

十二 19

MySQL5.5配置文件模板

5.5的配置文件,在很早以前就有了一个初稿,当初可是相当的简陋。后来决定把这个东西分享给大家,于是下了大决心仔细修改,期望达成:即使是刚接触MySQL不久,也能用这个模板配置出可以一用的配置文件。期间来来回回各种调整,花了相当长的时间才完成。直接导致5.5参数的翻译,和bug测试都停滞不前,不过这个配置文件模板完成度很高,一切的付出都是值得的。

继续阅读全文

十二 18

使用pt-stalk诊断MySQL问题

pt-stalk是Percona-Toolkit的一部分(其前身是Aspersa的一部分)。安装Percona-Toolkit后,可以通过man pt-stalk了解如何使用该工具,本文的介绍是man pt-stalk的一个子集,强烈建议直接阅读man pt-stalk。额外的,本文将提供pt-stalk示例命令可供参考。

在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息。另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据。这正是pt-stalk所解决的问题。

继续阅读全文

十二 18

启用SELinux后,PHP连接MySQL异常

同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接mysql。
我协助查看了下,确实如此,无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似:”Could not connect: Can’t connect to MySQL server on ‘MYSQL.SERVER’ (13)”。
无论如何修改MySQL的授权,或者调整php.ini中关于MySQL的设置,或者修改MySQL的监听网口,都无法解决。
而如果用命令行人工连接MySQL,则一切正常。
问题看起来像是php(with apache)不被允许连接MySQL,但是防火墙也没有限制。想来想去,唯有SELinux的因素会导致这个问题。

继续阅读全文

十二 18

php与mysql通讯那点事

mysql,mysqli,pdo-mysql、libmysql、mysqlnd之间有什么关系?他们分别是什么?mysql_query之后的结果集是立刻从mysql server发送到客户端的吗?还是mysql_fetch_x函数递归时才获取的?mysql_query跟mysql_unbuffered_query函数那个更好些?我该如何选择mysql的API函数?mysql的客户端驱动用哪个为好?

继续阅读全文

十二 18

webgame中Mysql Deadlock ERROR 1213 (40001)错误的排查历程

生产环境中,MYSQL发生了一起死锁的案例,如何来排查他呢?什么时候发生死锁? 我怎么知道他发生了? 发生之后去哪里排查? 分别在哪几个事务中? 谁先锁的?谁后锁的?谁没锁到?谁报的死锁错误? 为什么发生了?死锁是什么? 如何避免?还有哪些因素影响?

继续阅读全文

十二 17

php5.3.8中编译pdo_mysql的艰难历程

1,以官方文档为准,一切跟着官方文档来,不轻易采信网络上网友提供的编译参数,包括这边博文。不论对方是老手、大牛,还是其他什么什么有威望的人。他们提供的方法或许跟你当前的环境不一致,时间也相差很大,或许相隔好几年了;2,确认得到的结果是准确的,怎么说呢,文中的例子中php-i的路径不是我们新编译的,而是之前编译,或者yum安装的,一定要到自己编译的程序目录下,用自己新编译的脚本去执行测试,获得测试结果,下结论,不为了偷懒,不敲路径,直接写程序名进行测试;

继续阅读全文