MySQL DBA's Blog

Archive for the ‘My Work’ Category

消息中间件(MOM)数据持久化方案

Tuesday, August 24th, 2010

消息中间件(Message Oriented Middleware,以下简称MOM)是什么?
通俗一点说,MOM就像一个快递公司。从发件人那里收取货物(消息),运到收件人那里。

MOM的好处是什么?
想象一个没有快递公司的世界吧。发件人要放下手头的工作,千里迢迢地把货物送给收件人。如果收件人不在家,要么带着货物回家,要么继续等待。这个过程不合理的原因在于,货物的发送是一个同步过程。发件人在货物运送的过程中,完全不能处理其他事情。假设路途遥远,或者收件人经常不在家,发件人的时间会白白浪费。
快递公司存在的意义在于解放了发件人的生产力。MOM也是如此。

整体架构图如下:

上面是对MOM的一个简单介绍。下面开始讨论本文的重点——如何持久化MOM的数据。
(more…)

session关闭binlog

Wednesday, March 31st, 2010

今天MSN上一个哥们问我,禁止某一个session产生binlog的命令是什么。
我从来没看过有这样的命令,于是就回答他,没有。
后来这个哥们找到了命令,及时反馈了一下。非常感谢他。

A client that has the SUPER privilege can disable binary logging of its own statements by using a SET sql_log_bin=0 statement.

MySQL DBA招聘

Thursday, March 25th, 2010

淘宝网专职MySQL DBA招聘。
工作地点在北京或者杭州。

基本要求:
两年以上MySQL运维经验

有兴趣就投简历到taofang@taobao.com

MySQL分页优化(SQL篇)

Friday, March 5th, 2010

上文提到可以通过去除跳页和限制翻页来减少整个系统的压力。然而PD往往会考虑到用户体验,不愿意去推动这种功能上的删减。
家家有本难念的经,可以理解PD的苦衷。那么作为一个DBA,就只能从SQL上去优化分页的性能了。

假设我们有一个需要分页的表,如下:
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`b` int(11) NOT NULL,
`c` datetime NOT NULL,
`d` varchar(1000) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_b_c` (`b`,`c`),
KEY `idx_b_id` (`b`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ID为自增,b为随机数,c为递增的时间,d为长度1000的字符串。往里面插入200w+数据。

典型的分页语句如下:
SQL1:select SQL_NO_CACHE * from test force index(idx_b_c) where b=1 order by c desc limit 2000,10
在六块磁盘做RAID10的情况下,SQL1需要耗费6s以上。explain SQL1可以得到以下结果:
+—-+————-+——-+——+—————+———+———+——-+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————+———+———+——-+——+————-+
| 1 | SIMPLE | test | ref | idx_b_c | idx_b_c | 4 | const | 2574 | Using where |
+—-+————-+——-+——+—————+———+———+——-+——+————-+
using where表示MySQL从InnoDB获取了数据之后还要根据条件进行筛选,也就是limit 2000,10那部分。 (more…)