ORACLE LATCH

LATCH:oracle用于保护内存结构,保证数据在读取的时候,只能由一个会话来完成。
 
LATCH:轻量级锁,不会造成阻塞,会导致等待。
 
系统缓慢原因是LATCH:
1. 共享池中LATCH争用 --> 绑定变量;
 
如果字段上有索引或者字段集较大,不建议用绑定变量
 
a. 如何绑定变量:
declare
    i number;
begin
  for i in 1..1000 loop
      insert into t values(i,i+1,i*1,i*2,i-1);
  end loop;
end;
 
或者:
 
declare
    i number;
    sqlstr varchar2(200);
begin
  for i in 1..1000 loop
      sqlstr:='insert into 测试表 (:i,:i+1,:i*1,:i*2,:i-1) ';
      execute immediate sqlstr;
  end loop;
end;
b. 如何判断是否绑定变量:
 
  select substr(sql_text,1,20), count(*)
          from v$sqlarea
         group by substr(sql_text,1,20) having count(*) > 50; 
 
2. 数据缓冲池LATCH争用 --> 热块存在;
    a. 表数据块 --> 将表数据分布到更多块上,缺点读取的性能变差。
命令:alter table minimize records_per_block;
 
    b. 索引数据块 --> 多发生在RAC系统中,建立反向索引
命令:create index <索引名> on <表名>(<字段名>) reverse;
 
    c. 索引根数据块 --> 第一二级索引被频繁访问,建立索引分区。
 
    d. 文件头数据块 -->
Oracle 9i以前:记录数据块是否空闲的Free List(PCT_FREE参数决定数据块使用到多大比例从Free List中剔除,多大比例重新加入Free List)--> 增加Free List的数量
Oracle 9i及以后:引入ASSM(Automatic Segment Space Management)自动段管理技术,有效解决文件头数据块热块问题。
 

 

Comments

Popular posts from this blog

Nginx Proxy & Load Balance & LNMP

Snort+barnyard2+Snorby CentOS 6.5_64 Installation

ORACLE Error