Oracle的邏輯讀和物理讀

來源:互聯網
上載者:User

在我們最佳化oracle的時候,經常會用到各種各樣的技術手段,其中使用statspack和explain plan是最常見的了。 

當我們使用這兩個常見的工具來進行最佳化調整的時候,經常會看到physical reads和logical reads。 那麼這兩者 
是什麼東東, 他們分別表示什麼意思,他們有什麼樣的區別叻。 

讓我們先做一下這樣的實驗,一起來看看 
SQL>set autotr traceonly; 

SQL> select * from test1.t_1; 

已選擇6行。 

引用:

執行計畫 
---------------------------------------------------------- 
Plan hash value: 1376489960 

------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time 
------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 6 | 234 | 3 (0)| 00:00:01 
| 1 | TABLE ACCESS FULL| T_1 | 6 | 234 | 3 (0)| 00:00:01 
------------------------------------------------------------------------- 
統計資訊 
---------------------------------------------------------- 
199 recursive calls 
0 db block gets 
38 consistent gets 
7 physical reads

 
0 redo size 
961 bytes sent via SQL*Net to client 
385 bytes received via SQL*Net from client 
2 SQL*Net roundtrips to/from client 
2 sorts (memory) 
0 sorts (disk) 
6 rows processed

這裡有個很明顯的 
7 physical reads

 

我們再來執行以下相同的語句 
SQL> select * from test1.t_1; 

已選擇6行。

引用:

執行計畫 
---------------------------------------------------------- 
Plan hash value: 1376489960 

------------------------------------------------------------------ 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti 
------------------------------------------------------------------ 
| 0 | SELECT STATEMENT | | 6 | 234 | 3 (0)| 00 
| 1 | TABLE ACCESS FULL| T_1 | 6 | 234 | 3 (0)| 00 
------------------------------------------------------------------ 

統計資訊 
---------------------------------------------------------- 
0 recursive calls 
0 db block gets 
8 consistent gets 
0 physical reads

 
0 redo size 
961 bytes sent via SQL*Net to client 
385 bytes received via SQL*Net from client 
2 SQL*Net roundtrips to/from client 
0 sorts (memory) 
0 sorts (disk) 
6 rows processed

這裡的physical reads已經變化了0 physical reads

 

沖這裡的執行個體來看,當我們第一次讀取t_1表時,表的資料區塊是第一次被讀取到,讀取以後被oracle的載入到buffer中,也就是緩衝到SGA的buffer cache中,這個過程是從資料庫的物理地址進行讀取,讀取後載入到記憶體中,從而這個過程就是我理解的物理讀,這裡為什麼會有7次物理讀,而不是6次,不是16次,這個可以在其他的文章中進行研究, 

當第二次我們執行語句的時候,不需要去進行物理山的讀了,在buffer中已經緩衝了這塊資料,我們當然就沒有必要去讀物理磁碟了,從效能上來說,這是很耗時的。 所以直接從buffer裡讀就可以了, 既然是從buffer裡讀,我們就不是一個真實的讀了,所以叫做邏輯讀。這裡就有要引入一個其他的概念,cr(consistent gets),buffer又可能被修改了,或者是因為事務的原因,需要保證讀的一致性,這樣就需要cr了。cr詳細在其他的文章介紹。 

寫到這裡,帶小孩去玩去了,回來接著寫。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.