2007年09月8日

9i RAC 筆記(2)


4、有關Shared Disk
 rac看來,每一個node的組成都跟標準的oracle一樣,都是由conrtrolfiledatafileredo logfile(不一定一定要使用)所組成的,只有在存放這些實体檔案地方要特別的處理。而oracle官方是建議使用ocfsraw來解決,但只要是符合cluster file system的第三方軟体都可以替代ocfsraw
  

 
5、software的架構
1cluster manager (CM):新的node要新增、刪除都是由cm來處理的,也負責查看每個該連接的node是否存活,並且提供一些global view以方便查看cluster的狀態。由Global Enqueue Service Monitor(LMON)背景程式去監看Global Cache Service(GCS)是否存活

2node monitor:cmnode monitor去了解每個node上的機器情況
    、提供一些modulesoracle可去管理node上的資源
    、發現跟追踨每個node的情況如event、是否正常運作中


3RAC使用IPC去傳送data blocks資料於每個node上的instance


6、Daemon and Instance Processes
1、Global Services Daemon(GSD):管理者或程式要由GSD把指令傳送給cluster manager(CM),如instance的startup或shutdown。但要注意,GSD不是一個oracle的背景程式,也代表了他並不會跟 著oracle的起動而起來,所以要獨立起動。

2、前面已有說過了RAC組成就跟標準的單一oracle相同,所以RAC也有標準的process,如process monitor(PMON)、log writer(LGWR)等等,當然了為了方便管理RAC, oracle自然就推出些process來協助:
   Global Cache Service Processes (LMSn), where n ranges from 0 to 9 depending on the amount of messaging traffic, control the flow of messages to remote instances and manage global data block access. LMSn processes also transmit block images between the buffer caches of different instances. This processing is part of the Cache Fusion feature.
  The Global Enqueue Service Monitor (LMON) monitors global enqueues and resources across the cluster and performs global enqueue recovery operations. Enqueues are shared memory structures that serialize row updates.
  The Global Enqueue Service Daemon (LMD) manages global enqueue and global resource access. Within each instance, the LMD process manages incoming remote resource requests.
  The Lock Process (LCK) manages non-Cache Fusion resource requests such as library and row cache requests.
  The Diagnosability Daemon (DIAG) captures diagnostic data about process failures within instances. The operation of this daemon is automated and it updates an alert log file to record the activity that it performs.

7、ap的好處理
1、connect-time failover for multiple listeners :享有特定情況之下session不會發生中斷
2、client load balancing and connection load balancing for multiple listeners:自動依機器的負戴調整可接受的工作數
3、configuring client load and connection load balancing :在tnsnames.ora裏設定LOAD_BALANCE=(YES/NO/TRUE)就可開起或關畢

8、RAC資源同步
1、rac使用Global Resource Directory記錄多少資源被使用跟多少個cluster database,而這些資訊是由Global Cache Service(GCS)和Global Enqueue Service(GES)來管理的,他們是使用System Global Area(SGA)的記憶体空間。而處理的項目有row、block的存取、空間管理、system change number(SCN)、data dictionary cache跟library cache這些項目。

2、Global Cache Service Processes(LMSu):負責分配、準備、傳送被要求的block image傳到別的cluster node上的instance上面。並且同步CGS跟更新GES的裏的記錄。

3、Global Cache Service(GCS):負責處理每個block的image的版本控制,跟當發生錯誤時的恢復

4、node上的 instance 讀取block的狀態區分為分為3類:主要作用於保護block被多個node同時處理不會發生損壞的機制
    一. Null: (identifier:N) 預設值,一般模式,可被讀、寫
    二. Shared: (identifier:S) 只能讀的模式
    三. Exclusive: (identifier:X) 只能寫的模式

5、Resource Roles:在block被讀、寫之間的變化
    一.當block第一次要求讀取時, 先被load到本機的instance cache,然後再傳送副本到每個node的instance cache,這時block的管理被稱為locally managed。由GCS給於這個block標記local role。
    二.當這個block要被修改,因為global cache中已有這個資料了,所以這時的block管理被稱為global managed,這時由GCS給於這個block標記global role。
    三.實際上的運作原理就跟單機oracle的運作原理相同,反正第一次需要讀的block都是load到cache中,只不過rac中還有一個 global cache而已,而global cache是讓全体rac中的node來取用。

