Oracle數據庫服務器主要由兩個部分組成:數據庫和實例。
實例
.實例的內存結構:SGA(system global areas)和PGA(program global areas)
.實例的進程結構:服務進程和後台進程
內存結構:
SGA(system global areas)
1、數據庫緩存 db_cach_size
.keep緩存池 buffer_pool_keep
.recycle緩存池 buffer_pool_recycle
.default緩存池 db_cache_size-(buffer_pool_keey+buffer_pool_recycle)
2、重做日志緩存 log_buffer
3、共享池 shared_pool_size
庫緩存:用於緩存已經解析並執行過的SQL和PL/SQL程序代碼
.享SQL工作區:存放有SQL語句的語法分析結果和執行計劃。如果共享SQL工作區已經沒有空閒空間,Oracle將利用LRU算法換出最近很少使用過的SQL語句----->SGA
.有SQL工作區:SQL語句的另一部分被保存到私有SQL工作區中,包括SQL語句中的綁定變量、環境和會話參數等信息,這些信息是屬於執行該語句的用戶所私有的,其他用戶即使執行相同的SQL語句也不能使用這些信息。只有在共享服務器(servers=shared)時,私有SQL工作區才會在SGA中創建。一般情況下私有SQL工作區位於PGA中。
#庫緩存的大小與open_cursors密切相關。open_cursors參數用於指定數據庫中能夠同時打開的游標數量,每條查詢語句都需要一個游標。
數據庫字典緩存:這是一種“行緩存”,即在其中保存的是一條條的記錄,而不像其他緩存那樣保存的是緩存塊。
4、Java池
5、大型池 large_pool_size
.進行數據庫備份和恢復操作
.執行具有大量排序操作的SQL語句
.招待並行化的數據庫操作
#如果沒有在SGA區中創建大型池,上述操作所需的緩存空間將在共享池或PGA中分配。
PGA(program global areas)
保存服務進程的數據和控制信息的內存結構,這個內存結構是非共享的,只有服務進程本身才能夠訪問它自已的PGA區。每個服務進程都有它自已的PGA區,各個服務進程PGA的總和即為實例的PGA區的大小。