qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          ORACLE數據庫的優化

          CPU參數的調整
            CPU是服務器的一項重要資,服務器良好的工作狀態是在工作高峰時CPU的使用在90%以上。如果空閑時間CPU使用率就在90%以上,說明服務器缺乏CPU資源,如果工作高峰時CPU使用率仍然恨低,說明服務器CPU資源還比較富余。
            使用操作相同命令可以看到CPU的使用情況,以般UNIX操作系統的服務器,可以使用sar–u命令查看CPU的使用率,NT操作系統的服務器,可以使用NT的性能管理器來查看CPU的使用率。
            數據庫管理員可以通過查看v$sysstat(select*fromv$sysstat wherenamelike'CPU%')數據字典中“CPUused by this session”統計項得知ORACLE數據庫使用的CPU時間,查看“OS Userlevel CPU time“統計項得知操作系統用戶態的CPU時間,查看“OS Systemcall CPU time“統計項得知操作系統系統態下的CPU時間,操作系統總的CPU時間就是用戶態和系統態時間之和,如果ORACLE數據庫使用的CPU時間占操作系統總的CPU時間90%以上,說明服務器CPU基本上被ORACLE數據庫使用著,這是合理,反之,說明服務器CPU被其它程序占用過多,ORACLE數據庫無法得到更多的CPU時間。
            數據庫管理員還可以通過查看v$sesstat數據字典來獲得當前連接ORACLE數據庫各個會話占用的CPU時間,從而得知什么會話耗用服務器CPU比較多。(select*fromv$sysstat orderbyvaluedesc)
            出現CPU資源不足的情況是很多的:SQL語句的重解析、低效率的SQL語句、鎖沖突都會引起CPU資源不足。
            1、數據庫管理員可以執行下述語句來查看SQL語句的解析情況:
            SELECT * FROM V$SYSSTAT
            WHERE NAME IN
            ('parse time cpu', 'parse time elapsed', 'parse count (hard)');
            這里parse time cpu是系統服務時間,parse timeelapsed是響應時間,用戶等待時間
            waite time = parse time elapsed – parse time cpu
            由此可以得到用戶SQL語句平均解析等待時間=waite time / parse count,這個平均等待時間應該接近于0,如果平均解析等待時間過長,數據庫管理員可以通過下述語句
            SELECTSQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
            ORDER BY PARSE_CALLS;
            來發現是什么SQL語句解析效率比較低。程序員可以優化這些語句,或者增加ORACLE參數SESSION_CACHED_CURSORS的值。
            2、數據庫管理員還可以通過下述語句:
            SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROMV$SQLAREA;
            查看低效率的SQL語句,優化這些語句也有助于提高CPU的利用率。
            3、數據庫管理員可以通過v$system_event(select*fromv$system_event where event like'_atch%';)數據字典中的”latchfree“統計項查看ORACLE數據庫的沖突情況,如果沒有沖突的話,latch free查詢出來沒有結果。如果沖突太大的話,數據庫管理員可以降低spin_count參數值,來消除高的CPU使用率。

          內存參數的調整
            內存參數的調整主要是指ORACLE數據庫的系統全局區(SGA)的調整。SGA主要由三部分構成:共享池、數據緩沖區、日志緩沖區。
            1、   共享池由兩部分構成:共享SQL區和數據字典緩沖區,共享SQL區是存放用戶SQL命令的區域,數據字典緩沖區存放數據庫運行的動態信息。數據庫管理員通過執行下述語句:
            select (sum(pins -reloads)) / sum(pins) "Lib Cache" from v$librarycache;
            來查看共享SQL區的使用率。這個使用率應在90%以上,否則需要增加共享池的大小。數據庫管理員還可以執行下述語句:
            select (sum(gets - getmisses - usage - fixed))/ sum(gets) "Row Cache" from v$rowcache;
            查看數據字典緩沖區的使用率,這個使用率也應該在90%以上,否則需要增加共享池的大小。
            2、   數據緩沖區.數據庫管理員可以通過下述語句:
            SELECT name, value  FROM v$sysstat  WHERE name IN ('db block gets', 'consistentgets','physical reads');
            來查看數據庫數據緩沖區的使用情況。查詢出來的結果可以計算出來數據緩沖區的使用命中率=1 - ( physical reads / (db block gets + consistent gets))。
            這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。
            3、   日志緩沖區.數據庫管理員可以通過執行下述語句:
            select name,value from v$sysstat where name in('redo entries','redo log space requests');查看日志緩沖區的使用情況。查詢出的結果可以計算出日志緩沖區的申請失敗率:
            申請失敗率=requests/entries,申請失敗率應該接近于0,否則說明日志緩沖區開設太小,需要增加ORACLE數據庫的日志緩沖區。

          posted on 2014-06-10 09:49 順其自然EVO 閱讀(179) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 四平市| 新乐市| 临湘市| 湟源县| 台东县| 安福县| 察隅县| 栖霞市| 文昌市| 民丰县| 迁西县| 巴彦淖尔市| 鹤壁市| 比如县| 绵竹市| 黄陵县| 兴文县| 镇江市| 马边| 黄山市| 依安县| 定远县| 滦南县| 浦县| 法库县| 五华县| 靖江市| 绿春县| 仙桃市| 宜兴市| 永顺县| 元氏县| 许昌市| 密云县| 大冶市| 万山特区| 稷山县| 罗山县| 建始县| 泗水县| 衢州市|