一.数据高速缓冲区(databuffer cache)
oracle使用LRU(least recently used)算法管理buffer cache.即清楚最早没有使用的数据块
-------------------------------------------------------------------------------------------------------------------------------------------------
对于缓冲区的管理机制,有冷端和热端的解释。
HOT COLD
A B C D E F G H I J
假设新数据块 K 将要被读入,又没有空闲位置,则 Oracle 会对冷端头 J 块进行判断:
假设 J 被访问次数为 1,Oracle 将会认为 J 不是一个经常被访问的块(冷) ,则会将 J
块踢出队列,将 K 插入至 F 的位置,F 和其他块右移:
HOT COLD
A B C D E K F G H I
假设新数据块 L 将要被读入,又没有空闲位置,则 Oracle 会对冷端头 I 块进行判断:
假设 I 被访问次数为 5,Oracle 将会认为 I 是一个经常被访问的块(热) ,则会将 I 块放
入热端头,A 和其他快右移如下图所示:
HOT COLD
I A B C D E K F G H
这时,将对下一个冷端头块 H 进行判断:
假设 H 被访问次数为 1,Oracle 将会认为 H 不是一个经常被访问的块(冷) ,则会将 H
块踢出队列,将 L 插入至 E 的位置,E 和其他块右移:
HOT COLD
I A B C D L E K F G
但是这时,我们会发现。I 块被放入热端头,经过漫长的时间,I 块最终会被放到冷端
头进行判断;如果这段时间中,即使 I 没有再被访问过,I 的访问次数也仍然是 5,这样 I
将再次回到热端头,这样就造成了死循环,I 永远无法被踢出列表。
因此,当 I 被放到热端头的时候,访问次数将会被清零。如果这段时间 I 被访问多次,
则有机会回到热端头,否则,可能被踢出列表。
-------------------------------------------------------------------------------------------------------------------------------------------------------
buffer cache的大小管理
1.查看
show parameter db_cache_size/db_recycle_cache_size/db_keep_cache_size...
2.修改
alter system set db_cache_size=500m;
3.清空
alter system flush buffer_cache;
二.重做日志缓冲区(redo log buffer)
重做日志缓冲区用来记录对数据缓冲区数据进行的修改,可循环使用,当用户进行dml操作或者ddl操作时,
会改变data buffer cache的相应缓冲区。在修改此部分之前,oracle会自动生成重做项,将这些缓冲区的变化记载到
redo log buffer,每条重做项记载了修改的时间、被修改的块、修改位置及新数据。redo log buffer被循环使用,当redol og buffer填满时,
数据库将重做日志缓冲区的内容写入数据文件。
redo log buffer 的大小由 Log_buffer初始换参数决定。
show parameter log buffer