1. 程式人生 > >oracle最容易忽視的兩個程序SMON好ARCH

oracle最容易忽視的兩個程序SMON好ARCH

文章出自:也找不到源地址在哪了,總之感謝作者的分享

Oracle中最易忽視的兩個重要程序

  在Oracle資料庫中有兩個程序非常的渺小,但是其作用卻是非常的巨大。由於其比較小而往往被資料庫管理員所忽視。筆者這次就給大家提醒提醒,不要忽視了這兩個程序的作用。如果利用的好的話,會減少系統管理員不少的工作。

  一、系統監視程序SMON

  這個程序對於Oracle資料庫來說,可以利用一句話來概括,即人小鬼大。其負責的內容並不是很多,但是對於資料的安全與資料庫的效能卻有很關鍵的作用。如隨著表空間中的資料不斷的建立、刪除、更新等等,在表空間中難免會產生碎片。由於這些碎片的存在,資料庫的效能會逐漸的降低。而現在系統監視 程序SMON的作用,就可以解決這些碎片。SMON程序會將各個表空間的空閒碎片合併在一起,讓資料庫系統更加容易分配。從而提高資料庫的效能。另外,在資料庫執行的過程中,會因為斷電或者其他的原因而發生故障。此時由於資料快取記憶體中的髒快取塊還沒有來得及寫入到資料檔案中,從而導致資料的丟失。在資料 庫啟動的時候,系統監視程序SMON會在下一次啟動例程的時候,自動讀取重做日誌檔案並對資料庫進行恢復。也就是說,進行將已提交的事物寫入資料檔案(已 經寫入到日誌檔案中而沒有寫入到資料檔案中的資料)、回退未提交的事務操作。可見,SMON程序在Oracle資料庫中是一個比較小但是卻非常重要的角 色。

  在管理這個程序的時候,筆者認為主要需要注意兩個問題。一是其啟動的時機。一般情況下,例程重新啟動的時候,會啟動這個系統監視程序。然後在這個例程執行期間,這個程序也會被系統定期的喚醒,然後其會檢查是否有工作需要其完成。最重要的是,在有需要的時候,資料庫管理員可以通過其他程序來啟動這 個SMON系統系統監視程序,來完成一些特定的工作。

  第二需要注意表空間配置對這個程序的影響。在表空間管理中,有一個引數叫做PCTINCREASE。如果將這個引數設定為0的話,則這個 SMON系統監視程序對於這個表空間的作用就要打折扣了。在設定為0的情況下,SMON程序就不會對這個表空間中的空閒碎片進行整理、合併操作。也就是說,需要資料庫管理員通過資料的匯出匯入等手工操作,才能夠解決表空間的碎片問題。顯然這會增加資料庫管理員的工作量。為此筆者建立,除非有特別的需要, 不要將這個引數設定為0。讓SMON程序自動對錶空間中的碎片進行管理,自動合併表空間中的空閒碎片。不過如果某個表空間這個引數設定為0的話,不會影響 到系統監視程序的其他用途,如不會影響到在例程非正常關閉時對資料的恢復操作。即即使這個引數設定為0 ,在有需要的時候其仍然可以利用重做日誌檔案中的記錄來恢復相關的資料。

  二、歸檔程序ARCH

  在重做日誌檔案管理中有歸檔與非歸檔兩種模式。在日誌進行切換時,如果不對原先的日誌檔案進行歸檔,而直接覆蓋的話,就叫做非歸檔模式。相反,在寫入下一個日誌檔案的時候,會先對目標日誌檔案進行歸檔,這就叫做歸檔模式。歸檔程序ARCH就是負責在重做日誌檔案切換後將已經寫滿的重做日誌檔案複製到歸檔日誌檔案中,以防止迴圈寫入重做日誌檔案時將其覆蓋。所以說,只有資料庫執行在歸檔模式時,這個ARCH程序才會被啟動。在任何一中操作模式下,重做日誌檔案都會被迴圈使用。所以當LGWR程序在進行日誌切換,需要用到下一個日誌檔案時,則資料庫會被暫時的掛起,進行目標日誌檔案的歸檔工作。直到這個目標重做日誌檔案歸檔完畢後,資料庫才會恢復正常。所以說,歸檔日誌的操作,有時候也會影響資料庫的效能,特別是當需要進行頻繁的大批量資料更改的時 候。

  那麼有什麼方法可以提高歸檔作業的效率呢?筆者如下一些建議可供資料庫管理員參考。

  一是可以增加歸檔程序的個數。在預設情況下,一個例程只會啟動一個歸檔程序ARCH。當ARCH程序正在歸檔一個重做日誌檔案時,任何其他的進 程都不能夠訪問這個重做日誌檔案。如果在Oracle資料庫中,可以根據需要啟動多個歸檔程序ARCH。在Oracle資料庫中,啟動多個歸檔程序時分為 手工與自動兩個方式。為了提高重做日誌檔案歸檔的速度,當用戶程序發生比較長時間的等待時, LGWR程序會根據時機情況來自動啟動多個歸檔程序。在Oracle資料庫中其最多可以啟動十個歸檔程序。另外如果資料庫管理員在部署資料庫的時候,估計日誌歸檔作業會影響到資料庫的效能,就可以手工來啟動多個歸檔程序。這是通過初始化引數LOG_ARCHIVE_MAX_PROCESSES確定的。可以將這個引數設定為大於1 的數值(注意不能夠超過9個歸檔程序)。如此的話,資料庫在建立例程的時候就會啟動多個歸檔程序。不過筆者還是傾向於讓資料庫系統來自動管理這個程序。資料庫管理員最好不要干涉。另外需要注意,這個ARCH歸檔程序個數與DBWR程序個數的區別。預設情況下,DBWR程序也只有一個。為了提高資料庫的性 能,可以根據情況增加這個DBWR程序的個數。不過其增加時受到CPU數量的限制,即一個DBWR程序需要使用一個獨立的CPU。如果想啟動三個DBWR 程序的話,就必須採用3個CPU處理器。而對於ARCH歸檔程序來說,則沒有這個限制。即使只有一個CPU處理器,其也可以啟動三個甚至更多的ARCH進 程。

  二是增加重做日誌檔案來延長歸檔日誌程序啟動的時間間隔。通常情況下,只有當前一個重做日誌檔案寫滿、需要進行日誌切換的時候,才會觸發這個 ARCH歸檔日誌程序。所以如果重做檔案比較大,其日誌切換的時間間隔就會延長。則ARCH歸檔日誌程序的啟動時間間隔業會比較長。所以說,通過調整重做日誌檔案的大小,可以延長歸檔程序啟動的時間間隔。從而降低因為歸檔程序啟動而對資料庫效能造成的負面影響。

  三是在資料庫初始化的過程中,可能需要匯入大量的資料。此時會對資料庫中的資料進行大量的插入、刪除、更新等操作,從而導致重做日誌檔案切換頻繁。這就會導致資料庫需要頻繁啟動ARCH歸檔程序。資料庫大量的更新操作、重做日誌檔案(LGWR程序)、歸檔重做日誌檔案(ARCH)程序之間就形成了一條無形的鏈條。由於“蝴蝶效應”,從而降低了資料庫的效能。為此在必要的時候,需要砍斷這跟鏈條,以提高資料庫的效能。如可以在資料大量匯入、更新、刪除的時候,不往日誌檔案中插入記錄,或者臨時增加重做日誌檔案的空間。如此的話,在進行這些操作時就可以避免進行重做日誌切換或者延長重做日誌切換的時 間間隔。從而ARCH歸檔日誌程序也可以避免或者延長其時間間隔,從而提高資料庫的效能。當資料庫初始化完成之後,再將其恢復過來。這些臨時性的調整雖然比較麻煩,但是卻可以提高資料庫的效能。為此筆者認為這是值得的。

  可見以上兩個程序在Oracle資料庫中其作用雖然有限,但是卻跟資料庫的效能息息相關。在日常操作中,靈活使用這個兩個程序的特性,就可以提高某些操作的速度。這比通過優化SQL語句等方法來提高資料庫效能要簡單的多。為此筆者建議各位資料庫管理員,這兩個程序雖然小,但是其作用不可忽視。資料庫管理員要對這兩個程序引起重視。


