Troubleshooting wait event ‘free buffer waits’
Server processes 扫描 LRU 列表以获取free buffers (例如,在从磁盘读取块时,或为 CR 克隆缓冲区等时)。在将其扫描到阈值级别后,如果Server processes找不到free buffers,它会请求 DBWR 将 LRU 列表中的脏缓冲区写入磁盘,或a pinned buffer is freed。当 DBWR 写入脏缓冲区/释放固定缓冲区时,会话等待 ‘free buffer waits’。
AWR/statspack 报告 top timed event 显示在此等待事件上花费的数据库时间的很大一部分。
DB Name | DB Id | Unique Name | Role | Edition | Release | RAC | CDB |
---|---|---|---|---|---|---|---|
ANBOB | 2491810907 | gjb | PRIMARY | EE | 19.0.0.0.0 | YES | YES |
Top 10 Foreground Events by Total Wait Time
Event | Waits | Total Wait Time (sec) | Avg Wait | % DB time | Wait Class |
---|---|---|---|---|---|
free buffer waits | 19,454,020 | 474.9K | 24.41ms | 33.7 | Configuration |
resmgr:cpu quantum | 399,131 | 319.7K | 800.94ms | 22.7 | Scheduler |
DB CPU | 287.4K | 20.4 | |||
IPC send completion sync | 95,832 | 127.2K | 1327.56ms | 9.0 | Other |
library cache lock | 136,905 | 63.8K | 466.24ms | 4.5 | Concurrency |
library cache load lock | 2,268 | 60.4K | 26.62 s | 4.3 | Concurrency |
buffer busy waits | 23,668 | 49.5K | 2090.85ms | 3.5 | Concurrency |
latch: cache buffers chains | 1,412,222 | 45.5K | 32.25ms | 3.2 | Concurrency |
latch: cache buffers lru chain | 1,100,627 | 30.2K | 27.44ms | 2.1 | Other |
enq: HV – contention | 7,878 | 26.8K | 3406.05ms | 1.9 | Concurrency |
Host CPU
CPUs | Cores | Sockets | Load Average Begin | Load Average End | %User | %System | %WIO | %Idle |
---|---|---|---|---|---|---|---|---|
224 | 112 | 4 | 196.21 | 129.87 | 17.3 | 65.0 | 0.4 | 17.3 |
分析思路
有 3 种主要情况会发生’free buffer waits’的高等待。
1, CPU BUSY
CPU使用率过高可以放大等待事件,其中后台进程没有获得足够的 CPU 来更快地进行。像上面的AWR更像是这种情况。
2,I/O SLOW或 DBWn busy
DBWR 清除脏块的速度不够快。检查慢 IO(数据文件写入性能差)。一些文件系统的写入性能很差(写入时间过长),并且正在影响 DBwriter 在缓冲区高速缓存中保持足够干净缓冲区的能力。
检查是否启用异步I/O, 或考虑增加DBWn 进程个数.调整检查点,以便我们可以足够快地刷新脏缓冲区。调优可以IO的SQL
3, buffer cache太小:
如果缓冲区缓存太小并且充满热块,那么会话将缺乏空闲缓冲区(干净、冷块),并且需要花费太多时间寻找空闲缓冲区和/或发布 DBWR 来写入脏块并生成他们免费。增加参数或 DB_CACHE_SIZE 并监视更改的效果。调优IO的SQL
需要收提供OSW数据。重点检查CPU、IO, 像以上案例中SYS %使用率有些高, 这是一个疑点。
对不起,这篇文章暂时关闭评论。