读书频道 > 网站 > 网页设计 > MySQL管理之道:性能调优、高可用与监控
1.1.7 InnoDB同时支持多个BufferPool实例
14-02-20    奋斗的小年轻
收藏    我要投稿   
本书由资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服立即去当当网订购

InnoDB用来缓存它的数据和索引的内存缓冲区的大小。把innodb_buffer_pool_size参数值设得越高,访问表中数据需要的磁盘I/O就越少。在一个专用的数据库服务器上,最高可以将这个参数值设置为机器物理内存大小的80%。尽管如此,建议还是不要把它设置得太大,因为对物理内存的竞争可能在操作系统上导致内存调度。

innodb_buffer_pool_size是InnoDB性能的决定性因素,如果你的数据库大小小于innodb_buffer_pool_size设置的缓冲池大小,那么此时数据库的性能是最好的,因为客户端访问的数据都在内存里。

InnoDB_Buffer_Pool缓冲池复制管理着free list(初始化空闲页,为每一个page指定一个block头结构,并初始化各种mutex与rw-lock,将page加入Buffer_ Pool的free list链表,等待分配)、flush list(缓冲池产生的脏页(数据库被修改,但未写入磁盘),当innodb_max_dirty_pages_pct超过设置的值时,会把修改时间较早的page刷进磁盘)、 LRU(在内存中但最近又不用的数据块,按照最近最少使用算法,MySQL会根据哪些数据属于LRU而将其移出内存,从而腾出空间来加载另外的数据)等,当InnoDB_Buffer_Pool缓冲池达到好几十GB时,如果某个线程正在更新缓冲池,将会造成其他线程必须等待的瓶颈。

在MySQL5.5里,可以通过innodb_buffer_pool_instances参数来增加InnoDB_Buffer_Pool实例的个数,并使用哈希函数将读取缓存的数据页随机分配到一个缓冲池里面,这样每个缓冲区实例就可以分别管理着自己的free list、flush list和LRU,也就可以解决上面的问题了。

简单地说,就是以前是由一个人负责管理上百台服务器,当任务较多时,务必会出现差错,领导安排的任务不能在指定的时间里完成,现在改由多个人一起管理,每个人分配的机器数量少了,管理上也轻松了,这样可以更有效地提高工作效率。

注意

innodb_buffer_pool_size必须大于1 GB,生成InnoDB_Buffer_Pool多实例才有效,最多支持64个InnoDB_Buffer_Pool实例。

修改my.cnf配置文件,设置3个Buffer_Pool实例,添加的内容如下:
innodb_buffer_pool_instances = 3

调整后,你可以用命令“show engine innodb status\G;”来查看:
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 1282572288; in additional pool allocated 0
Dictionary memory allocated 22706
Buffer pool size   76799
Free buffers       76657
Database pages     142
Old database pages 0
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 142, created 0, written 0
0.16 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 875 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 142, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
----------------------
INDIVIDUAL BUFFER POOL INFO
----------------------
---BUFFER POOL 0
Buffer pool size   25600
Free buffers       25506
Database pages     94
Old database pages 0
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 94, created 0, written 0
0.08 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 917 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 94, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 1
Buffer pool size   25599
Free buffers       25551
Database pages     48
Old database pages 0
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 48, created 0, written 0
0.08 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 750 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 48, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 2
Buffer pool size   25600
Free buffers       25600
Database pages     0
Old database pages 0
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 0, created 0, written 0
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 0, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]

关于innodb_buffer_pool_instances 参数,请参见MySQL5.5手册:

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站