相關推薦

oracle容易忽視程序SMONARCH

文章出自:也找不到源地址在哪了,總之感謝作者的分享 Oracle中最易忽視的兩個重要程序   在Oracle資料庫中有兩個程序非常的渺小,但是其作用卻是非常的巨大。由於其比較小而往往被資料庫管理員所忽視。筆者這次就給大家提醒提醒,不要忽視了這兩個程序的作用。如果利用的好

linux的crontab裡面,保證多執行一個程序/程序/多程序的解決方法

在linux的crontab裡面,保證最多執行一個程序/兩個程序/多個程序 這個多謝了老大的推薦。我解決了flock來解決crontab裡面,即使系統卡住,也最多執行兩個程序的問題。 flock 會去判斷根據一個鎖檔案去判斷程序有沒有在執行。如果在執行,後面的程序就得等待。 fl

Oracle忽視的重要程序

Oracle資料庫中的某程序因比較小而往往被資料庫管理員所忽視。筆者這次就給大家提醒提醒,不要忽視了這兩個程序的作用。如果利用的好的話,會減少系統管理員不少的工作。 歸檔程序ARCH 在重做日誌檔案管理中有歸檔與非歸檔兩種模式。在日誌進行切換時,如果不對原先的日誌檔案進行歸

今天剛學的c++,程序

日常#include<iostream>using namespace std;int main(){int a,b,sum;cin>>a>>b;sum=a+b;cout<<"a+b="<<sum<<endl;retu

無序數組中找出大的(K)數