6、Global Cache Service Operations: 假設情況是在於如a台上面的block被寫入後,未commit,而a台同一個session剛好有讀到這個被修改的block時,可不必經由GCS去讀取這個 block,因為a台上面的instance已有資訊可以知道這個block的情況,就不必再去問GCS,然後再連回a台上面的instance cache讀出資料。而達到結省封包往反的時間,也可省下處理的資源。

7、RAC的資料的lock是block level的,並且達到每個時間點只有一個node可修改block是由GCS來控制,而達到資料同步的關鍵核心。

8、SCN: RAC中oracle記錄每個block的變化後的版本的號碼,被稱為system change number(SCN)。在標準的單一oracle中,scn值是由System Global Area(SGA)來負責增加號碼的;但在RAC中就不能由每個node上面的SGA來處理,因為RAC的重點就是datafile是共用的,所以這時的 scn值就由GCS來負責增加,以避免block的版本有不一致的問題。這時的scn可由lamport scn generation scheme來產生(將統一把scn值同時送達每個node上面 )、由機器上的時間計數器產生、獨立一台專門產生scn值的機器。

9、Global Cache Service
1、RAC整個運作的效能點是在於cache fusion管理跟縮短disk writes的時間而進而縮短每個的node可再次寫入相同block的等待時間

2、多個node同時間讀取相同的block,這時rac會自動採用非同步的方式讀取資料處理。也就是誰的速度快就可先讀到資料。

3、多個node時間讀、寫相同的block,這時rac會決定先處理讀還是先寫。

4、多個node同時寫入相同的block,Global Cache Service(GCS)取得每次node產生的block副本,而每個block的副本是由past image(PI)來記錄的,當發生錯誤時,將由PI進行還原。而每個node上的cache資料是由IPC來進行同步,而減少 I/O 的動作。

5、oracle是通過一個(就相當於一個全体變數一樣) lock element list來維護buffer header的。當一個 block讀入buffer中,就有一個 lock element 用來保護相應的 buffer header。假設A,B兩個節點,某個block在A節點上被修改過了,即是dirty buffer。此時如果B節點上需要讀取或修改這個block,它會通過這個block對應的lock element發現這個block在A節點上有dirty buffer,於是請求A節點將該dirty buffer送到B節點。

6、不是每個節點都維護所有資源的,而是有一定比列分配的, 大概是根據dba計算hash值,然後通過對照表得出這個 block的master node。因為有這個機制,所以rac在 instance退出和加入的情況下不需要把資源全部重新分配而縮短停止服務的時間,而ops(In Oracle 8i and below, RAC was called Parallel Server (OPS))是需要全部重新分配資源的。如果instance已經擁有操作block所需的 lock,則不需要通過gcs,否則就要計算master node,並向該node申請lock。所以應該是每個節點都有自己擁有的block的lock信息,同時又維護了自己master的資源的信息,比如這 些資源當前被哪個instance擁有,以什麼方式擁有等等。

7、oracle不需要維護某個block是否是current buffer。這裡面所有的其實都是通過lock mode的變化來達到目的。只需進行鎖的升級與降級即可。當需要獲取最新的block時,oracle是按以下順序來獲取的:
1. Master instance for lock.
2. S holding the last past image.
3. Shared local.
4. Most recently granted S。

10、Real Application Clusters Recovery and Cache Fusion
1、 當recovery的時間內,GES第一步先重新分配GES鎖定(GES enqyeyes)、第二步重新分配GCS的資源。這在段時間內全部的GCS的請求連線跟寫入的動作是暫時停止的。除了已在運行中的session裏的動 作oracle將盡可能的讓他執行完畢

2、重新配置GES的鎖定記錄,同時間執行log的讀取跟復制GCS的資源跟檢查block是否需要被recover(這是cache layer recovers and each block identified)

