cAng^Er

          不懂我的人 , 離不了我 , 該了解了解我 !而懂我的人 , 更離不了我 , 因為他們愛我 。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 16 文章 :: 18 評論 :: 0 Trackbacks

          原文:http://bbs.dameng.com/viewthread.php?tid=2202&extra=page%3D1

          PGA是一個服務器進程的專用的私有內存區,而SGA則是共享內存區。

          SGA由多個部分組成:
          1, 固定SGA(Fixed SGA)
          2, 塊緩沖區(Db cache)
          3, 重做日志緩沖區(Redo log buffer)
          4, Java池(Java pool)
          5, 大池(Large pool)
          6, 共享池(Shared pool)
          7, 流池(Stream pool)

          有如下參數控制共享池相關組件大小:
          1, JAVA_POOL_SIZE:控制Java池大小。
          2, SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
          3, LARGE_POOL_SIZE:控制大池大小。
          4, DB_*K_CACHE_SIZE:控制不同塊大小的緩沖區大小。
          5, LOG_BUFFER:控制重做日志緩沖區大小。
          6, SGA_TARGET:10g以上控制自動SGA內存管理的總內存大小。
          7, SGA_MAX_SIZE:控制SGA可以達到的最大大小,改變需重啟數據庫

          下面將詳細介紹各個部分的作用和推薦設置。

          SGA各組件作用
          1, SGA:

          2, 塊緩沖區:
              查詢時,Oracle會先把從磁盤讀取的數據放入內存,以后再查詢相關數據時不用再次讀取磁盤。insert和update時,Oracle SGA會現在該區中緩存數據,之后批量寫到硬盤中。通過塊緩沖區,Oracle可以通過內存緩存提高磁盤的I/O。
              塊緩沖區中有三個區域:
          默認池(Default pool):所有數據默認都在這里緩存。
          保持池(Keep pool):用來緩存需要多次重用的數據。
          回收池(Recycle pool):用來緩存很少重用的數據。

              原來只有一個默認池,所有數據都在這里緩存。這樣會產生一個問題:大量很少重用的數據會把需重用的數據緩沖區,造成磁盤I/O增加,運行速度下降。后來分出了保持池和回收池根據是

          否經常重用來分別緩存數據。
              這三部分內存區需要手動確定大小,并且之間沒有共享。例如:保持池中已經滿了,而回收池中還有大量空閑內存,這時回收池的內存不會分配給保持池。
              9i開始,還可以設置db_nk_cache。9i之前數據庫只能使用相同的塊大小。9i開始同一個數據庫可以使用多種塊大小(2KB,4KB,8KB,16KB,32KB),這些塊需要在各自的db_nk_cache中緩存。如果為不

          同的表空間指定了不同的塊大小,需要為其設置各自的緩沖區。

          3, 重做日志緩沖區(Redo log buffer):
              數據寫到重做日志文件之前在這里緩存,在以下情況中觸發:
          每隔3秒
          緩存達到1MB或1/3滿時
          用戶提交時
          緩沖區的數據寫入磁盤前

          4, Java池(Java pool):
              在數據庫中運行Java代碼時用到這部分內存。例如:編寫Java存儲過程在服務器內運行。需要注意的是,該內存與常見的Java編寫的B/S系統并沒關系。用JAVA語言代替PL/SQL語言在數據庫中寫存儲

          過程才會用到這部分內存。

          5, 大池(Large pool):
              下面三種情況使用到大池:
          并行執行:存放進程間的消息緩沖區
          RMAN:某些情況下用于磁盤I/O緩沖區
          共享服務器模式:共享服務器模式下UGA在大池中分配(如果設置了大池)

          6, 共享池(Shared pool)
              共享池是SGA中最重要的內存段之一。共享池太大和太小都會嚴重影響服務器。
          SQL和PL/SQL的解釋計劃、代碼,數據字典數據等等都在這里緩存。
          SQL和PL/SQL代碼在執行前會進行“解析”來獲得執行計劃及權限驗證等相關輔助操作。“解析”很費時間。對于響應時間很短的查詢,“解析”可以占到全部時間的2/3。對于響應時間較長的統計等操

          作,“解析”所占用的時間比例會下降很多。執行計劃及所需的數據字典數據都緩存在共享池中,讓后續相同的查詢可以減少很多時間。
              不使用“綁定變量”導致:
              系統需要花費大量的資源去解析查詢。
              共享池中的代碼從不重用,系統花費很大代價管理這部分內存。
              關于共享變量的優缺點討論已經超過了這篇文章的范疇,簡單來講,響應時間短的查詢要使用共享變量,響應時間長的統計不使用共享變量。
              需要注意的是,SHARED_POOL_SIZE參數在9i中控制共享池中占用最大的部分,10g以上控制共享池總大小。

          7, 流池(Stream pool)
              9iR2以上增加了“流”技術,10g以上在SGA中增加了流池。流是用來共享和復制數據的工具。
          posted on 2011-02-23 10:49 cAng^Er 閱讀(337) 評論(0)  編輯  收藏 所屬分類: |:數 據 庫:|
          主站蜘蛛池模板: 南陵县| 聂荣县| 图们市| 平原县| 长治县| 石林| 图木舒克市| 什邡市| 电白县| 都匀市| 衡阳市| 依兰县| 永济市| 红河县| 平潭县| 连山| 潮安县| 元朗区| 高唐县| 贵德县| 肇东市| 云霄县| 永善县| 育儿| 永新县| 乐昌市| 安西县| 历史| 和平区| 育儿| 伊宁县| 克拉玛依市| 朔州市| 文成县| 修武县| 余江县| 靖江市| 门源| 浪卡子县| 三台县| 文水县|