999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Oracle內存管理綜述

2010-12-31 00:00:00張君楓
經濟研究導刊 2010年33期

摘要:Oracle內存的管理比較復雜,但對提高Oracle的性能來說是非常重要的,也是很多數據庫管理人員需要花費大量時間去研究的問題。內存的配置是影響Oracle性能的重要問題,值得引起我們的重視。主要介紹oracle內存管理的內容。

關鍵詞:oracle;內存管理;內存分配;回收

中圖分類號:C931文獻標志碼:A文章編號:1673-291X(2010)33-0209-02

要了解內存管理,首先需要知道虛擬內存,更要知道CPU尋址。在CPU中,所有一切都是二進制表示的,32位CPU的尋址范圍是4G。但一臺機器的實際物理內存可能只有2G。這時,操作系統就提出了一個虛擬內存的概念,如果所尋址的數據實際上不在物理內存中,那就從虛擬內存中來獲取。這個虛擬內存可以是一個專門文件格式的磁盤分區,也可以是硬盤上的某個足夠大的文件。

一、Oracle內存管理

虛擬內存尋址的一個好處就是可以使進程使用很大的虛擬內存地址,而無須考慮實際的物理內存的大小。這使得進程內存可以基于使用需要,從邏輯上分為幾個不同段。這些段可能映射到不連續的虛擬內存地址上,以使內存能夠增加。

1.Oracle的內存段類型

段在操作系統上是對不同內存的使用目的和存放位置不同的區分。Oracle使用以下幾種段類型:(1)程序文本。文本段包括了程序本身的可執行的機器代碼。文本段一般標識為只讀,因此它能被多個進程共享來跑同一個程序。(2)數據堆。數據堆被用于進程在運行時,通過使用系統調用動態分配內存。(3)執行堆棧。當一個函數被調用時,它的參數和返回上下文被壓入一個執行堆棧中。返回上下文實際上是一組CPU注冊值,這些注冊值描述了進程在調用函數時那一刻的狀態。堆棧同時還保留了代碼塊的本地變量。(4)共享庫。共享庫是一個與位置無關的可執行代碼集,這個集合實現了許多程序特別是系統調用功能。共享庫段也是只讀的,它被所有的進程共享。(5)共享內存段。共享內存允許關聯的進程共同讀寫內存中的同樣數據。每個需要在共享內存段中尋址的進程都需要先將這段內存附到它自己的虛擬內存地址中去。

2.Oracle的內存管理模塊

Oracle中有兩個內存管理模塊。一個是內核服務內存管理模塊;一個是內核通用堆管理模塊。內存管理模塊是負責與操作系統進行接口以獲取用于Oracle的內存,同時還負責靜態內存的分配。而堆管理模塊則負責動態內存的管理。這也就是為什么SGA和PGA中堆又叫可變內存區了。共享池、庫緩存和程序全局區的堆都是由這個模塊管理的。

3.內存分配顆粒

在Oracle的內存分配和管理中,有一個重要的單位:顆粒(Granule)。顆粒是連續虛擬內存分配的單位。在實例啟動時,Oracle先分配顆粒條目,使所有顆粒能支持到最大系統全局區的空間大小。如果沒有設置PRE_PAGE_SGA和LOCK_SGA,在實例啟動時,每個組件請求它所需要的最少顆粒。可以通過ALERT SYSTEM命令來修改分配給各個組件的顆粒數。當想要給組件增加顆粒時,需要考慮實例中是否還有足夠的顆粒來分配給新增加的組件大小。ALERT SYSTEM指定的是新的組件大小,是內存的大小,不是顆粒數。而Oracle在分配內存時,會以顆粒為單位,如果新分配的大小不是顆粒大小的倍數,則會使用最接近且大于分配數的顆粒的倍數值。

4.系統全局區內存

當一個Oracle實例啟動后,主要的系統全局區的大小一開始基于初始化參數計算得出。這些大小可以通過show sga顯示。但是,在共享內存段分配之前,每個區的大小都只有大概一個內存頁大小。當需要時,這些區被分為一些子區,因此沒有一個子區會大于操作系統所限制的共享內存段的大小。對于可變區,有一個操作系統規定的最小子區大小,因此可變區的大小是最小子區大小的倍數。

