RAC student guide 的中文筆記(zt)

tolywang發表於2005-01-26

Rac student guide 

一.體系結構

Cluser 的硬體結構
Nodes, interconnect,共享檔案系統


Nodes
一個節點是一個伺服器可以是smp也可以是numa的
在一個cluser中,需要兩個或更多的節點.

每個節點支援rac資料庫的一個例項.

Interconnect
透過標準網路協議例如 tcp/IP
如果使用gbit儀態網,vender-specific 提高是系統會有最好的效果.

共享檔案系統

通常情況下, 裸裝置在unix,邏輯驅動器在windows上
各個節點同時對共享檔案系統進行訪問

Cluser software
為了各個節點之間的通訊的軟體.不同的作業系統不同的軟體,unix 由產商提高這個軟體,
如果是windows,由oracle提供

Cluser manager
包括gv檢視,管理cluster的資訊,控制cluser的成員.
節點monitor組建監控node的狀態
OSD cluserware: 控制interconnect的資訊;為rac傳輸資訊和資料庫

Rac 的元件:
一個rac資料庫包括 資料庫檔案和一個到多個例項

磁碟訪問
控制檔案,資料檔案,online redo log,quorum disk on some os,配置資料,spfile,配置資訊,伺服器引數檔案

gsd程式
這個用來coordinate 其它的工具來管理rac 資料庫和例項
一個gsd程式支援一個節點上的所有的資料庫
gsd不需要配置

lmno: global enqueue service monitor
監控cluser的global enqueues 和資源
執行恢復操作
lmd: global enqueue service daemon
管理對global enqueues和資源的訪問
處理對其它例項的資源請求
LMS: global cache service processes
管理在cluster中對data block的訪問
傳輸block的images在不同的例項的buffercache中 (cache fusion)

LCK程式
輔助lms,管理例項的資源和cross-instance的call,這個call與協調訪問字典和row cache物件有關係

診斷程式:



二.安裝和轉換

安裝

1. 使用interconnect連線好cluser
2. 安裝和配置osd cluserware
3. 確保所有的節點都可以訪問shared disk
4. 建立需要的檔案系統或分割槽

gsd

gsd配置檔案必須identified為了完成一個rac的安裝
當用dbca建立資料庫的時候,gsd必須在執行
如果是手工建庫或者是從8i升級,那麼必須在每個節點手工的啟動gsd.

Gsd配置檔案

Srvconfig –init 初試化gsd配置檔案


把一個single 例項轉變成rac
1. 配置硬體
2. 評估表空間和log檔案
3. 建立共享檔案系統或裸裝置
4. 從舊的資料庫中取資料出來
5. 安裝基於os的cluster 軟體
6. 安裝rac選項
7. 建立資料庫
8. 把資料從舊資料庫裝入到新資料庫
9. 調整資料庫
10. 啟動資料庫


配置硬體:
1. 安裝和測試cluster的interconnect
2. 確保每個節點都可以訪問共享磁碟

評估表空間和log檔案的需求

建立共享檔案系統和裸裝置
1. 控制檔案的copy,資料檔案,log member的一個成員
2. spfile

從舊的資料庫中取data
1. rman
2. exp

安裝osd和rac

建立db

把資料裝入到新的db中

調整引數

啟動資料庫



三.管理和配置工具


GSD管理
啟動gsd

server control 工具
srvctl
管理rac環境
管理cluser的資料庫配置資訊
提供cluser的資料庫管理命令
需要gsd在執行

srvctl命令的用法
可以新增和刪除cluster db,
可以新增和刪除一個rac中的例項
可以rename一個例項
可以移動一個例項
可以為一個rac set和unset 環境
可以為一個例項 set和unset環境


rac的引數檔案

可以繼續使用client-side的初始化引數檔案
可以使用一個spfile為所有的例項
這個spfile在共享檔案系統上.
可以使用alter system命令改變所有的例項的引數.

