作者文章: Fenng

MySQL 优化之 Slow Query Log

从一种 DB 转到另一种 DB 的最初阶段,往往要找自己原来熟悉的工具。拿我自己来说,算是有点 Oracle 的经验,有时被问及 MySQL 优化的东西,就希望找到 MySQL 上类似 Oracle 等待接口或是 SQL Trace 之类的工具,多少有些路径依赖。

Slow Query Log 是 MySQL 的基本 Log 之一。这个优化思路基本上是用 SQL 执行时间 作基准(类似 Oracle 基于等待的优化思想。另外,在 MySQL 中我还没发现根据 逻辑 IO 作基准的方法,这样对于存储层的性能控制就有些不好入手)具体如何操作我就不赘述了。默认情况下,在产品环境中如果临时决定起用该特性是影响可用性的。另外,旧一些的版本时间粒度相对比较大(最小 1 秒钟)。可以通过 Microslow Patch 来解决这个问题(粒度可以到百万分之一秒)。这个 Patch 在开发测试环境也很有用武之地,有些公司的线下开发环境数据不能达到产品环境的规模,如果也把眼光放到抓取执行时间大于 1 秒钟的 SQL 无疑会漏掉很多潜在的问题语句。

在 MySQL 5.0 之后,利用 –log-queries-not-using-indexes 参数可以抓到未使用索引的慢查询。为什么 SQL 没有使用索引,这恐怕是开发 DB 应用的朋友要问的最常见的问题之一。

关于 Slow Query Log 的分析,MySQL 自带有 mysqldumpslow 分析工具,除此之外,也有包装的更好(?)一点的开源工具,比如 MyProfi,以及 Mysql-log-filter

Sun 收购 MySQL 之后,相信很多人都会对 Dtrace 能否集成到 MySQL 比较感兴趣。其实原来就有人利用 Dtrace 来分析 MySQL 性能问题。不过这个方式门槛还比较高,也没有形成比较清晰的方法论。

网上关于 MySQL 优化的文章汗牛充栋,我这篇就当是读书笔记吧。

EOF

PHP 与 Oracle DRCP

Oracle 对 PHP 的支持一直是不错的(只是国内好像 PHP + Oracle 的开发并不多)。 Oracle 11g 中的新特性数据库驻留连接池(Database Resident Connection Pool,DRCP) 对 PHP 应用进一步扩展带来了一种可能。

这个特性应该重点针对 PHP 应用的。PHP 不支持真正的多线程,非持久连接非常消耗 CPU 资源,扩展性也差;持久连接扩展性好了一点,但是又额外占用更多的内存资源(PHP 之父在几年前的一个 Step-by-Step 优化演示的文章中很形象的说明了连接开销对应用的影响)。DRCP 的出现能更好的缓解上述两个问题,其共享连接能跨 Apache 与中间件节点,但共享的连接是基于数据库用户的,比如 Scott 用户登录到 DB 上的所有连接间共享。

Oracle_DRCP.jpg

Oracle 官方披露的测试数据是,在 4 CPU Intel Xeon MP 2.80GHz 机器上,2GB RAM, 32bit RHEL 4. 支撑到 14000 个链接的时候,CPU 使用率在 65% 左右。这个…还是太惊人了,根据我找到的另外一份测试结果,看来要大打折扣才能有参考性。

EOF

招聘 PHP 工程师

【现在是广告时间】应朋友之托,代为发布两则招聘信息。都是 PHP 开发工程师,招聘地点为杭州、上海,两家不同的公司。感兴趣的朋友请根据合适的地点选择吧。

杭州招聘信息

招聘职位: PHP网站开发工程师
工作地点: 杭州市
招聘人数: 3
工作年限: 二年以上

职位描述
岗位职责:

1、有PHP/MYSQL/Apache/Linux开发经验,具有良好的编程风格;
2、熟练使用Javascript,CSSSQL
3、逻辑思维能力强,做事有条理性,有较强的分析问题和解决问题的能力;
4、强烈的责任心,良好的沟通能力,良好的团队合作精神,对工作有激情;
5、有开发过大中型互联网站经验者优先;
6、熟悉 Web 2.0

资历要求:

1、计算机相关学历或有相关的工作经验;
2、对软件开发工作有富有热情,工作责任心强,富于团队精神和敬业精神;
3、良好的执行能力,较好的完成预定任务;
4、具有良好的自学能力和独立解决问题的能力;
5、正直,坦诚,实事求是;
6、有项目管理经验者优先。

电子邮箱: [email protected] (请注明 refer 自 dbanotes.net )

上海招聘信息

这是 BlogBus 的招聘信息。请参考 CTO 车东 的招聘要求 , 这个职位是”欢迎毕业生”的。

南京招聘信息

工作职责:

1. 旅游电子商务网站的开发
2. B/S架构的旅游业务系统的开发
3. 其他应用软件的开发

职位要求:

熟悉WEB开发流程,有丰富的 PHP/MYSQL/Apache/Linux 平台开发经验;
拥有优秀的数据库设计能力;
熟悉 Linux 平台下的系统配置者优先;
学习能力强,拥有优秀的逻辑思维能力;
自我管理能力强,有良好的时间意识;有较好的沟通交流能力

这是 途牛旅游网的 招聘信息。有意者请邮件发送至 david.chenfuwei AT gmail.com

希望对正在找工作的 PHPer 朋友有用…

EOF

Oracle In-Memory Undo

今天在无聊的售前演示中看完了一篇技术文档 All About Oracle’s In-Memory Undo,关于 Oracle 的 In-Memory Undo (IMU),记得几年前讨论过,大部分基于猜测,这算是看到的第一篇比较细致的东西。

Oracle 公司在 10g 推出 IMU 这个特性(已经申请了专利)。Undo 作为最重要的组成部分之一,其高效与否直接关系到整个 DB 的能力。Undo 旧有的基于 Block 的段(Segment,指存储层的概念)管理模式方式,UNDO 本身的变化要记录到 Redo Log Buffer 里,而 IMU 避免了这个操作(因为是内存而不是存储),从而减小了生成的 Redo 量。

另外,因为读一致性开销直接到了内存里而不再依赖存储段, 整体也大大降低,CPU 的负荷也会有效降低。其应用模式应该说是适合一致读的需求量比较大的 OLTP。

Oracle 10g 默认是使用 IMU 这个特性的。通过隐含参数 _in_memory_undo 可以关闭这个特性。因为是隐含参数,也侧面反映出该特性并非那么成熟。搜索一下 Metalink,有不少关于 IMU 的 Bug,而 UNOD 的 Bug 一旦遇到,不停 DB 恐怕都很难解决。所以,对于可用性要求比较高的系统,现在起用该特性还是需要三思。

附: 全部机制在专利全文里。谁有兴趣仔细读一下吧.

EOF