實驗講解DB_FILE_MULTIBLOCK_READ_COUNT對物理讀和IO次數的影響

當執行SELECT語句時,如果在內存裏找不到相應的數據,就會從磁盤讀取進而緩存至LRU末端(冷端),這個過程就叫物理讀。當相應數據已在內存,就會邏輯讀。

 

物理讀是磁盤讀,邏輯讀是內存讀;內存讀的速度遠比磁盤讀來得快。

 

參數db_file_multiblock_read_count=N,會決定在全表掃描或索引全掃描時單次IO最大讀取N個數據塊。

 

下在結合實驗來講解物理讀:

 

創建測試表:

 

create table t3 as select * from dba_segments tablespace users;

對測試表進行統計信息收集:

 

begin
  dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T3',cascade => true);
end;

 

查看T3表的相關信息:

select * from dba_tables where table_name='T3'

數據分佈在100個數據塊

 

修改參數

SQL> alter session set db_file_multiblock_read_count=1;

 

對T3表全掃描

可以看到,T3全掃描過程讀取了101個數據塊,同時引起103內存讀(包括當前讀和一致讀)

 

截取這個步驟的AWR信息

 

db_file_multiblock_read_count=1的情況下,查詢T3全表數據期間發生100.3個數據塊的物理讀,IO次數爲100.3次。

USERS表空間的user01.dbf數據文件發生了101次讀操作

 

增大db_file_multiblock_read_count之後

SQL> alter session set db_file_multiblock_read_count=128;

Session altered.

SQL> alter system flush buffer_cache;

查詢表T3

 

物理讀依舊101,邏輯讀也相應改變

 

USERS表空間users01.dbf數據文件讀次數降爲15次

 

 

同樣的數量的數據塊物理讀,如果單次讀取的數據塊越多,那麼IO次數就越少,系統性能則越好。

 

-------------------------------------------------------------------------------------------------

本文來自於我的技術博客 http://blog.csdn.net/robo23

轉載請標註源文鏈接,否則追究法律責任!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章