Sid=’*’
* 表示所有的例項




四.可擴充套件性和cache fusion




可擴充套件性的級別
硬體
os
db
app

oracle net srvice的負債均衡

客戶端的負責均衡

connection的負債均衡

自適應的並行查詢

Cache Fusion
提供傳輸的擴充套件性
在例項間傳輸block 的image
跟蹤資源的當前位置和狀態
每個例項的sga的目錄結構中儲存有資源資訊

cache fusion 的模型
Global resoure directory
由global cache service 來管理
記錄
資源的模式
資源的角色
block在例項中的狀態
在各個活動的節點發布資源的master
重新發布master在有必要的時候,例如例項的啟動和關閉


global cache service 的資源模式
三種
null (預設的)
share(s) (查詢)
exclusive(x) (可以改變block的內容,其它的例項就是null mode)


資源的角色

local 第一次請求資源的初試模式;只有一個例項可以有這個block 的dirty copy

global
在一個block在多於一個例項中變dirty了. Local 就變成了global
block只能由slobal cache service寫到磁碟中






Cache fusion block 的transfer

例如有 abcd四個節點.

global cache service : gcs

1.
Read with no transfer

如果c節點需要向共享磁碟檔案上讀一個block,
那麼它向global cache service 傳送請求,
這個時候請求被定向到節點d,d是這個block的master (每個資源都有master)


gcs 把資源授權為 share mode 和local role,在目錄中記錄下了他的狀態(目錄在節點d),
然後通知c,c 把這個資源從null  share

c開始i/o,現在c有了這個block 以s模式 (從磁碟檔案讀)

2.
read to write transfer

b也要這個block,並且不僅是讀,而且還要改變它的內容.
B向d (這個block的mater)gcs發出請求,
Gcs向c發出請求,要求c把這個block 給b
C 把block 給b,
B收到了,告訴gcs,,現在b可以修改這個block了


3.
Write to write transfer

A向d節點的gcs發出請求,
Gcs告訴b節點放心他的x 鎖,並且把當前的image傳到a,
如果這個請求沒有完成,就會方到gcs的佇列裡面了

b把這個block傳到a,這個時候,要寫log,強制log flush,把模式變成n
傳送到a,並且告訴它這這個exclusive的資源可以用了
a收到了這個block的image,會通知gcs 並且告訴它block的status是x

這個時候,b不能對這個block做操作,雖然在它的buffer cache中.它還有這個block的copy.

4.
Write to read transfer

C要讀 這個block,先向d (master)發出請求
Gcs要求a把它傳輸到c,
A接受到請求,完成它的工作,這可能會在a 寫log 和log flush在傳送這個block之前.
A會把它的x 鎖降低到s (share)模式,
C把從a收到的block 的scn取出來,建設成一個資源assumption 資訊為gcs,更新global resource directory


可以關閉Cache fusion,設定引數gc_files_to_locks
這樣就向8i 的ops一樣,別的節點要訪問資料快,必須等待別的節點提交,寫回資料檔案中.
Cache fusion,就是從別的例項中讀buffer


五.high availablility considerations

高可用性的特徵

rac是oracle首要的高可用性解決方案.它有下面的能力:
不需要干預就可以發現和防止網路問題
以最小的破壞從failure中新配置和恢復
把work從一個failed的節點發布到另外一個節點


cache resoure 的rematering
cache resoure 在一個節點上不需要繼續master
dynamic remastering能把它移動到不同的節點
gcs和ges使用動態的remastering :
在一個新例項加入到這個active set之後重新分發資源
在一個例項離開這個active set之後重新分發資源



LMON和cluster 的重新組織

Lmon 做以下事情:
和cluster manger 聯絡為例項提供當前的cluster 的成員
使用基於磁碟的心跳和投票程式來驗證rac例項配置的健康
每個成員的lmon程式給出它對其它member 可用信的 impression
當年的status被maintain在disk上

