oracle体系结构总结 1.数据高速缓冲区(data buffer cache)2.redo log buffer

时间:2021-08-20 04:05:07

一.数据高速缓冲区(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 被访问次数为 1Oracle 将会认为 J 不是一个经常被访问的块(冷) ,则会将 J
块踢出队列,将 K 插入至 F 的位置,F 和其他块右移:
HOT COLD
A B C D E K F G H I
假设新数据块 L 将要被读入,又没有空闲位置,则 Oracle 会对冷端头 I 块进行判断:
假设 I 被访问次数为 5Oracle 将会认为 I 是一个经常被访问的块(热) ,则会将 I 块放
入热端头,A 和其他快右移如下图所示:
HOT COLD
I A B C D E K F G H
这时,将对下一个冷端头块 H 进行判断:
假设 H 被访问次数为 1Oracle 将会认为 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