暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

transaction (1)—mysql进阶(五十七)

189

前面说了当设置的buffer_pool_size在1个G内,则不管如何设置,buffer_pool_instances都是一个,当在1个G以上,mysql才支持多个instances设置,每个都有自己独立的链表,多线程的情况下互不干扰运行。

Show engine innodb status\G

磁盘太慢,内存很有必要,buffer_pool在mysql启动的时候会向系统申请连续的内存空间,buffer_pool_instances 和buffer_pool_chunk_size这几个参数是倍数关系,设置的时候,mysql为了防止浪费内存出现碎片,自动会平衡他们的参数。

为了方便管理,里面有free链表,flush链表,lru链表,

Free链表就是申请空闲的缓存页,flush链表就是修改之后的数据,需要更新到磁盘上的,lru链表又分为young区域和old区域,这里面的数据代表最后 使用数据。Select查询过程是先从磁盘吧数据放入buffer pool缓存页,有自己的控制块,吧控制块放入old区域,如果在buffer_old _block_time,初次和最后一次访问超过这个时间,则会吧数据放入young,这样可以解决全表查询数据太大导致热数据被内存释放,也可以防止预读。

链表里面数据那么多怎么查询呢,通过hash表来查询,key是表空间id+页号,value就是缓存页。

多个buffer Pool实例 (3)—Buffer Pool(五十六)

为什么要事务?

我们先创建一个表

mysql> create table account(