初試化恢復如果一個節點或例項不能傳送或確定 心跳message

範例
每個例項有個表
有id,以及相應的id 資源的屬性.
如果某個節點fails,相應的重新remaster.


例項的過渡和恢復
如果一個例項crash:
資源資訊(這個例項所master的)就會丟失
在重新配置的時候丟失的資源資訊必須重新建立
需要對這個failed例項恢復
如果例項正常關閉,不需要恢復


高可用性設計上的考慮
為change mangerment建立和測試policy
配置冗餘硬體
提供primary/secondary 或空閒節點
設定相應的例項初始化引數
使用其它特性和選項例如
oracle 9i data guard
real application cluster gurad
transparent application failover

Change management

計劃一些changes來減小down的時間和服務的中斷
也許是夜間或週末工作
避免關鍵的業務期間(例如月末年末)
考慮有計劃的changes
每次一個功能
每次一個節點
include time and resource to back out changes if necessary.


配置冗餘硬體
節點的冗餘的cluster的內部特性
interconnect的冗餘是推薦的選項
disk的映象防止一個disk的單點failure
推薦為所有的資料庫檔案做mirror
當時候cluster檔案的時候推薦對軟體做mirror

primary/secondary 例項

primary 例項: first one to start
secondary 例項:second one to start,if other instance fails can become primary


空閒節點

高可用性的引數
active_instance_count =1 :enable or disable a primary and secondary intance configuration
dml_locks =0 阻止ddl操作

fast_start_mttr_targer
gc_files_to_locks

recovery_parallelism
service_names

oracle 9i data guard


Log Transport Services: Standby db 的setup

建立standby redo log
定義歸檔目標在恢復例項的本地
在接受例項上,定義歸檔目標
在所有的standby db的例項上啟動arcn程式
在恢復例項上啟動mrp(managed recovery process)

Primary db 的setup


指示lgwr程式進行歸檔操作在所有的例項上
指定standby db作為接受節點

RAC guard
Oracle提供的產品.

六.TRANSPARENT APPLICATION FAILOVER


監聽器

多個監聽器可以:
client 的負載均衡
連線的時候的failover
連線的負載均衡
transparent application failover (TAF)

網路命名方法
names解析服務(必須是tcp/ip 1521埠)
本來命名(使用tnsnames.ora)
目錄命名使用中央化的ldap相容的目錄伺服器
JDBC driver
Oci 驅動(為客戶端和應用web服務使用)
沒有安裝oracle使用thin driver為客戶端使用

ORACLE CALL INTERFACE

TAF 為下面提供failover
OCI 程式
Jdbc thick 驅動(oci驅動)
Odbc連線
Sqlplus
Select 語句

基於主機的failover

1. 透過監控心跳來發現failure
2. 在cluster manager裡面重新組織cluster成員
3. 從primary節點到secondary節點傳輸disk的ownership
4. 重新啟動應用程式和db的binaries
5. 執行應用程式和資料庫的恢復
6. 重新建立到failover節點的客戶連線


RAC的failover
透過監控心跳來發現failure
重新組織例項的membership
執行例項恢復
重新建立failed 客戶連線

RAC中的TAF

能夠在空閒節點或者有primary/second配置中使用
為這個環境使用但是呢概念用於:
rac guard
複製系統
data guard
failover 模式選項

你必須手工的在tns配置檔案中新增failover選項
這個選項在連線描述符裡面是作為connect_date的一部分
failover選項包括:
type
methon
backup
retries
delay

Failover的型別
Failover 型別identify the nature of TAF(if any)
選項有
session: 僅failover 到一個可選的恢復
select: failover and continue with any ongoing query

failover的方法
決定當發生failover的時候,多快能連線上
basic,在發生fail的時候跟failover的例項沒有聯絡
preconnect: 為primary例項的連線在standby例項上建立連線的影像

