oracle 共享池( shared pool )


Oracle共享池

Oracle共享池(Share Pool)屬於SGA,由庫高速緩存(library cache)和數據字典高速緩存(data dictionary cache)組成。

庫高速緩存

Oracle引入庫高速緩存的目的是共享SQL和PL/SQL代碼。
 
服務器進程執行SQL和PL/SQL時,首先會進入庫高速緩存查找是否有相同的SQL,如果有,就不再進行后續的編譯處理,直接使用已經編譯的SQL和執行計划。
 
Oracle通過比較兩條SQL語句的正文來確定兩條SQL是否相同,所以如果想共享SQL語句,必須使用綁定變量的方式。如:
select * from emp where sal > 100和select * from emp where sal > 101是不同的,而使用綁定變量時,即使v_sal的值不同,Oracle認為select * from emp where sal > &v_sal也是相同的。
 
Oracle使用LRU隊列和算法來管理庫高速緩存,最近使用過的SQL會放在隊首,長時間沒有使用的SQL放在隊尾,當庫高速緩存需要內存空間而又沒有空閑的內存空間時,隊尾內存中的SQL會被清除,放入最新的SQL,並且隊首會指向次段內存。
 
Oracle沒有提供直接修改庫高速緩存大小的方法,只能通過修改共享池的大小來間接修改庫高速緩存的大小。

數據字典高速緩存

當Oracle執行SQL時,會將相關的數據文件、表、索引、列、用戶、其他的數據對象的定義和權限信息存放到數據字典高速緩存中。在此之后,如果需要相同的相關數據,Oracle會從數據字典高速緩存中提取。
 
Oracle沒有提供直接修改 數據字典高速緩存大小的方法,只能通過修改共享池的大小來間接修改 數據字典高速緩存的大小。

修改共享池的大小

 alter system set shared_pool_size= xxx m
共享池的大小受限制於SGA_MAX_SIZE參數的大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM