文件按页(每页 H")读取到缓冲池,然后按最近最少使用(&<)的算法来保留在缓冲池中的缓存数据。如
果数据库文件需要修改,总是首先修改在缓存池中的页(发生修改后,该页即为脏页),然后再按照一定的频
率将缓冲池的脏页刷新(G3+)到文件。可以通过命令 NA(%(A(($'$< 来查看
/0/3C0 的具体使用情况,如下所示。
)2+/**34%5
666666666666666666666666666666666666666666666666666666
**37
8888888888888888888888888888888888888
9:9:97??79;((($&<$#<$
8888888888888888888888888888888888888
#=3*>)*+*-
<@@A&#'(A&O
3C MH??;H
@/3C??
*/ :LH
1/ L
在 <@@A&#'(A&O 里可以看到 存储引擎缓冲池的使用情况,/3C M 表明
了一共有多少个缓冲帧(/3C>)),每个 /3C>) 为 H",所以这里一共分配了
H??;H6H9-8% 内存的缓冲池。@/3C 表示当前空闲的缓冲帧,*/ 表示已经使
用的缓冲帧,1/ 表示脏页的数量。就当前状态看来,这台数据库的压力并不大,因为在缓
冲池中有大量的空闲页可供数据库进一步使用。
注意:+/**3 的命令显示的不是当前的状态,而是过去某个时间范围内 存储
引擎的状态,从上面的示例中我们可以看到,#=3*>)*+*-
表示的信息是过去 - 秒内的数据库状态。
具体来看,缓冲池中缓存的数据页类型有7索引页、数据页、3 页、插入缓冲(*/3C)、自适应
哈希索引( *=++I)、 存储的锁信息(.>)、数据字典信息(*
*)等。不能简单地认为,缓冲池只是缓存索引页和数据页,它们只是占缓冲池很大的一部分而已。
图 ; 很好地显示了 存储引擎中内存的结构情况。
参数 /0/3C0 0M 指定了缓冲池的大小,在 ; 位 系统下,参数
/0/3C0 00))0)/ 还可以启用地址窗口扩展('A)功能,突破 ; 位下对于内存使用
的限制。但是,在使用这个参数的时候需要注意,一旦启用 'A 功能, 存储引擎将自动禁用自适应
哈希索引( *=++I)的功能。
图 ; 存储引擎内存结构
日志缓冲将重做日志信息先放入这个缓冲区,然后按一定频率将其刷新到重做日志文件。该值一般不需要设置
为很大,因为一般情况下每一秒钟就会将重做日志缓冲刷新到日志文件,因此我们只需要保证每秒产生的事务
量在这个缓冲大小之内即可。
额外的内存池通常被 ' 忽略,认为该值并不是十分重要,但恰恰相反的是,该值其实同样十分重要。在
存储引擎中,对内存的管理是通过一种称为内存堆(+ )的方式进行的。在对一些数据结构本身分
配内存时,需要从额外的内存池中申请,当该区域的内存不够时,会从缓冲池中申请。 实例会申请缓