Oracle9i, 10g RAC中管理SCN演算法不同導致的資料問題
SCN概念
SCN 是Oracle 用來跟蹤資料庫內部變化發生的先後順序的機制,可以把它想象成一
個高精度的時鐘,每個Redo日誌條目,Undo Data Block,Data Block 都會有SCN
號。 Oracle的Consistent-Read, Current-Read, Multiversion-Block都是依賴
SCN 實現。SCN是順序遞增的一個數字,它的最大值是0xffff.ffffffff 。
對SCN的管理,可以分為單例項和RAC :
單節點的instance中,SCN值存在SGA區,由system commit number latch保護。
任何程式想要得到當前的SCN值,都要先得到這個latch。
RAC環境中,Oracle透過排隊機制(Enqueue)實現SCN在各並行節點之間的順序增長。
具體有兩種方法:
Lamport演算法: 在所有節點間的通訊內容中都攜帶SCN, 每個節點把接收到的SCN和本
機的SCN對比,如果本機的SCN 小,則調整本機的SCN和接收的一致,如果節點間通訊
不多,還會主動地定期相互通報。 故即使節點處於Idle 狀態,還是會有一些Redo
log 產生。Oracle9i及10.1 RAC預設採用這種方式。
Commit廣播(Broadcast)演算法: 在每個Commit操作之後,節點要向其他節點廣播SCN,
雖然這種方式會對系統造成一定的負載,但是確保每個節點在Commit之後都能立即查
看到SCN. Oracle10g r2 RAC預設採用這種方式。
上述兩種演算法可以透過調整初始化引數max_commit_propagation_delay來切換。在
Oracle9iRAC中 , 該引數的預設值都是700釐秒(centisecond),採用Lamport演算法。
如果該值小於100釐秒,Oracle就採用廣播演算法,並且記錄在alert.log檔案中,
Oracle10g R2 RAC預設為 0,採用commit廣播演算法,10g R2 RAC的alert log 類似:
Sun Nov 7 02:07:56 2010
ALTER DATABASE OPEN
This instance was first to open
Picked broadcast on commit scheme to generate SCNs
Sun Nov 7 02:08:01 2010
LGWR: STARTING ARCH PROCESSES
這兩種演算法各有優缺點,Lamport演算法雖然負載小,但是節點間會有延遲(提交了但
是還沒有傳遞給其他節點),commit廣播演算法雖然有負載,但是沒有延遲。 Oracle
10g R2 RAC 預設選用的是BroadCast演算法。
網路資料:
--------------------------------------------------------------------
這幾天我有一個客戶的資料庫出現了這樣的情況,在一個3節點的RAC上,其中一
個節點上修改的資料,馬上在另外一個節點上查,發現有千分之5左右的資料沒有
更新,要過一會才能查到正確的結果。這造成了應用軟體的業務邏輯錯誤。
透過分析,發現是SCN的傳播機制導致。由於Oracle 9i預設的傳播模式是lamport
演算法,SCN在例項間傳遞是透過GCS MESSAGE來傳遞的,因此就會造成一定的延時。
LAMPORT演算法可以減少例項間同步SCN所造成的效能問題,但是在變更十分頻繁的系
統中,可能出現上述的問題。因此在這種情況下,客戶首先把這個應用全部部署
在一個節點上,以避免業務邏輯的問題。如果無法透過應用調整來解決,那麼就
必須調整MAX_COMMIT_PROPAGATION_DELAY來改變傳播演算法了。
一般來說這個引數在9i和10.1的預設值是700(TRU64除外)也就是7秒鐘,實際上
這是一個上限了,因為lck每隔3秒鐘會有一個例行的資訊包交換,一般情況下,
3秒鐘肯定會完成一次scn傳播。這個引數,如果設定為0-99,那麼資料庫會選擇
Broadcast-On-Commit演算法,由LGWR來傳播SCN。一般來說我們可以設定為0-99或
者保留原有的值不懂,沒有十分可靠的分析證據的情況下,建議不要設定100-700
之間的值。
10.2開始,lgwr傳播SCN的演算法有了很大的改進,因此10.2預設使用
Broadcast-On-Commit,這個引數的預設值也變為0.
--------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-689333/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料檔案SCN的一致性問題
- rac 本地監聽問題導致資料斷斷續續連線
- ORACLE資料檔名導致的奇怪問題Oracle
- Oracle資料庫導致效能問題的可能原因Oracle資料庫
- memlock過低導致的資料庫效能問題資料庫
- 使用impdp不當導致的資料丟失問題
- 資料庫預設安裝配置導致的問題資料庫
- Oracle 10G RAC歸檔引數格式問題導致歸檔至ASM時出錯Oracle 10gASM
- 記一次儲存問題導致的rac故障案例
- 在https中引入http資源所導致的問題HTTP
- 【epoll問題】EPOLLRDHUP使用導致無法接受資料
- Elasticsearch 使用不同分詞器導致搜尋排名的問題Elasticsearch分詞
- backup database plus archivelog 不同寫法導致備份集位置不同問題DatabaseHive
- 使用資料庫處理併發可能導致的問題資料庫
- 歸檔問題導致的資料庫無法啟動資料庫
- 資料庫統計資訊不更新導致的效能問題資料庫
- 【問題處理】恢復因誤生成PFILE 導致RAC的SPFILE無效的問題
- 水煮Oracle9i十五——《oracle資料庫SCN概念Oracle資料庫
- Mac 上檔名相同、大小寫不同的資料夾會合併成一個所導致的問題Mac
- TSM配置不好導致備份不正常,從而導致資料庫效能問題資料庫
- Oracle資料傾斜導致的問題-有繫結變數Oracle變數
- Oracle資料傾斜導致的問題-無繫結變數Oracle變數
- 關於 iconv 轉碼導致資料丟失的問題
- Chrome89針對sessionStorage的更新導致資料共享問題ChromeSession
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- oracle 10g rac問題(一)Oracle 10g
- 裝oracle 10g的RAC問題真多。。。。。Oracle 10g
- 【RAC】處理因ons導致CPU使用率過高的問題
- SCN異常增長導致資料庫異常關閉風險的防範資料庫
- 同步整合不同系統、不同資料庫中資料的問題資料庫
- 什麼是資料洩露?哪些問題可導致資料洩露
- ANALYZE導致的阻塞問題分析
- MySQL Flush導致的等待問題MySql
- 不同Node版本導致的Date建構函式問題及解決方法函式
- 不同資料庫間傳遞資料的問題資料庫
- cassandra tombstone導致寫資料丟失問題徵解
- ZooKeeper 避坑指南: ZooKeeper 3.6.4 版本 BUG 導致的資料不一致問題
- C++中泛型使用導致的膨脹問題C++泛型