Buffer pool--mysql详解(八)

上篇文章说了,show warning可以看到mysql优化器的结果,执行计划的详解,select type的种类,有派生,物化,子查询,连接查询等。


Mysql在访问数据的时候,并不是每次从磁盘的系统表空间查询,而是会缓存到内存,这个内存我们就称为buffer pool,可以通过innoDB buffer pool size来设置,默认是128m

Buffer pool如何管理内存里的页呢,于是有一些表空间编号,页号,缓存页,lsn值等。

Free链表:当mysql服务器启动的时候,就会申请buffer pool,当系统还没有数据进入buffer pool的时候,这时候都是free 链表,当有数据进入的时候,会从free链表取空闲的缓存页。

Flush链表:当数据开始修改到内存的时候,发现内存和磁盘书就不一致,这时候总不能每次修改一点就刷新到磁盘,于是有了flush链表,又称为脏页,当系统正常关机的时候会刷新到磁盘,系统空闲的时候也会刷新到磁盘,当buffer pool内存不足的时候也会把数据刷新到磁盘。

Lru链表:当内存数据越来越多,我们需要把不需要的数据从缓存移除,这时候lru链表就出现了。

于是lru链表为了提高缓存命中率,使用频率高的数据就称为热数据,young区域,使用频率低的数据则是冷区域,old区域。可以通过innodb_old_blocks_pct参数来设置两个区域的占比,默认是37innodb_old_blocks_time默认是1000ms,通过这两个参数来解决mysql的预读和全盘扫描。Mysql第一次读取数据线放入old区域,后面会先移除,1000ms之内再次访问,才会把数据移动到young区域。

所以总是那个所述,刷新数据到磁盘会通过lru链表和flush链表来实现。

Buffer pool的数量可以通过innodb_buffer_pool_instances来设置大小,并不是越多越好,当内存大小小于1g的时候默认是一个,设置是无效的。

我们可以通过show engine innodb status来查看buffer pool 的状态。

事务简介(ACID

原子性(Atomicity):保证在一个事务里的操作要么全部执行成功,要么全部执行失败。

隔离性(Isolation):当两个修改同时操作数据库的时候,保证不会交叉影响,分开读取和修改来保证隔离性。

一致性(Consistency):一个事务作为一个原子在事务里独立运行,直到事务结束,也必须再次一致,一致的条件不限于数据库主键约束和check约束,还需要业务代码来实现,新增和扣减必须是一致的。

持久化(Durability):当数据发生改变的时候,会记录到mysql数据库磁盘上,这个过程就叫做持久化。

上面就是事务的简介,当满足上述条件时候,就叫做事务(transaction)。

在事务里大致有五个状态:活动的(active)、部分提交的(partially commited')、失败的(failed)、中止的(aborted)、提交的(committed)。当事务发生错误失败后,则会回滚之后进入中止状态。

事务不光能全部回滚,还能用savapoint 来保存保存点,后面rollback to保存点。



免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论