存档

文章标签 ‘MYSQL’

《How FriendFeed uses MySQL to store schema-less data》阅读笔记

2009年6月29日 admin 没有评论

How FriendFeed uses MySQL to store schema-less data 这篇文章发布已经有一段时间了,之前也读过没留下什么映像,最近又重读了一遍做了一些笔记,内容如下。

  • 数据库查询需要得到索引的支持,索引在加速查询的同时,也会直接影响了数据插入、更新的速度。另外,由于FriendFeed的数据量比较大,维护索引而引起的相关表的锁表时间会比较长。
  • FriendFeed使用了读写分离技术和memcache来提升数据读取吞吐量
  • FriendFeed使用了Sharding技术来提升数据写入吞吐量
  • 由于Sharding技术的使用,有些很基础的关系运算就不能被支持了,例如Join。这样Mysql退化成了一个键值(KeyValue)数据库。
  • 键值数据库很多。FriendFeed没有使用专门的键值数据库可能考虑多种原因
  • 存储表的物理主键是autoincremen,而逻辑上的主键使用的是uuid。之所以这样做是因为uuid的不重复性对数据分布有好处,但因为InnoDB表类型会按照主键排序,此时如果使用类似uuid这样的无序串作为主键的话,那么当插入新行的时候,新行在数据文件中的位置是不确定的,这就会带来一个沉重的IO负担,而如果采用自增字段作为主键的话就不存在这个问题,因为新行始终位于数据文件的结尾。

 

关于FriendFeed如何保存schema-less数据的细节,这里就不在描述了,大家可以参考How FriendFeed uses MySQL to store schema-less data 或是老王解读FriendFeed对MySQL的使用

 

参考资料

How FriendFeed uses MySQL to store schema-less data 原文

解读FriendFeed对MySQL的使用

mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

2009年6月25日 admin 没有评论

mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句。

慢查询配置和使用

在msyqld的启动配置文件或命令行参数中增加以下参数

long_query_time=1

log-slow-queries=/var/mysql/logs/slow.log

long_query_time参数表示的是慢查询的度量时间,单位是秒,最小是1,缺省值是10,凡是执行时间超过long_query_time的sql语句都会记录到慢查询日志中。

--log-slow-queries[=file_name]的file_name参数可选,缺省值是host_name-slow.log,如果指定了file_name参数的话,mysql就会把慢查询的日志记录到file_name所设定的文件中,如果file_name提供的是一个相对路径,mysql会把日志记录到mysql的data目录中。

未使用索引查询配置和使用

在mysql的启动配置文件或命令行参数中增加--log-queries-not-using-indexes 参数就可以启用未使用索引查询语句了,日志记录的文件就是log-slow-queries对应的文件。

//mysql.conf

log-queries-not-using-indexes

使用案例

mysql的配置如下

[mysqld]

#Slow Query log
long_query_time=3

log-slow-queries

# Log queries that is not using indexes
log-queries-not-using-indexes

执行以下命令

select sleep(1);

select sleep(3);

select * from t1;

日志内容如下

D:\MySQL\MySQL Server 5.1\bin\mysqld, Version: 5.1.31-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time                 Id Command    Argument
# Time: 090625 12:58:09
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.000077  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1245905889;
select sleep(3);
# Time: 090625 12:58:42
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.046876  Lock_time: 0.031251 Rows_sent: 0  Rows_examined: 0
SET timestamp=1245905922;
select * from t1;

其他

除此之外还有一些专门的慢查询日志分析、查询工具,大家可以google以下相关的内容。

相关资料

mysql参考手册#Slow Query Log

MySQL 优化之 Slow Query Log

分类: MYSQL 标签: ,

购买新书《MySQL性能调优与架构设计》

2009年6月20日 admin 没有评论

在之前的2-3年从事的开发工作中都使用到了MySQL数据库,对MySQL的关注和学习也越来阅读。不过在之前主要的学习内容还是基于Mysql做一些开发,很少涉及Mysql的性能调优与架构设计。随着工作环境和重心的改变,以后会多一点时间学习Mysql的性能调优与架构设计相关的内容。最近有一本《MySQL性能调优与架构设计》刚刚上市,马上买了一本。这本书的作者是阿里巴巴的简朝阳,阿里巴巴有不少优秀的架构师和DBA,希望以后能够读到他们更多的著作。

分类: MYSQL 标签: ,