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.

[責任編輯 郭偉]

主站蜘蛛池模板: 精品中文字幕一区在线| 亚洲天堂自拍| 55夜色66夜色国产精品视频| 欧美成人午夜视频免看| 亚洲欧美一级一级a| 女人av社区男人的天堂| 免费看一级毛片波多结衣| 亚洲成人播放| 亚洲第一福利视频导航| 亚洲成肉网| 天堂成人在线| 情侣午夜国产在线一区无码| 日韩av在线直播| 人妻丰满熟妇av五码区| 国产网站在线看| 久久99国产综合精品女同| 中国一级特黄视频| 久久亚洲天堂| 综合色婷婷| 久久久久国色AV免费观看性色| 高清乱码精品福利在线视频| 免费在线看黄网址| 乱色熟女综合一区二区| 亚洲免费三区| 三上悠亚在线精品二区| 亚洲国产欧美中日韩成人综合视频| 99久久国产精品无码| 狠狠色婷婷丁香综合久久韩国| 国模极品一区二区三区| 久久精品丝袜| 日本91在线| 自拍偷拍一区| 国产成人综合久久精品尤物| 国产中文一区a级毛片视频| 99精品国产高清一区二区| 99久久精品无码专区免费| 丝袜久久剧情精品国产| 国产精品太粉嫩高中在线观看| 欧美日本在线| 67194在线午夜亚洲| 亚洲人成网站日本片| 亚洲 欧美 日韩综合一区| 久久精品欧美一区二区| 香蕉国产精品视频| 欧美精品成人一区二区在线观看| 日韩av无码DVD| 国产精品xxx| 三级视频中文字幕| 无码免费试看| 性视频一区| 色婷婷电影网| 久草热视频在线| 日韩av无码精品专区| 国产永久无码观看在线| 久久久久久尹人网香蕉| 国产哺乳奶水91在线播放| 中文纯内无码H| 92午夜福利影院一区二区三区| 丁香婷婷在线视频| 91成人免费观看| 国产资源免费观看| 99久久精品免费观看国产| 亚洲免费三区| 成人精品免费视频| 成人国内精品久久久久影院| 在线网站18禁| 天天干伊人| 国产99在线观看| 无码人中文字幕| 就去吻亚洲精品国产欧美| 久久人人97超碰人人澡爱香蕉| 九色视频最新网址 | 色婷婷在线影院| 国内自拍久第一页| 九九热免费在线视频| 亚洲日产2021三区在线| 国产美女一级毛片| 无码AV动漫| 老司机aⅴ在线精品导航| 色妞永久免费视频| 欧美日在线观看| 亚洲最大综合网|