數組;查找;最大;K個**給你一個整型數組,我想找出來最大的兩個數,能幫我寫一個算法嗎? **在上一遍我們已經解讀過這道題目了,包括我們能想到的問題。這裏我們按照解決算法題的一般步驟再來一起分析一下這道題: 一、確保我們理解了問題,並且嘗試一個例子,確認理解無誤。 那現在我們澄清一下問題,我們需要從這樣的數

ython實現程序間的通訊有Queue,Pipe,Value+Array等,其中Queue實現多程序間的通訊,而Pipe實現程序間通訊,而Value+Array使用得是共享記憶體對映檔案的方式,所以速度比較快

1.Queue的使用 from multiprocessing import Queue,Process import os,time,random #新增資料函式 def proc_write(queue,urls): print("程序(%s)正在寫入..."%(os.getpid()))

oracle中常用的偽列

偽列   偽列就行oracle中的一個列表,但世界上它並未儲存在表中,偽列可以被查詢但是不能被插入或者更改. rowID   該偽列返回該行地址,可以使用rowID值來定位表中的一行.通常rowID值可以標識資料庫中的一行 rowID偽列有以下重用用途 能以最快的方式訪問表中的一行 能顯示

資料結構演算法題/求陣列中大小接近的元素的差

考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。 可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343 演算法: MinDistance(A[0..n-1])

linux ps sort命令檢視佔用CPU或記憶體大的幾程序

ps aux | sort -k 3 -rn |head  檢視系統內佔用cpu最大的幾個程序 ps aux | sort -k 4 -rn |head  檢視系統內佔用記憶體最大的幾個程序     sort 升序排列 引數:

海外直播核心的玩法及如何突圍

移動網際網路出海,從最早的工具、到後來的內容,再到現在的平臺期,經歷了幾個發展階段,而不同時期都有某一個或幾個細分領域享受到風口紅利。 近兩年,在海外網路基礎設施高速發展的背景及遊戲出海的大趨勢下,直播出海也呈井噴式發展。白鯨出海在 2018 全球流量大會期間採訪了為 LiveMe、Up

LInux系統中使用訊號量對程序中訪問同一資源互斥注意事項

對於同一個共享資源的訪問,在Linux系統應用程式設計中經常遇到,通過訊號量來保護共享資源,實現互斥非常重要,對於實現互斥一般有如下幾個步驟: (1):建立訊號量:呼叫 int semget(key_t key,int num,in

Linux查詢記憶體或CPU佔用多的幾程序

一、可以使用以下命令查使用記憶體最多的10個程序 方法1: ps -aux | sort -k4nr | head -10 如果是最高的三個,10改為3即可 命令解釋:  1. ps:引數a指代all——所有的程序,u指代userid——執行該程序的使用者id

查詢組成一個偶數接近的素數/華為機試(C/C++)

題目描述 任意一個偶數(大於2)都可以由2個素陣列成,組成偶數的2個素數有很多種情況,本題目要求輸出組成指定偶數的兩個素數差值最小的素數對 輸入描述: 輸入一個偶數 輸出描述: 輸出兩個素數

求一串數字中——和大的連續子序列; 求一串數字差值的絕對值小的數字

問題描述 : 從一組數字中,找出其所有連續子序列中,和數(子序列所有數字求和)最大的連續子序列: 如:陣列 int A[ ] = {-4 , 3 , 5 , -1};找出某幾個連續的子序列其和最大。比如A0+A1 = -1 。A1+A2+A3+A4 = 3。而A2+A3=8;則A2 A3組成的陣

軟體工程研究領域頂級的期刊

                       目前,Sunny有很大一部分時間和精力放在對軟體工程領域的研究上,,我將陸續把一些相關的學術期刊列出來,供有需要的朋友參考(大家可以瞭解下軟體工程在研究些啥,或許對工作會有所幫助,畢竟很多研究還是為應用服務的,)。        本文將向大家介紹軟體工程研究領域最

Spark專案練習(計算使用者停留時間長的小區)

專案說明:附件為要計算資料的demo。點選開啟連結 其中bs_log資料夾資料格式為(手機號,時間戳,基站ID,連線狀態(“1”為連線,“0”為斷開)) lac_info.txt 檔案資料格式為(基站ID,經度,緯度,訊號輻射型別) 程式思路: 1, 先根據"手機號,基站I

使用共享記憶體實現一個程序寫檔案,程序讀檔案

主要功能:讀取任意的檔案,大小不限(不超過共享記憶體設定的大小,一般為8k,但可手動重新設定,這已經很大了。),執行後兩個或多個讀程序可同時讀取該檔案並在終端列印。 要實現該功能,首先你得了解共享記憶體的搭建,有四個函式,分別為shmget,shmat,shmdt,shmc

[LeetCode] Maximum XOR of Two Numbers in an Array 陣列中異或值大的數字

Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you

[LeetCode] Longest Substring with At Most Two Distinct Characters 多有不同字元的長子串

Given a string S, find the length of the longest substring T that contains at most two distinct characters.For example,Given S = “eceba”,T is “ece” which