概念描述
在Oracle数据库中,等待事件是指在数据库操作过程中,进程因等待某些资源或条件而产生的等待状态。例如,当一个进程正在等待某种工作,或正在诊断和优化数据库时,就会出现等待事件。
具体来说,当一个Oracle进程连接到数据库后,它将会经历一系列的等待事件,这些等待事件可以被分类为空闲等待事件和非空闲等待事件。
空闲等待事件指的是进程在等待某种工作发生,例如等待其他进程完成或等待用户输入等。这些等待事件通常不需要过多关注,除非在诊断和优化数据库时需要排除这些等待事件。
非空闲等待事件则是指向数据库任务或应用运行过程中发生的等待,例如等待数据读取或写入磁盘、等待锁等。这些等待事件是诊断优化性能问题时必须关注的事件,因为它们可能会导致数据库性能下降,甚至会导致数据库崩溃。
在Oracle 8i版本之前,等待事件主要通过诊断视图V$EVENT_NAME来查看相关信息。对于每一个等待事件,都有其独特的含义和处置方法,在数据库发生隐患或问题时就可以去特定的科室看病或安排联合会诊。
知识总结
- Buffer Busy Waits:当多个进程视图以不兼容的模式获取buffer pin时,如果发生争用,就会产生Cache Buffer Chains等待事件。原因可能是存在逻辑读过高的SQL,或者热点数据块被频繁读取或修改。
- Control File Parallel Write:这是由于同步将信息写入各个控制文件,这是一个并行的物理操作过程。产生等待的原因可能是日志切换太过频繁,或者IO存在争用。
- Control File Sequential Read:当需要读取控制文件的信息时,如果发生RAC环境下的控制文件共享,就会产生等待事件。
- Dbfile Parallel Read:当数据块从数据文件并行读取到内存中时,如果发生数据库恢复或缓存预读取,就会产生该等待事件。
- Free Buffer Waits:这个等待事件通常发生在数据缓冲池有空闲空间时,但是脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间。
- Free Buffer Wait:当数据缓冲池有空闲空间时,如果脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间,就会产生此等待事件。
- Library Cache Lock:当执行诸如ALTER TABLE或者ALTER PACKAGE/PROCEDURE等操作时,会以X模式持有Library Cache Lock,从而产生堵塞。其原因可能是错误的用户名密码、正在执行收集统计信息等。
- Library Cache Pin:管理Library Cache并发访问时会产生该等待事件。
- Cache Buffer Chains:当多个进程视图以不兼容的模式获取buffer pin时,如果发生争用,就会产生此等待事件。
- Control File Parallel Write:这是由于同步将信息写入各个控制文件,这是一个并行的物理操作过程。产生此等待事件的原因可能是日志切换太过频繁,或者IO存在争用。
- Control File Sequential Read:当需要读取控制文件的信息时,如果发生RAC环境下的控制文件共享,就会产生此等待事件。
- DB File Parallel Read:当数据块从数据文件并行读取到内存中时,如果发生数据库恢复或缓存预读取,就会产生此等待事件。
- DBWR:当DBWR将脏块从buffer cache写到数据文件中时,如果发生等待事件。
- Resource SPIN:当数据库尝试获取锁但被锁住时会出现资源spin等待事件。
- Non-blocking read/write:当数据库尝试获取一个非阻塞读/写锁失败时会出现这个等待事件。
- free buffer waits:当数据库在将数据块从磁盘读入内存或将脏数据块写回磁盘的过程中,如果内存中的数据块不够用,就会产生这种等待事件。
- library cache lock:当执行某些特定的数据库操作,如ALTER TABLE或ALTER PACKAGE等,需要获取library cache lock但无法获取时,会产生这种等待事件。
- library cache pin:当多个进程同时访问library cache并请求修改其中的内容时,会产生这种等待事件。
- cache buffer chains:当多个进程同时读取或修改相同的内存数据块时,会产生这种等待事件。
- control file parallel write:当多个控制文件被同时写入时,可能会产生这种等待事件。
- control file sequential read:当需要读取控制文件的信息时,如果发生RAC环境下的控制文件共享,会产生这种等待事件。
- db file parallel read:当数据库需要从多个数据文件中并行读取数据块以进行缓存预读取或数据库恢复时,会产生这种等待事件。
- db file parallel write:当多个进程同时将脏数据块从内存写入数据文件时,会产生这种等待事件。