Shared SQL Areas和Private SQL Areas

gholay發表於2014-02-25
Shared SQL Areas和Private SQL Areas


Oracle 用Shared SQL Areas和Private SQL Areas描述每個SQL語句。當兩個使用者使用相同SQL語句時,Oracle可以在Shared SQL Areas中識別出來,並且重複利用。但是每個使用者必須在Private SQL Areas擁有自己的一份SQL語句拷貝。
Shared SQL area包含了用於執行SQL語句的計劃,Shared SQL area為了節省記憶體,儲存一些常用的SQL語句。
當一條SQL語句解析出來時,Oracle從shared area分配記憶體,分配記憶體的大小由解析的語句決定。如果所有的shared area已經用完,Oracle會根據LRU邏輯釋放足夠的記憶體。再次碰到這些SQL語句,就需要重新解析一次。


1)shared sql area:
當一個sql語句第一次被執行的時候,那麼資料庫就會使用shared sql area 去處理折條語句,這個區域是共享的,可以被其他使用者所訪問,其中包含了語句的執行分析樹以及執行計劃。在這個區域中每個shared sql area為一個唯一的語句存在。(詳細內容將在sga和shared pool中進行說明)
2)private sql area
當一個會話執行一個sql語句的時候,這個私有sql area 就會在pga中進行分配了。每個session都會有一個private sql area,如果執行同一個sql那麼會指向同一個shared sql area。
eg:我執行了select * from t在一個session中執行20此和在10個不同的session執行同樣這條語句,那麼會共享同樣的sql語句執行計劃。但是private area 可能是不能夠被共享的,因為其中可能儲存的不同的變數值和資料。
其實我們在進行dml以及ddl操作的時候隱含的都是開啟cursor,每個遊標都作為客戶端一邊指向服務端的一條指標,每個遊標開啟都會分配相應的private sql area。因此在應用開發的過程中應該及時釋放關閉遊標,釋放記憶體佔用,以提高記憶體使用率。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29196873/viewspace-1090133/,如需轉載,請註明出處,否則將追究法律責任。

相關文章