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