我这里同时模拟了5个会话进行操作,其中4个是update,一个进行select查询,注意,这里重复操作的5条数据,其实都是在同一个数据块中。
下面我们来看下第6个监控会话的结果是什么呢?
session 6: www.killdb.com>select sid,username,p1,p2,p3,event from v$session where event like 'buffer%'; SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 2 5657 23 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 2 5657 23 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 2 5657 23 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 2 5657 23 buffer busy waits w.killdb.com>select sid,username,p1,p2,p3,event from v$session where event like 'buffer%'; SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 534 ROGER 5 28909 1 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 5 28909 1 buffer busy waits 523 ROGER 5 29037 1 buffer busy waits 524 ROGER 5 29037 1 buffer busy waits 537 ROGER 5 29037 1 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 521 ROGER 5 28909 1 buffer busy waits 523 ROGER 5 29037 1 buffer busy waits 524 ROGER 5 29037 1 buffer busy waits 537 ROGER 5 29037 1 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 520 ROGER 5 29037 1 buffer busy waits 521 ROGER 5 28909 1 buffer busy waits 534 ROGER 5 29037 1 buffer busy waits www.killdb.com>/ SID USERNAME P1 P2 P3 EVENT ---------- ---------- ---------- ---------- ---------- ---------------------------------------- 520 ROGER 5 29037 1 buffer busy waits 521 ROGER 5 28909 1 buffer busy waits 534 ROGER 5 29037 1 buffer busy waits
我们可以看到,不仅仅是数据块,这里undo 也出现的buffer busy waits,很明显,这里的file 2是undo datafile。
1) Buffer busy waits等待的本质是因为写的缘故出现争用.
2) Oracle里面写写是不兼容的,写和读也是不兼容的,有可能出现buffer busy waits等待.
3) 实际上读写并发容易产生回滚段的争用,等待事件也是buffer busy waits.