failover backup service
確定失敗的時候連線要指向的網路服務名
容許你為每個primary 例項指定一個備份的例項連線字元
使用preconnect方法來初試化failover的preconnect

failover連線重試選項

retries: 在failover之後重新連線的次數
delay: 連線一次失敗後等多少秒在去連線

TAF的應用
Taf的推薦配置包括:
Connect-time failover with client load balancing
Retrying connections
Preestablishing connections

Load_balance =on
Failover=on
…….
Failover_mode =
(type=select)(method=basic)

retrying failover connections

backup=rac2


retries=20

delay=15



taf的預連線
(
failover_over=
(backup=rac2)
(type=select)
(method=preconnect)
)



taf verfication

select machine,failover_type,
failover_method,failed_over,count(*)
from v$session
group by machine,failover_type,
failover_method,failed_over;


簡單的PRIMARY/SECONDARY 配置

primary/secondary配置支援兩個節點的cluster(是不是多個節點就不支援這個配置了呢?)
只有primary接受客戶連線
second用於本地連線來作dba 的job和產生報表等
引數:
active_intance_count = 1
cluster_database_instance = 2


七. 備份和恢復

Log history records

建立資料庫的時候有個引數 maxloghistroy
它表示在控制檔案中保留有關歸檔log的歷史記錄的最大的個數.
如果超過了這個個數,在恢復的時候,需要手工指定log.

初試化歸檔
1. 關閉所有的例項
2. 啟動一個專有的例項,並且把log_archive_*引數設定好
3. ALTER DATABASE ARCHIVELOG
4. 修改LOG_ARCHIVE_*為其它所有的例項
5. 關閉專有的例項
6. 使用新的引數啟動所有的例項
RMAN
Rman對rac有下面優點
不需要配置改變可以讀cluster檔案和裸分割槽
能訪問多個歸檔log目標


配置rman
configure the snapshot control file location in rman
configure the control file automatic backup feature

rman的預設autolocation

rman 自動定位下面的檔案
bakcup pieces
備份期間的歸檔
資料檔案或控制檔案的copy

使用者管理的備份方法
對於離線備份,必須關閉所有的例項
可以使用多個節點來作並行備份
可以在任何節點convert tablespace
你提供對歸檔redo的所有的執行緒的訪問


離線備份
查詢下面的檢視看哪些檔案需要備份
v$datafile or dba_data_files
v$logfile
v$controlfile
v$parameter
關閉所有的例項
把需要的檔案copy到bakcup的目標
這個備份跟非rac資料庫一樣的



聯機備份
按照下面的步驟,注意,必須是歸檔模式

1. alter tablespace …..begin backup
2. 使用os 工具來進行檔案backup
3. alter tablespace …end backup;
4. alter database backup controlfile to file name / to trace
5. alter system archive log current;

恢復redo log檔案
媒介恢復需要一個或者多個歸檔log檔案為每個執行緒
rman的recover命令自動的恢復和應用需要的歸檔log
歸檔log可以存放在任何node上在恢復的時候
log必須可以被指向恢復的節點讀取

rac的並行恢復
並行恢復使用一個程式讀log,多個程式apply redo
oracle自動呼叫恢復程式
這個程式可以在一個節點也可以在多個節點

八.oltp的considerations


Extent Management Options

Local management 是由資料庫檔案裡面的點陣圖來控制的.
字典管理是由uet$ 和fet$ table來控制的.


本地管理的表空間

oracle公司推薦
在extent管理的時候,避免了例項間對少量的blocks的競爭
去掉了潛在在碎片,當不同大小的extent在一個表空間的時候.
實現了對free空間的自動segment管理

字典管理的表空間

在早期的oracle 版本中支援應用的分割槽.