3、在recovery完全結束前,這時rac已可運作了,oracle將會於背景把沒有必需立即性要recovery完成的block接著完成recovery

4、當全部的資源跟鎖定請求已可被接受時,跟Global Resource Directory解除鎖定後,跟任何資料block是可以被存取並且不需要做recovery了。

5、Oracle解除recovery的請求

6、全部的rac裏的block都是有效的,已結束全部的動作。

7、整個rac的資料並不是全記錄在其中一個node上面,而是分配一定的比例資料在每個node上面,因為這樣子設計,所以可帶來加快recover的時間

11、resource coordination by the Global Enqueue Service
1、GES管理non-cache fusion intrainstance resource operation and tracks the status of all Oracle enqueuing mechanisms。跟鎖定、開放相關的資源管理。

2、Global enqueue concurrency control,重要的有
    一.Data dictionary access layer
    二.Library Cache Layer
    三.Transaction Management Code Layer
    四.每個階層都有自已的通訊協定、架構,他們並不會相互影響。他們是使用GES API 去取得、轉換、釋放資源
    五.Transaction layer 他取得lock的時間是非常短。例如當資料commit的那個時間會取得TX lock跟釋放 lock
    六.每一個RAC database instance 都有一個dictionary cache或者row cache。他們的架構是跟單一oracle相同,只不過rac的環境之下會由GES進行同步(新增、刪除node都會進行),當運行時會發生 dictionary cache lock
    七.當執行SQL、DML、DDL、PL/SQL所讀取到的object,如view、table、package、procedure、index,在進行 檢驗,如sql是否合法、table是否存在,是否有權限可存取,這時將會產生library cache lock

12、Real Application Clusters Storage Considerations
1、在每個node上面最少要有2個redo log file。因為rac中是多個instance讀、寫相同的實体檔案,oracle為了避免爭搶redo log file產生效能上的問題,所以oracle才會在每個instance上面需要建立私有的redo log file。

2、THREAD參數:是用於rac中的,是定義 instance使用那個redo thread。當你建立database時,oracle會最少enable thread 1為公開的thread(每個instance都能讀取他),當然了也可使用alter database 配合add  logfile thread 、 enable thread來依情況增加。而可增加的上限為maxinstances值。假如thread被設定0的話,那這個instance可使用任何有效並且為公 開的redo log file。
在v$log中你將會看到類似下面
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1          1       6313   52428800          1 NO  ACTIVE                 3193855 14-SEP-04
         2          1       6312   52428800          1 NO  INACTIVE               3191691 14-SEP-04
         5          1       6314   52428800          1 NO  CURRENT                3196041 14-SEP-04
         3          2         17   10485760          1 NO  CURRENT                3016310 14-SEP-04
         4          2         16   10485760          1 NO  INACTIVE               1619198 13-SEP-04
而1跟2就代表第一個instance跟第二個instance

3、每個node都要有自已的undo tablespace(預設值是automatic manager),他的功用跟單一oracle相同,是用於未commit之前資料的一致性、rollback跟recover database用。

4、全部的datafile都要能被被每個node上的instance存取的到

5、可以使用alter system check datafiles去驗證datafile是否有問題

6、Datafile是否能存取跟instance是否正常運作是二回事,也就是說單一datafile損壞並不會讓instance當機(除非是系統檔), 然後其中一個node上的instance當機,並不會讓rac整個停止運作

7、Pfile/spfile:可讓全部的instance來讀取單一檔案(spfile),使用alter system set xxxx=’xxx’ scope=spfile sid=rac1來設定那個node上面的instance的起始參數是什麼,但這個檔案就要放在能讓大家都讀取到的地方;也可在每個node上使用 pfile,各自起動對應的pfile檔也可以。有點要注意的,就是使用DBCA建置 RAC後,所產生的預設值不一定是最好的,所以最好要再修改成符合自已環境的值。

8、RAC能同時讓不同的node同時insert相同的table,主要是使用ASM(automatic segment-space manager)

RAC無法改善i/o上的問題,所以如i/o的本身效能就不好的話,採用RAC有可能會讓效能更差。

Posted by my_work at 樂多Roodo! │10:37 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/4104065