熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle診斷案例2 -SGA與Swap

2013-11-13 15:40:16  來源: Oracle 

  案例描述:
  這是一個大型生產系統
  問題出現時系統累計大量用戶進程
  用戶請求得不到及時響應新的進程不斷嘗試建立連接
  連接數很快被用完
  
  數據庫版本:
  操作系統:Solaris
  
  檢查alert文件
  日志中記錄如下錯誤信息說明磁盤異步IO出現問題:
  
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  Tue Aug ::
  WARNING: aiowait timed out times
  
  
  我們知道在SUN的某些版本上異步IO存在問題而異步IO缺省是打開的
  代碼:
  
  SQL> show parameter disk_a
  
  NAME                 TYPE    VALUE
  
  disk_asynch_io            boolean   TRUE
  
  針對此問題我們停用了數據庫的異步IO寫入
  
  共享內存問題
  alert文件中還記錄了以下錯誤信息:
  
  Tue Aug ::
  WARNING: EINVAL creating segment of size x
  fix shm parameters in /etc/system or equivalent
  
  該信息說明內核參數設置過小或者和SGA不匹配
  
  我們檢查system配置文件
  
  $ cat /etc/system
  
  set shmsys:shminfo_shmmax=
  set shmsys:shminfo_shmmin=
  set shmsys:shminfo_shmmni=
  set shmsys:shminfo_shmseg=
  set semsys:seminfo_semmap=
  set semsys:seminfo_semmni=
  set semsys:seminfo_semmns=
  set semsys:seminfo_semmnu=
  set semsys:seminfo_semume=
  set semsys:seminfo_semmsl=
  
  我們發現最大共享內存設置僅有G
  
  檢查SGA設置
  SQL*Plus: Release Production on 星期二 ::
  
  Copyright (c) Oracle Corporation All rights reserved
  
  Connected to:
  Oraclei Enterprise Edition Release bit Production
  With the Partitioning OLAP and Oracle Data Mining options
  JServer Release Production
  
  SQL> show sga
  
  Total System Global Area bytes
  Fixed Size bytes
  Variable Size bytes
  Database Buffers bytes
  Redo Buffers bytes
  
  我們發現SGA設置接近G這也就是步驟中錯誤提示出現的原因
  
  交換區問題
  我們用top工具檢查系統運行狀況
   
  代碼:
  
  # /usr/local/bin/top
  
  last pid: ; load averages:                          ::
  
   processes: sleeping running on cpu
  
  CPU states: % idle % user % kernel % iowait % swap
  
  Memory: M real M free G swap in use G swap free
  
   PID USERNAME THR PRI NICE SIZE  RES STATE  TIME  CPU COMMAND
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
    root       K K sleep : % picld
  
   oracle      M M sleep  : % oracle
  
   root        K K cpu/  : % top
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
   oracle      M M sleep  : % oracle
  
  Memory: M real M free G swap in use G swap free
  
  我們發現系統僅有G RAM物理內存僅有M可用現在SWAP區使用了G
  
  我們初步作出以下判斷:
  
  SGA設置過大(將近G)導致運行時產生大量交換
  
  大量SWAP交換進而引發磁盤問題這也就應該是我們第一步看到
  WARNING: aiowait timed out times的原因
  
  大量交換導致數據庫性能急劇下降進而導致用戶請求得不到快速響應堵塞累積直至數據庫失去響應
  
  解決方案
  此問題主要是由於SGA設置不當引起我們馬上縮小了SGA設置:
  
  SQL> show sga
  
  Total System Global Area bytes
  Fixed Size bytes
  Variable Size bytes
  Database Buffers bytes
  Redo Buffers bytes
  
  此時數據庫減少了交換達到了穩定運行用戶請求可以得到快速響應
  
  問題解決完成
  
  系統狀態
  調整後系統運行狀況:
   
  代碼:
  
  $ top
  
  last pid: ; load averages:         ::
  
   processes: sleeping on cpu
  
  CPU states: % idle % user % kernel % iowait % swap
  
  Memory: M real M free M swap in use G swap free
  
    PID USERNAME THR PRI NICE SIZE  RES STATE  TIME  CPU COMMAND
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
    root       K K sleep  : % picld
  
   oracle        M  M sleep  : % oracle
  
   oracle       K K cpu/  : % top
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
    oracle        M K sleep  : % tnslsnr
  
   oracle       M  M sleep  : % oracle
  
   oracle       M  M sleep  : % oracle
  
  該系統調整完以後一直穩定運行至今
  
  一點總結:
  這個案例和前面我提到的另外一個極其相似同樣都是SGA設置不當引起的數據庫問題
  
  本身並不復雜
  這一類問題應該在數據庫規劃和建設階段就避免掉
  
  其時該問題對我更像是個心理測試當所有老板都站在你背後的時候你能否冷靜快速的找到並解決問題
  
  關於SUN上的aiowait timed out 有很多總情況及誘因
From:http://tw.wingwit.com/Article/program/Oracle/201311/17109.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.