自動段空間管理
點陣圖塊存在自動空間管理的段中
每個點陣圖的block包括空間可用性資訊
只有臨界條件改變的時候就會記錄
只有一位需要改變
變化很快,幾乎沒有什麼競爭.
點陣圖塊會分配給一個會話當下列情況需要free空間的時候
按照:
例項的標號來避免例項之間的競爭
會話的id避免會話的競爭.


Free List Space管理
Free list包含有free空間的塊(有指標邏輯連線)
第一個記錄指標鏈存在段頭.
Free list的改變需要更新header block的指標.
多個例項需要free space在一個段中必須包含header block的copy
會話需要這個內容來尋找free的blocks
會話需要專門訪問如果他們不得不更新free list的第一個指標

Sequence
Create sequence sql建立
Rac容許多個例項從同一個序列產生器中獲得唯一的整數
GCS協調例項之間的序列
Rac中的序列產生器:
跟單例項db相同的選項
工作不盡相同

sequence產生器的選項

Cache
把sequence號緩衝在記憶體中
提高效能
關閉資料庫的時候會丟numbers
order
保證請求的順序
增加負荷

聯合
cache with no order 效率最好
cache with order
nocache with no order
nocache with order 效率最差

索引的葉塊的競爭
減少競爭
對一個單一的例項,限制變化
分割槽表和underly 索引
使用例項專有的序列產生器
使用multiplier來建立distince ranges
考慮反向索引(在能在’=’條件中檢索)

高階佇列
佇列表例項affinity
gcs資源的獲得
高階佇列和佇列表的cache transfer


九.olap,dss和資料倉儲的considerations

加強查詢的資料庫
query-intensive的資料庫包括
olap
dss
資料庫倉庫
這樣的資料庫的特性:
大量資料
廣闊的查詢訪問
有日程的批匯入重新整理和替換資料
大量的並行處理

Populating資料倉儲
把資料移動到資料倉儲伺服器使用:
外表
unix管道
mainframe or legacy連結(escon)
第三方的包
透明閘道器
oracle9i 網路服務
高效的應用cluster節點
使用多例項來避免競爭
如果工作不能高效的share,使用單一的例項來load資料

在data loading之前需要進行批處理

………….

物化檢視
存非犯式的資料庫
從fact和多維表中pre-join了記錄
應該使用並行查詢來掃描

summary 表
是包括summary資料的物化檢視
基於rolling的summarizations(例如,周,月,季度)
can be make at the levels that are most frequently need by clents.


應該是資料倉儲中最經常訪問的內容

索引的建立
使用parallel 來加快索引的建立
使用nosort選項來預先裝資料
當規劃索引的時候考慮點陣圖和點陣圖join索引.

分割槽選項
提供自動分割槽的能力
使索引跟著表一起分割槽或者獨立
使並行dml
避免裝資料的時候,例項之間和block的傳送之間的競爭

並行處理的自動控制
引數:
parallel_automatic_tuning
parallel_adaptive_multi_user
在下面情況下使用預設的並行程度
段的定義
sql語句的hint
dbms_stats引數

手工控制並行處理
設定parallel_automatic_tuning 為false
在create和alter語句中,hint和類似的操作中為並行的執行緒定義個值


其它的並行處理引數
parallel_min_servers
parallel_max_servers
parallel_instance_group
instance_groups
parallel_broadcast_enables

臨時表空間
為了效能的最佳化
使用本地管理的臨時檔案
把不同的檔案分散在不同的磁碟上
為了提供最佳的空間可用性,建立一個表空間有多個臨時檔案
人工需要一個分割槽的使用者社群可以建立多個臨時表空間


十. 監控和調整

建立rac的檢視
$oracle_home/rdbms/admin/catclust.sql

ORACLE PERFORMANCE MANAGER
診斷包的一部分
與企業管理器的選項
圖形顯示例項(v$),cluster資料庫(gv$)的統計

Statspack
Spcreate.sql
Connect perfstat/perfstat
@spreport.sql

