cAng^Er

          不懂我的人 , 離不了我 , 該了解了解我 !而懂我的人 , 更離不了我 , 因?yàn)樗麄儛畚?。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 16 文章 :: 18 評(píng)論 :: 0 Trackbacks

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

          PGA是一個(gè)服務(wù)器進(jìn)程的專用的私有內(nèi)存區(qū),而SGA則是共享內(nèi)存區(qū)。

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

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

          下面將詳細(xì)介紹各個(gè)部分的作用和推薦設(shè)置。

          SGA各組件作用
          1, SGA:

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

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

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

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

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

          4, Java池(Java pool):
              在數(shù)據(jù)庫中運(yùn)行Java代碼時(shí)用到這部分內(nèi)存。例如:編寫Java存儲(chǔ)過程在服務(wù)器內(nèi)運(yùn)行。需要注意的是,該內(nèi)存與常見的Java編寫的B/S系統(tǒng)并沒關(guān)系。用JAVA語言代替PL/SQL語言在數(shù)據(jù)庫中寫存儲(chǔ)

          過程才會(huì)用到這部分內(nèi)存。

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

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

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

          7, 流池(Stream pool)
              9iR2以上增加了“流”技術(shù),10g以上在SGA中增加了流池。流是用來共享和復(fù)制數(shù)據(jù)的工具。
          posted on 2011-02-23 10:49 cAng^Er 閱讀(338) 評(píng)論(0)  編輯  收藏 所屬分類: |:數(shù) 據(jù) 庫:|
          主站蜘蛛池模板: 凤山县| 建阳市| 邮箱| 天等县| 兴化市| 菏泽市| 涡阳县| 迁西县| 措美县| 濉溪县| 皋兰县| 长丰县| 八宿县| 凉山| 启东市| 班玛县| 三门县| 濮阳县| 江口县| 同仁县| 博野县| 睢宁县| 平和县| 安远县| 耒阳市| 广昌县| 郓城县| 鹿邑县| 文登市| 万安县| 大田县| 青龙| 拉萨市| 涟源市| 赣榆县| 离岛区| 红安县| 吉木萨尔县| 祁东县| 庆城县| 喀喇沁旗|