Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112744
  • 博文数量: 29
  • 博客积分: 2151
  • 博客等级: 大尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-20 11:11
文章分类

全部博文(29)

文章存档

2011年(5)

2010年(24)

我的朋友

分类: Mysql/postgreSQL

2010-09-21 11:20:13

 

MyISAM中key_buffer_size的设置

 

一直以来,多数人在使用MyISAM时都是按照增大Key_read_requests / Key_reads的原则来设置key_buffer_size的,没想到这竟然是错误的!

 

Key_read_requests和Key_reads就是两个计数器,它们的含义如下:

 

Key_read_requests:从缓存读取索引的请求次数。

Key_reads:从磁盘读取索引的请求次数。

 

通常人们认为Key_read_requests / Key_reads越大越好,否则就应该增大key_buffer_size的设置,但通过计数器的比例来调优有两个问题:

 

问题一:比例并不显示数量的绝对值大小

问题二:计数器并没有考虑时间因素

 

虽说Key_read_requests大比小好,但是对于系统调优而言,更有意义的应该是单位时间内的Key_reads:

 

Key_reads / Uptime

 

你可以通过命令行得到一个实时的数据结果,比如:

 

# mysqladmin ext -ri10 | grep Key_reads

 

| Key_reads                         | 83777189     |

| Key_reads                         | 211          |

| Key_reads                         | 177          |

| Key_reads                         | 202          |

 

 

提示:命令里的mysqladmin ext其实就是mysqladmin extended-status,你甚至可以简写成mysqladmin e。

 

其中第一行表示的是汇总数值,所以这里不必考虑,下面的每行数值都表示10秒内的数据变化,从这份数据可以看出每10秒系统大约会出现200次Key_reads访问,折合到每1秒就是20次左右,至于这个数值到底合理与否,就由服务器的磁盘能力而定了。

 

顺便说一句,为啥数据按10秒取样,而不是直接按1秒取样?这里看看按1秒的结果:

 

# mysqladmin ext -ri1 | grep Key_reads

 

| Key_reads                         | 83776743     |

| Key_reads                         | 7            |

| Key_reads                         | 7            |

| Key_reads                         | 38           |

 

可以看到,由于时间段过小,数据变化比较剧烈,不容易直观估计大小,所以通常数据按照10秒或者60秒之类的时间段来取样是更好的。

 

忘记:Key_read_requests / Key_reads

牢记:Key_reads / Uptime

阅读(1349) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-21 16:28:12

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com