oracle缓存数据库
‘壹’ 怎么查看oracle数据库数据缓冲区大小
日志缓冲区Log_buffer是Oracle专门用于存入重做日志的内存区域。
数据库启动时,可以看到:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 85006980 bytes
Fixed Size 453252 bytes
Variable Size 46137344 bytes
Database Buffers 37748736 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
Redo Buffers就是分配给Log_buffer的内存大小。
对日志缓冲区的大小,可以从下面的视图中查询的到:
SQL> select * from v$parameter;
也可以
SQL> show parameter log_buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 524288
从这儿查询出的数据,是在配置文件中配置的数据,配置文件有:SPFILEORA92.ORA,INITora92.ORA等。
这个值和真实的日志缓冲区的大小不同。如果要知道真实的Log_buffer的大小,可以用下面的方法查询:
SQL> select * from v$sgastat where name ='log_buffer';
POOL NAME BYTES
----------- -------------------------- ----------
log_buffer 656384
上面的这个值,是Oracle的SGA实际分配给Log_buffer的大小。
另外,还可以从 v$sga中查询:
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 453252
Variable Size 46137344
Database Buffers 37748736
Redo Buffers 667648
这个值也就是Oracle启动时分配给Log_buffer的大小。
那这个值为什么和实际的大小有差别呢?
SQL> select (667648-656384)/1024 ||'K' from al;
(66
---
11K
相差11K,那这11K干什么用呢?
这11K是Oracle为了保护Log_buffer,分配出来的日志保护页。
‘贰’ oracle 库高速缓存和缓冲区缓存 区别
数据高速缓存跟操作系统的缓存类似,其存储最近从数据文件中读取的数据块,其中的数据可以被所有的用户所访问。如当我们利用Select语句从数据库中查询员工信息的时候,其首先不是从数据文件中去查询这个数据,而是从数据高速缓存中去查找,而没有这个必要再去查询磁盘中的数据文件了。只有在数据缓存中没有这个数据的时候,数据库才会从数据文件中去查询。Oracle数据库为什么要如此设计呢?这是由于数据库在读取数据的时候,读取内存的速度比读取磁盘的速度要快很多倍,所以这种机制可以提高数据的整体访问效率。
缓冲区缓存
重新启动数据库后,系统就会为数据库分配一些空闲的缓存块。空闲缓存块中是没有任何数据的,他在那边默默的等着别写入记录。当Oracle 数据库从数据文件中读取数据后,数据库就会寻找是否有空闲的缓存块,以便将数据写入其中。
一般来说,数据库在启动的时候,就会在内存中预先分配这些缓存块。所以,Oracle数据库在启动的时候,会占用比较多的内存。但是,这可以免去在实际需要时向内存申请的时间。所以,有时候Oracle数据库虽然已启动,内存的占用率就很高,但是,其后续仍然可以正常运行的原因。而其他数据库虽然刚启动的时候内存占用率不是很高,但是,但系统内存到达80%以上时,在进行数据处理就会受到明显的影响。
‘叁’ Oracle数据库缓存大小怎么设置,比如要设置一个缓存为8G的。这个数值是怎么计算的
10g之前可以设置db_cache_size 来指定缓存大小
10g开始可以使用sga_target(当然你也可以不用,但是推荐用),来设定整个共享内存区域大小,包括缓存和共享池等。不需要再单独设置db cache
11g可以设置memory_target,不光包括了sga,还包括了pga,是所有给oracle的内存的总和,就更方便了。
如果你使用了sga_target或者memory_target,还同时设置了db_cache_size的话,那么你设置的db_cache_size成为了缓存的最小值。
需要分配给数据库多大内存取决于你的业务需要,你可以通过db cache advisor的视图,来估计是否需要更大的缓存。
‘肆’ ORACLE 数据库缓冲区缓存与共享池SQL查询和PL/SQL函数结果缓存的区别
1、数团咐陵据库缓冲区DB_BUFFER只能缓存访问过的BLOCK,部分解决了物理读的问题,查询仍然需要大量的逻辑读。
2、SQL缓存结果集/*+RESULT_CACHE*/它缓存的是查询的结果。不在需要大量的逻辑读,不在需要任何的复杂计算,而是直接将已经缓存的结果返回。
3、对于采用了RESULT_CACHE的函数,Oracle自动将函数的返简胡回结果缓存,下次执行的时候,不会实际执行函数,而是直接返回结果。塌戚由于缓存的结果存储在SGA中,因此所有的会话可以共享这个结果。
‘伍’ Oracle数据库缓存是怎么回事
我最近也看了一个视频,相克军老师的。http://www.jiagulun.com/thread-2620-1-1.html 甲骨论的,希望可以帮到你。
‘陆’ 清除ORACLE数据库缓存有几种方法,分别是哪些
10g:
alter system flush buffer_cache
9i:
alter system set events = 'immediate trace name flush_cache'