oracle 学习小结11

来源:互联网 发布:淘宝客服搞笑对话 编辑:程序博客网 时间:2024/04/29 00:31
1 计算redo  block size的大小
   LGWR以block为单位把redo写入磁盘,redo block size是Oracle源代码中固定的,与操作系统相关。

通常的操作系统都是以512 bytes为单位,如:Solaris, AIX, Windows NT/2000, Linux 等

这个Log size可以从Oracle的内部视图中获得:

SQL> select max(lebsz) from x$kccle;            MAX(LEBSZ)            ----------            512            

也可以从v$sysstat中的统计信息中通过计算粗略得到.
以下几个统计信息如:
redo size------------redo信息的大小
redo wastage---------浪费的redo的大小
redo blocks written--LGWR写出的redo block的数量

额外的信息,每个redo block header需要占用16 bytes.
由此可以粗略的计算redo block size如下

SQL> select name,value from v$sysstat            2  where name in ('redo size','redo wastage','redo blocks written');            NAME                                                                  VALUE            ---------------------------------------------------------------- ----------            redo size                                                           2242628            redo wastage                                                          63904            redo blocks written                                                    4657            SQL> select ceil(16 + (2242628 + 63904)/4657) rbsize from dual;            RBSIZE            ----------            512            
 
 
2 查看登陆系统的警报文件
    show parameter background_dump_dest
 
3 oracle 10g的自动内存管理
   

在Oracle10g中,不必再如从前一样用下列各个参数分别指定SGA的每个部分的大小.也就是说不需要首先评估SGA各组件的大小,并且在init<SID>.ora初始参数文件中分组件指定.(当然某些组件如果不不使用是可以不指定的.比如java_pool_size).
shared_pool_size
java_pool_size
large_pool_size
db_cache_size

在10g中可用一个新参数SGA_TARGET来设定实列所需的SGA最大值,并替代以上参数.
假设,将SGA_TARGET设置为152M,则表明SGA最大为152M. 所有SGA组件如shared pool, buffer cache,large pool, java pool都需从其中分配. Oracle会自动为各组件指定初始值,并在运行过程中动态地调整各组件的
大小.毋须人工干预.


这样,只要设置了SGA_TARGET, 就毋须显式地定义shared pool,buffer pool,large pool和java pool的大小.

例如:定义SGA_TARGET=152M(block size为8k).
SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

SQL> show parameter sga_target

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 152M
Oracle会自动将内存分配给各组件:
SQL> show sga

Total System Global Area 159383552 bytes
Fixed Size 1218268 bytes
Variable Size 67111204 bytes
Database Buffers 88080384 bytes
Redo Buffers 2973696 bytes

使用sga_target参数有几点需要注意:
1. 当使用sga_target时, 若未设置sga_max_size,或设置了小于sga_target,则sga_max_size将等于sga_target.
SQL> show parameter sga

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 152M
sga_target big integer 152M

2. 当sga_target是可动态调整的,但其值不能大于sga_max_size.

 在sga_target为非零情况下,启用自动sga管理,但是有些部件是不能自动管理的,包括三部分:
nk buffer;log buffer;keep&recycle buffer;
这些非自动管理组件必须手工设定,而且这部分内存的大小也在sga_target管理范围内,实际上参与自动分配的内存是要sga_target
减去这部分的大小。可以理解为实际上sga的大小是由sga_target(动态参数)指定,且不能大于sga_max_size指定的大小,
而sga_max_size是在实例启动时同操作系统打交道的一个参数(静态参数!)
而如果指定了share_pool_size等以前用的参数时,就作为这些动态组件的一个下限来使用(其实这个特征也很重要。)

nK Buffer:

db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0

 

3 等待事件
    分为空闲非空闲,主要关注非空闲事件.比较重要的有
v$session,v$session_wait,v$system_event

   其中v$session_wait在10g中变的作用不大了,主要看v$session了,

   比如可以
     select sid,event,p1,p1text from v$session_wait;

  还有一个叫v$session_wait_history视图,记录session最近10次等待事件
   select event,p1text,p1,p2text,p2,p3text,p3,wait_time form v$session_wait_history where sid=120;


   
 

原创粉丝点击