【ASK_ORACLE】因process用盡導致的rac重啟的解決方法
說明
上週末一個重要系統出現了問題導致rac重啟,影響了業務,因此記錄一下解決過程。
環境
搭建平臺:VMware Workstation
OS:RHEL 6.10
Grid&DB:Oracle 11.2.0.4
問題描述
上週末下午資料庫的會話數突增,導致資料庫節點一程式數滿了,應用新的會話連線節點1報錯,alert日誌中出現大量的ORA-00020報錯,直到30分鐘後節點一例項重啟,隨後資料庫恢復正常。在這期間影響了多筆重要業務。
分析過程
alert日誌顯示最大程式數用盡,出現ORA-00020的反覆報錯,此時資料庫已經發生阻塞,導致節點一例項process用盡。
ASH發現16:21開始1#會話突增,16:22開始2#例項突增:可以看出是1#節點先出現問題,隨後導致2#例項的會話數突增。
發現16:21:02開始出現等待enq: US – contention,16:21:12 1#出現12個ens: US等待,隨後出現enq: SV -contention:
注:
enq: US – contention是事務出現undo segment不夠時需要申請新的undo segment產生的阻塞
enq: SV – contention是獲取sequence number而產生的阻塞
檢視對應的SQL ID發現都是DML操作:
檢視awr報告:
1. 發現相關SQL和兩個sequence有關,於是檢視這些sequence的定義後發現了兩個問題:
(1)有order關鍵字,會導致RAC環境操作進行2個節點的同步處理
(2)Cache過小
因此enq: US – contention和enq: SV – contention等待是相關關聯的,enq: US 阻塞會導致包含sequence nextval的DML無法提交,導致sequence更新cache失敗;而enq: SV -contention阻塞也可能導致sequence更新慢,DML操作緩慢。
2. AWR發現故障之前最大併發事務100左右,因此ONLINE的undo segment可能在100左右,但是故障時兩個問題SQL的確出現了接近200的併發session,並且二節點當時也有少量併發sql。同時檢視兩個節點的歷史最大會話數在2千多
綜上分析,本次故障原因是突增的併發DML語句,導致online undo segment不夠,當online擴充套件undo段時產生阻塞,並且相關問題SQL的sequence使用order模式,會導致順序同步爭用,跨節點操作更嚴重。
解決方法
1、按關閉自動undo管理,並設定足夠的online回滾段:
alter system set "_rollback_segment_count"=3000;
alter system set "_undo_autotune"=FALSE;
2、 修改sequence cache到10000,取消order,減少資料字典更新頻率及同步:
alter sequence XXX1_SEQ_S cache 10000 noorder;
alter sequence XXX2_SEQ_S cache 10000 noorder;
3、為避免跨例項同步,使應用連線同一個例項
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2932474/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle RAC啟動因CTSS導致的異常Oracle
- 使用Nginx解決IIS繫結域名導致應用程式重啟的問題Nginx
- MySQL 5.6因為OOM導致資料庫重啟MySqlOOM資料庫
- 【ASK_ORACLE】RAC節點自動重啟但日誌裡未報錯的原因和解決方法Oracle
- eclipse: workspace出錯導致無法啟用的解決Eclipse
- 10G rac 因為ocr原因導致crs不能啟動的排查二例
- 【ASK_ORACLE】導致ora-29740報錯的可能原因和對應的解決方案Oracle
- VXFS啟用非同步IO導致的嚴重問題非同步
- HP-UX+11.2.0.3RAC因裸裝置許可權不一致導致RAC一個節點報錯的解決UX
- 因為arp 問題導致的vip 故障與解決方案
- 解決Linux索引節點(inode)用滿導致故障的方法Linux索引
- 修改系統時間導致RAC環境的一個例項重啟
- 解決一次gitlab因異常關機導致啟動失敗Gitlab
- 【RAC】因清理不完整導致RAC ASM例項建立失敗ASM
- 【RAC】處理因ons導致CPU使用率過高的問題
- 新增display:none;導致盒子被擠下去的解決方法None
- 記php-fpm重啟導致的一個bugPHP
- IIS應用程式回收導致應用中Hangfire等後臺任務無法正常啟動工作的解決方法
- centos重啟不能自動聯網的解決方法CentOS
- win8.1update致win8.1啟用失效解決方法
- 【故障恢復】因spfile修改錯誤導致資料庫無法啟動的恢復方法資料庫
- undo表空間出現壞塊導致資料庫重啟問題解決資料庫
- 【問題處理】恢復因誤生成PFILE 導致RAC的SPFILE無效的問題
- 神奇的DEBUG:因為異常導致MongoDB容器無法啟動MongoDB
- RAC刪除節點失敗重啟大法解決
- RAC因為localhost磁碟空間不夠導致has程式掛起localhost
- 時區錯誤導致oracle的EM不能啟動解決辦法Oracle
- win10應用程式無法啟動,因為應用程式的並行配置不正確的解決方法Win10並行
- IP地址被清空導致例項重啟
- CAS導致的ABA問題及解決
- 【ASK_ORACLE】Oracle RAC報錯“ipc send timeout”的原因以及解決辦法Oracle
- PK重複導致Logical Standby Apply process stop - ORA-00001APP
- go 協程操作map導致的資料競爭及解決方法Go
- LOAD異常中止導致表無法訪問的解決方法
- 伺服器自動重啟的原因及解決方法-VeCloud伺服器Cloud
- nginx重啟報找不到nginx.pid的解決方法Nginx
- 解決hyper v導致docker無法啟動問題Docker
- 【RAC】因虛擬機器配置檔案調整不完整導致RAC無法使用虛擬機