如果可能,Oracle會為整個系統全局區分配一個單獨的共享內存段。然而,如果系統全局區大于操作系統限制的單個共享內存段的大小時,Oracle會使用最佳的算法來將所有子區組織在多個共享段中,并且不超過系統全局區最大大小的限制。

嚴重的頁入/頁出會導致很嚴重的系統性能問題。然而,大內存消耗導致的間斷的頁入/頁出是沒有影響的。大多數系統都有大量的非活動內存被頁出而沒有什么性能影響。但少量的頁出也是有問題的,因為這會導致系統全局區中那些中度活性的頁會經常頁出。大多數操作系統提供了一個讓Oracle鎖住系統全局區到物理內存中的機制以防止頁出。在某些操作系統中,oracle需要有特定的系統權限來使用這一特性。

5.進程內存

進程包括程序代碼、本地數據域和系統全局區。程序代碼的大小由基本內核、內核、聯機的網絡情況以及所使用的操作系統決定的。系統全局區大小是由Oracle初始化參數決定的。而這兩部分是共享。隨著用戶的增加,它們與單個Oracle服務進程的關系越來越小。它們是可以通過修改Oracle配置參數來改變的。

本地數據域中的堆棧是根據需要來增大、縮小的。然而,堆就不會釋放內存了。堆的主要組成部分是程序全局區。而影響程序全局區的主要因素是排序區大小。因此,非自動程序全局區內存管理模式下,可以通過控制排序區大小來控制程序全局區的大小。總的來說,可以有以下方法來限制進程內存大小:(1)降低相關的內核參數;(2)通過Oracle參數來降低系統全局區;(3)通過減小排序區大小來降低程序全局區。

二、Oracle的內存的分配與回收

Oracle中的共享內存區的分配都是以大塊(chunk)為最小單位的。大塊不是一個固定值,它是一個擴展段中一塊連續的內存。而Oracle的內存的增長是以擴展段為基礎的。

1.空閑內存分配和回收

空閑內存都是由空閑列表統一管理、分配的。每個空閑的大塊都會屬于也只屬于一個空閑列表。空閑列表上的大塊的大小范圍是由桶(bucket)來劃分的。我們也可以把桶視為一種索引,使Oracle在查找空閑塊時,先定位所需的空閑塊在哪個桶的范圍內,然后在相應的空閑列表中查找。

一次內存的分配過程如下:當一個進程需要一個內存的大塊時,它會先掃描目標空閑列表以查找最適合大小的大塊。如果找不到一個大小正好合適的大塊,則繼續掃描空閑列表中更大的大塊。如果找到的可用大塊比所需的大小大24字節或者更多,則這個大塊就會被分裂,剩余的空閑大塊又被加到空閑列表的合適位置。如果空閑列表中沒有一個大塊能滿足要求的大小,則會從非空的相鄰桶的空閑列表中取最小的大塊。如果所有空閑列表都是空的,就需要掃描LRU鏈表釋放最近最少使用的內存。當大塊空閑時,如果相鄰的大塊也是空閑的,它們可能會結合起來。

2.共享池的分配和回收

在共享池中,空閑列表掃描、管理和大塊分配的操作都是受到shared pool latch保護的。顯然,如果共享池含有大量的非常小的空閑大塊,則掃描空閑列表時間將很長,而shared pool latch則會要保持很久。這就是導致shared pool latch爭用的主要原因了。可以采取在實例啟動時制止住那些可能會斷斷續續使用的對象。

實際上,oracle實例啟動時,會保留大概一半的共享池,當有內存壓力時逐漸釋放它們。Oracle通過這種方法限制碎片的產生。Oracle的少量空襲內存和X$表即其他持久內存結構一起,隱含在共享池的主要持久內存大塊中。這些內存不在共享池的空閑列表中,因此能夠立即被分配。

3.SGA的分配

