非空闲的等待事件-latch free
ORACLE使用锁存器来保护SGA中的内存结构,即,锁存器只保护临时的内存对象,不应用于数据库对象,ORALCE中锁存器的存在是为了保护SGA中的各种内存结构不会由于并发访问而产生潜在的破坏,执行对SGA中共享数据结构的排它性访问。锁存器是按不会受到死锁的方式实现。 ORACLE9i中latch free代表所有的等待锁存器的事件。ORACLE10g开始,常见的锁存器被单独取出。 锁存器是简单的锁设备,是由3个部分组成的内存元素:PID(进程ID)、内存地址、长度。 [@more@]锁存器分为三种类型:父锁存器(v$latch_parent)、子锁存器(v$latch_children)、单独锁
非空闲的等待事件-library cache pin
当会话尝试在库高速缓冲中钉住对象以修改或检查该对象,会话必须确保此时对象没有被其他会话更新。 当会话编译、分析PL/SQL过程和视图时,ORACLE提交该事件。 常用的问题现象,如:PL/SQL过程内使用动态SQL,需要重新编译PL/SQL时。[@more@]参数说明: 事件号:262事件名:library cache pin参数一:被检查或加载的会话地址 p2raw=v$session.saddr参数二:加载锁的地址参数三:100*mode+namespace
非空闲的等待事件-library cache load lock
该进程等待在库高速缓存中加载某个对象或某个对象的一部分的机会。 同一时刻只有一个进程可以加载某个对象或某个对象的一部分。[@more@]
非空闲的等待事件-free buffer waits
free buffer waits(Configuration)在将一个块读入到缓冲存储器之前,Oracle进程必须发现并获得用于这个块的空闲缓冲区。如果找不到LRU列表上的空闲缓冲区,或缓冲区不可用,那么会话就会在free buffer waits事件上等待。 DBWR进程负责在LRU列表上建立清洁缓冲区。 ORACLE前台进程扫描LRU列表,要到预先定义的限度才停止扫描,这个限度通常是LRU列表的一定百分比,在ORACLE9i中,这个限度是40%,这个值在视图x$kvit中可以查看到: select * from x$kvit where kvittag = 'kcbfsp'KVITTAGKVITDSCKVITVALkcbfspMax percentage of LRU list fo
非空闲的等待事件-enqueue
排队是应用于数据库对象、重做线程、后台工作的锁,用来控制多个并发会话在锁模式相容/不相容时如何共享相同的资源。排队是事务的,由应用程序初始化。 事件参数(9i环境,10g中参数二、三有所变化) 事件编号:15事件名:enqueue参数一:name|mode(不同的锁类型,id1与id2有不同的含义)参数二:id1参数三:id2注:ORACLE9i所有排队的等待都归于enqueue中,ORACLE10g开始,将所有排队按类型分成独立的事件,所以很容量分辨出ID1和ID2的含义。[@more@]受到排队锁影响的数据库资源,我们称之为"排队资源"。ORACLE使用内部数组结构来
非空闲的等待事件-direct path write
direct path write(USER I/0类)从PGA写入数据文件,一个会话可以发布多个写入请求和连续的处理。 直接写入可以按同步或异步方式执行,取决于平台和DISK_ASYNC_IO参数的值。 通常用于在数据加载(APPEND提示、CTAS-CREATE TABLE AS SELECT)、并行DML操作时写入到临时段。 在使用异步IO时,direct path write事件产生的等待时间不准确,所以通过v$sesstat视图来获得直接写入次数来评估该事件的影响情况: SELECT a.NAME, b.sid, b.VALUE, round((SYSDATE - c.logon_time) * 24) hours_connected FROM v$statnam
非空闲的等待事件-direct path read
direct path read(USER I/0类)与直接读取相关联的等待事件。当ORACLE将数据块直接读入会话的PGA(进程全局区)中,同时绕过SGA(系统全局区)。PGA中的数据并不和其他的会话共享。即表明,读入的这部分数据该会话独自使用,不放于共享的SGA中。 在排序操作(order by/group by/union/distinct/rollup/合并连接)时,由于PGA中的SORT_AREA_SIZE空间不足,造成需要使用临时表空间来保存中间结果,当从临时表空间读入排序结果时,产生direct path read等待事件。 使用HASH连接的SQL语句,将不适合位于内存中的散列分区刷新到临时表空间中。为了
非空闲的等待事件-db file scattered read
db file scattered read(USER I/0类)与事件db file sequential read相类似。当会话发布一个读入多个数据块的IO请求时提交该事件。ORACLE会话等待多个连续的数据块(由初始参数DB_FILE_MULTIBLOCK_READ_COUNT指定)从磁盘读入到SGA中。 该事件是在全表扫描或索引快速全局扫描时发生的典型事件。 初始化参数db_file_multiblock_read_count(MBRC)决定了读取数据块的最大数目,有两种情况会造成多块读取操作被分成几次操作: >> MBRC因子不能跨越整个区,如果一个区包含10个块,MBRC因子=8,那么多块读取会发布两次读取调用,一次8个数据块
非空闲的等待事件-db file sequential read
db file sequential read(USER I/0类)在较新的存储子系统中平均的单块读取时间不应该超过10ms(毫秒)或1cs(厘秒)名称可能造成误导,该事件是单块读取操作产生的等待事件。ORACLE进程需要一个当前不在SGA中的块,该进程会等待从磁盘读入所需数据块到SGA中。 当从索引、回滚或撤消段、按ROWID访问的表、重建控制文件、转储数据文件标题(dump)、数据文件标题读取....提交该事件。 存在该事件并不一定表示存在性能问题,但是如果该事件的等待时间比其他等待时间多得多,则表明应用程序正在执行大量的索引读取,需要要考虑全表扫描是否更为有效?
非空闲的等待事件-control file parallel write
control file parallel write(SYSTEM I/0类)(CKPT专属等待事件)control file parallel等待事件往往是高日志切换的症状。 带有该等待事件的会话表明它已经执行了控制文件事务,例如:日志切换、添加或删除数据文件的操作、一些LOB操作。 CKPT进程按每3秒钟一次将位于重做日志中的检查点写入控制文件,ORACLE在数据库恢复操作中使用该信息。 ARCH后台进程更新控制文件有关归档日志相关的信息。 LGWR后台进程在每次日志切换产生时更新控制文件。[@more@]显示执行控制文件事务的会话: SELECT a.sid, decode(a.TYPE, 'BA
非空闲的等待事件-buffer busy waits
事件参数说明: 事件号事件名参数一参数二参数三145buffer busy waitsfile#block#9i - 原因码10g - block class#[@more@]ORACLE会话正在等待PIN住一个缓冲区,会话必须在读取或修改缓冲区之前将该缓冲区PIN住。 在任何时侯只有一个进程可以PIN住一个缓冲区。 buffer busy waits表明读/读、读/写、写/写争用。 根据P3中指明的原因码有不同的处理方式。 现象描述:会话在SGA中读取或修改缓冲区之前,必须要先获取cahce buffers chains锁存器,获取后然后遍历这个缓冲区链,直到发现它需要的缓冲区头。然后以共享方式或独占方式获取该缓冲区