statspack cluster的統計
這個報告裡面有關於cluster的部分
gcs的工作負荷的特性
ges的統計資訊
gcs和ges的資訊統計
ges的詳細統計

select name,value,from v$sysstat
where name like ‘%global cache%’;

Global cache service request latency
在一個完整block請教中計算平臺延時的公式
global cache cr block receive time
glocal cache cr bloacks received

這個結果是百分之一秒

Global cache service 請求的延時

構成一個完整讀快的平均時間
a=(global cache cr block build time) /(global cache cr blocks served)
等待log flush的平均時間
b=(global cache cr block flush time)/(global cache cr blocks served)
傳送完整快的平均時間
c=(global cache cr block send time)/(global cache cr blocks served)
平均的lms服務時間
平均的延時-a – b – c

監控當前的塊的處理
當前的快的平均延時
(global cache current block receive time / global cache current blocks received ) –
( global cache current block pin time + global cache current block flush time + global cache current block send time ) / (global cache current blocks served)

這個值比較高,數碼有可能在buffers,cpu cycles或interconnect 訪問有可能競爭.

監控block 模式的轉換
平均轉換時間(毫秒)
10*(global cache convert time)/ (global cache converts)
平均get時間(毫秒)
10*(global cache get time)/(global cache gets)
下面的統計計算了超時
global cache convert timeouts;

分析global enqueue統計
1. 收集global統計資料
a) 監控statspack ges統計部分
b) 查v$sysstat
2. 計算平均global enqueue時間
3. 計算平均global鎖轉換時間
4. 確定可能導致檔案的資源型別
5. 使用v$librarycache 和v$rowcache檢視來進行進一步的分析

select name, value
from v$sysstat
where name like ‘%global lock%’;


計算平均global enqueue時間
毫秒
10*(global lock get time) / (global lock sync gets + global lock async gets)

計算平均global lock convert時間 (毫秒)

10*(global lock convert time) / (global lock sync converts + global lock async converts)

select event,time_waited,average_wait
from v$system_event
order by time_waited desc;

進一步的分析透過檢視


select namespace ,dlm_lock_request,
dlm_pin,requests,
dlm_pin_releasees,
dlm_invalidation_requests,
dlm_invalidations
from v$librarycache;


select parameter, dlm_requests,
dlm_conflicts,dlm_releasees
from v$rowcache;

監控global enqueue 服務資源統計
加入統計
EVENT =” 29700 TRACE NAME CONTEXT FOREVER”
查統計結果
v$ges_convert_local
v$ges_convert_remote

分析global enqueue服務資源統計
select r.convert_type,
r.average_convert_time,
l.average_convert_time,
r.convert_count,
l.convert_count
from v$ges_convert_local l.
v$ges_convert_remote r
where r.convert_count <> 0
or l.convert_count <>0
group by r.convert_type;

其它的檢視來查詢資源活動

v$lock_activity
v$class_cache_transfer
v$cache_transfer
v$file_cache_transfer

V$system_evnet 檢視
事務的響應時間
response time/number of transaction =
cpu time /number of transactions +
wait time /number of transactions

RAC在v$system_evnet中的事件
Global cache cr request
Library cache pin
Buffer busy due to global cache
Global cache busy
Global cache open x
Global cache open s
Global cache null to x
Global cache s to x
Global cache null to s

調整例項之間效能的觀察
select paramater ,count
dlm_requests,
dlm_conflicts,
dlm_releasees
from v$rowcache;

select namespace,dlm_lock_requests,
dlm_pin_requests,
dlm_pin_releases,
dlm_invalidation_requests,
dlm_invalidations
from v$librarycache;

調優戰略

收集基線資料
監控統計跟基線資料進行比較
只有在效能降低到不可以接受的水平才去調優
要監控跟cluster db無關的因素
address causes為更高水平的競爭.

http://www.itpub.net/showthread.php?s=&threadid=288032&perpage=15&pagenumber=1  


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章