當實例啟動時,oracle在虛擬內存地址空間中創建一段連續的內存區,這個內存區的大小與系統全局區所有區相關參數有關。通過調用Win32 API接口VirtualAlloc,在接口函數的參數中指定MEM_RESERVE|MEM_COMMIT內存分配標識和PAGE_READWRITE保護標識,這部分內存始終會被保留和提交。這就保證所有線程都能訪問這塊內存,并且這塊內存區始終有物理存儲所支持。

當一個進程創建后,Windows NT會在進程的地址空間中創建一個堆,這個堆被稱為進程的默認堆。許多Win32 API調用接口和C運行調用接口都會使用這個默認堆。當需要時,進程能在虛擬內存地址空間中創建另外的命名堆。默認堆創建為1M大小的內存區,當執行分配或釋放這個堆的操作時,堆管理器提交或撤銷這個區。而訪問這個區是通過臨界區來串行訪問的,所以多個線程不能同時訪問這個區。

4.會話內存的分配

當監聽創建了一個用戶會話時,Oracle服務進程就通過調用Win32 API函數創建用戶連接所必須的內存結構,并且指定MEM_RESERVE|MEM_COMMIT標識,以保持和提交給線程私有的地址空間區域。用戶會話在分配程序全局區、用戶全局區和調用全局區時同時也遵循64K的最小粒度,來提交倍數于這個粒度值的內存頁。

三、結束語

Oracle內存的管理比較復雜,但對提高Oracle的性能來說是非常重要的,也是很多數據庫管理人員需要花費大量時間去研究的問題。

參考文獻:

[1]Fuyuncat.Oracle內存全面分析[EB/OL].www.HelloDBA.com.

[責任編輯 郭偉]

主站蜘蛛池模板: 国产激情影院| 亚洲欧美日韩视频一区| 精品综合久久久久久97超人| 亚洲成人精品| 四虎影院国产| 沈阳少妇高潮在线| 中文字幕2区| 国产呦精品一区二区三区下载 | 99re精彩视频| 久久香蕉国产线看观看精品蕉| 亚洲一区二区精品无码久久久| 国产网站免费| 91精品国产91久无码网站| 国产日韩精品欧美一区喷| 国产高颜值露脸在线观看| 免费看一级毛片波多结衣| 久久国语对白| 人妖无码第一页| 亚洲精品片911| 毛片视频网| 国产日本欧美亚洲精品视| 黄色福利在线| 91在线精品免费免费播放| 国产农村妇女精品一二区| 中文字幕亚洲乱码熟女1区2区| 全午夜免费一级毛片| 国产欧美日韩在线在线不卡视频| 欧美在线三级| 99无码中文字幕视频| 国产在线观看一区精品| 狠狠色丁香婷婷综合| 美美女高清毛片视频免费观看| 欧美一区二区啪啪| 在线国产91| 波多野结衣视频网站| 毛片a级毛片免费观看免下载| 欧美成a人片在线观看| 直接黄91麻豆网站| 欧美区一区| 欧美一级大片在线观看| 在线观看视频一区二区| 免费观看成人久久网免费观看| 欧美成人国产| 丁香六月激情综合| 9cao视频精品| 久久黄色视频影| 最新痴汉在线无码AV| 免费 国产 无码久久久| 国产v欧美v日韩v综合精品| 国产亚洲欧美日本一二三本道| 国产精品手机在线播放| 日本伊人色综合网| 无码区日韩专区免费系列| 99精品视频九九精品| 四虎成人在线视频| 亚洲αv毛片| 就去色综合| 欧美在线一级片| 99免费在线观看视频| 激情国产精品一区| 好吊妞欧美视频免费| 久久香蕉欧美精品| 国产成+人+综合+亚洲欧美| 手机精品福利在线观看| 欧美 亚洲 日韩 国产| 午夜影院a级片| 免费99精品国产自在现线| 40岁成熟女人牲交片免费| 亚洲水蜜桃久久综合网站| 亚洲国产天堂在线观看| 欧美性猛交一区二区三区| 91尤物国产尤物福利在线| 午夜视频免费一区二区在线看| 三级国产在线观看| 精品国产美女福到在线不卡f| lhav亚洲精品| 思思99思思久久最新精品| 国产99在线观看| 韩日免费小视频| 亚洲女人在线| 97在线免费| 白丝美女办公室高潮喷水视频|