- Direct path read
這個等待事件發(fā)生在會話將數據塊直接讀取到PGA當中而不是SGA中的情況,這些被讀取的數據通常是這個會話私有的數據肋层,
所以不需要放到SGA作為共享數據振劳,因為這樣做沒有意義是尖。這些數據通常是來自于臨時段上的數據押框,比如一個會話中SQL的排序數據榄攀,
并行執(zhí)行過程中間產生的數據谍倦,以及Hash Join娜扇,merge join產生的排序數據越妈,因為這些數據只對當前的會話的SQL操作有意義季俩,
所以不需要放到SGA當中。
當發(fā)生direct path read等待事件時梅掠,意味著磁盤上有大量的臨時數據產生寿桨,比如排序颗味,
并行執(zhí)行等操作。或者意味著PGA中空閑空間不足翘县。
這個等待事件有三個參數:
Descriptor address: 一個指針,指向當前會話正在等待的一個direct read I/O油讯。
First dba: descriptor address 中最舊的一個I/O數據塊地址啊易。
Block cnt: descriptor address上下文中涉及的有效的buffer 數量。
- Direct path write
這個等待事件和direct path read 正好相反,是會話將一些數據從PGA中直接寫入到磁盤文件上欺矫,而不經過SGA纱新。
這種情況通常發(fā)生在:
使用臨時表空間排序(內存不足)
數據的直接加載(使用append方式加載數據)
并行DML操作。
這個等待事件有三個參數:
Descriptor address: 一個指針穆趴,指向當前會話正在等待的一個direct I/O.
First dba: descriptor address 中最舊的一個I/O數據塊地址脸爱。
Block cnt: descriptor address 上下文中涉及的有效地 buffer 數量。
- 案例
SQL> select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event where upper(event) like 'DIRECT%';
EVENT TOTAL_WAITS AVERAGE_WAIT
direct path sync 4 0.23
direct path read 1 1.41
direct path write 70 0.04
direct path write temp 1 0.01
SQL> select * from t4 order by 1;
1 MAAAAAAAA
...
100000 MAAAAAAAA
SQL> select event,TOTAL_WAITS,AVERAGE_WAIT from v$system_event where upper(event) like 'DIRECT%';
EVENT TOTAL_WAITS AVERAGE_WAIT
direct path sync 4 0.23
direct path read 1 1.41
direct path write 70 0.04
direct path write temp 1 0.01