Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          管理回滾段
          ?
          ?
          一、管理回滾段的準(zhǔn)則
          ?
          ??? 1、使用多回滾段
          ?
          ??? 多個回滾段來減少競爭。當(dāng)數(shù)據(jù)庫被創(chuàng)建時,會產(chǎn)生一個SYSTEM回滾段,但是不用于一般用途,所以在non-SYSTEM表空間中至少要創(chuàng)建一個額外的回滾段。而當(dāng)額外表空間和回滾段創(chuàng)建時,必須在SYSTEM表空間中創(chuàng)建第二個回滾段,一般這些額外的回滾段被創(chuàng)建,應(yīng)該激活新的回滾段,并使第二個回滾段不可用。
          ?
          ??? 注:雖然Oracle試圖將SYSTEM回滾段只用于特殊系統(tǒng)事務(wù),但當(dāng)non-SYSTEM有太多事務(wù)時,還是會占用SYSTEM回滾段的資源。所以需要事先計(jì)劃好回滾段的數(shù)目以避免這種情況的發(fā)生。
          ?
          ??? 啟動實(shí)例時有兩個選項(xiàng)來激活多回滾段:
          ?
          ??? * 使用公共回滾段,并指明初始化參數(shù)TRANSACTIONSTRANSACTION_PER_ROLLBACK_SEGMENT
          ??? * 使用私有或共有回滾段,并以初始化參數(shù)ROLLBACK_SEGMENTS指定它們的名稱
          ?
          ??? 注:修改MAX_ROLLBACK_SEGMENTS設(shè)定打開回滾段的最大個數(shù),需比ROLLBACK_SEGMENTS數(shù)值大。
          ?
          ??? 2、選擇公共/私有回滾段
          ?
          ??? 在Oracle RAC中私有段允許一個實(shí)例獲得特定的回滾段,而公共回滾段則可以在各個實(shí)例間共享。
          ?
          ??? 如果沒有使用RAC特性,私有回滾段和公共回滾段功能相似。
          ?
          ??? 3、指定回滾段為自動獲得
          ?
          ??? 只要使用公共回滾段,即指定:
          ??? 預(yù)期并發(fā)事務(wù)數(shù)目:TRANSACTIONS
          ??? 預(yù)期每個回滾段需要處理的事務(wù)數(shù)目:TRANSACTIONS_PER_ROLLBACK_SEGMENT
          ?
          ??? 則一個實(shí)例至少會獲得n個回滾段 n = TRANSACTIONS / TRANSACTIONS_PER_ROLLBACK_SEGMENT
          ?
          ??? 另:若使用私有回滾段則無所謂分配。
          ?
          ??? 4、近似回滾段大小
          ?
          ??? 一般情況下,回滾段后能夠順利地處理任何大小的事務(wù),但是當(dāng)一個事務(wù)非常簡短或者時間十分長的極端情況下,需要適當(dāng)調(diào)整合適的大小。對于簡短的事務(wù)來說,采用小回滾段時,可根據(jù)LRU算法盡可能得緩存在SGA中,而當(dāng)事務(wù)很大時,可能不斷出現(xiàn)“snapshot too old”錯誤提示,這是因?yàn)樽x一致性所需要的回滾段入口被回滾段四周的其他更新入口所重寫所導(dǎo)致。
          ?
          ??? 當(dāng)一個混個事務(wù)不是很普遍時,每個回滾段應(yīng)該是數(shù)據(jù)庫中最大表大小的10%左右。另外一般應(yīng)該為回滾段設(shè)置一個高的MAXEXTENTS,允許一個回滾段在它需要時分配到后來的盤區(qū)。
          ?
          ??? 5、創(chuàng)建使用多個相同大小盤區(qū)的回滾段
          ?
          ??? s = T / n
          ?
          ??? s = 計(jì)算出的每個盤區(qū)初始分配的大小
          ??? T = 回滾段總的初始大小
          ??? n = 初始分配的盤區(qū)數(shù)
          ?
          ??? 計(jì)算出s后,創(chuàng)建回滾段并將存儲參數(shù)INITIAL和NEXT指定為s,講MINEXTENTS指定為n
          ??? 不能為回滾段指定PCTINCREASE,默認(rèn)為0
          ?
          ??? 通常每個回滾段有10-20個相同大小的盤區(qū),將觀察到最優(yōu)的回滾I/O性能。
          ?
          ??? 6、設(shè)置一個最佳的盤區(qū)數(shù)
          ?
          ??? 監(jiān)控 V$ROLLNAMEV$ROLLSTAT 視圖,用于決定OPTIMAL的合適值。
          ??? 具體OPTIMAL的大小,大致與回滾段的大小確定方法一致。
          ?
          ??? 7、將回滾段放入一個獨(dú)立的表空間
          ?
          ??? 將回滾段與其他類型的數(shù)據(jù)分開存儲有以下好處:
          ?
          ??? ① 專門的回滾段表空間可以一直保持聯(lián)機(jī),以最大化回滾段的混合存儲容量。
          ??? ② 有活動回滾段的表空間不能脫機(jī),單獨(dú)存放后可以保證其他表空間可以脫機(jī)而不涉及回滾段
          ??? ③ 表空間包含頻繁得分配和回收區(qū)的回滾段,則空閑盤區(qū)可能會有更過碎片
          ?
          ?
          二、創(chuàng)建回滾段
          ?
          ??? 1、創(chuàng)建語句
          ?
          ??? CREATE ROLLBACK SEGMENT rbs_02 TABLESPACE rbsspace;
          ?
          ??? 注:這不是RAC環(huán)境,無需指定PRIVATE|PUBLIC,默認(rèn)為PRIVATE
          ?
          ??? 2、使新的回滾段聯(lián)機(jī)
          ?
          ??? 回滾段初始創(chuàng)建的時候是脫機(jī)的,必須要進(jìn)行聯(lián)機(jī)處理,有兩種方法:
          ?
          ??? ① 即ALTER ROLLBACK SEGMENT ... (詳細(xì)見后文)
          ??? ② 修改ROLLBACK_SEGMENTS參數(shù),在啟動時自動獲得,例如:
          ??????? ROLLBACK_SEGMENTS = (rbs_01, rbs_02)
          ?
          ??? 3、創(chuàng)建回滾段時設(shè)置存儲參數(shù)
          ?
          ??? CREATE ROLLBACK SEGMENT rbs_01
          ??? TABLESPACE rbsspace
          ??? STORAGE (
          ??? INITIAL 100K --初始盤區(qū)值
          ??? NEXT 100K --增量盤區(qū)值
          ??? OPTIMAL 4M --最佳大小
          ??? MINEXTENTS 20 --最小盤區(qū)數(shù)
          ??? MAXEXTENTS 100 ); --最大盤區(qū)數(shù)(包括初始盤區(qū))
          ?
          ??? Oracle建議:
          ?
          ??? ① 講INITIAL和NEXT設(shè)置為相同的值,以確保所有盤區(qū)均相同大小
          ??? ② 創(chuàng)建一個較多的初始盤區(qū),動態(tài)盤區(qū)的可能性降至最低 (例如20)
          ??? ③ 避免MAXEXTENTS = UNLIMITED
          ?
          ?
          三、修改回滾段
          ?
          ??? 1、改變回滾段的存儲參數(shù)
          ?
          ??? ALTER ROLLBACK SEGMENT rbs_01
          ??? STORAGE (MAXEXTENTS 120);
          ?
          ??? 2、手動縮小一個回滾段
          ?
          ??? ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;
          ?
          ??? 3、改變回滾段ONLINE|OFFLINE狀態(tài)
          ?
          ??? ① 手動使回滾段聯(lián)機(jī)
          ??? ALTER ROLLBACK SEGMENT user_rs_2 ONLINE;
          ?
          ??? ② 自動使回滾段聯(lián)機(jī)
          ??? TRANSACTIONS + TRANSACTIONS_PER_ROLLBACK_SEGMENT (公共)
          ??? ROLLBACK_SEGMENTS (私有)
          ?
          ??? ③ 使回滾段脫機(jī)
          ??? ALTER ROLLBACK SEGMENT user_rs_2 OFFLINE;
          ?
          ??? 當(dāng)前有事務(wù)運(yùn)行的回滾段,會進(jìn)入PENDING OFFLINE狀態(tài),具體可查詢DBA_ROLLBACK_SEGS、V$ROLLSTAT視圖。
          ?
          ?
          四、將事務(wù)指定到回滾段
          ?
          ??? 需要指定回滾段給事務(wù)的原因是:
          ?
          ??? ① 可以預(yù)計(jì)一項(xiàng)事務(wù)所產(chǎn)生的回滾段信息數(shù)量,這樣可以減少動態(tài)分配的額外開銷
          ??? ② 已知沒有長時間的查詢,因此可以指定給較小的回滾段
          ??? ③ 一些被事務(wù)修改的表正在被長時間執(zhí)行查詢,可以分配交大的回滾段
          ?
          ??? SET TRANSACION USE ROLLBACK SEGMENT large_rs1;
          ??? --如果需要指定,則該語句必須放在事務(wù)的第一句
          ?
          ?
          五、取消回滾段
          ?
          ??? 待取消的回滾段必須是OFFLINE狀態(tài),其他任何狀態(tài)均不可被取消。(INVALID已經(jīng)被取消)
          ?
          ??? DROP ROLLBACK SEGMENT rbs1;
          ?
          ??? 注1:如果回滾段是在ROLLBACK_SEGMENTS中指定的,被取消后必須在該參數(shù)中刪去,否則再次啟動數(shù)據(jù)庫時報(bào)錯。
          ??? 注2:回滾段取消后狀態(tài)變?yōu)镮NVALID
          ?
          ?
          六、查看回滾段信息
          ?
          ??? DBA_ROLLBACK_SEGS:回滾段基礎(chǔ)信息,包括名稱和表空間等
          ??? DBA_SEGMENTS:將一個段標(biāo)識為回滾段,并包括額外段信息
          ??? V$ROLLNAME:列出所有聯(lián)機(jī)的回滾段
          ??? V$ROLLSTAT:包括回滾段統(tǒng)計(jì)信息
          ??? V$TRANSACTION:包括撤銷段信息
          ?
          ??? V$ROLLSTAT可用于監(jiān)控回滾段的統(tǒng)計(jì)信息,具體如下:
          ?
          ??? USN??????? 回滾段編號(與V$ROLLNAME對應(yīng)名稱)
          ??? WRITES???? 寫入該回滾段的入口字節(jié)數(shù)
          ??? XACTS????? 活動的事務(wù)數(shù)
          ??? GETS?????? 回滾段頭部請求數(shù)
          ??? WAITS????? 導(dǎo)致等待的回滾段頭部請求數(shù)
          ??? OPTSIZE??? 該回滾段的最佳參數(shù)值
          ??? HWMSIZE??? 該回滾段大小在使用期間打到的最高峰(字節(jié))
          ??? SHRINKS??? 為保持最佳狀態(tài)所需要的縮減數(shù)
          ??? WRAPS????? 一個回滾段入口從一個盤區(qū)到另一個盤區(qū)的次數(shù)
          ??? EXTENDS??? 該回滾段必須獲得新盤區(qū)的次數(shù)
          ??? AVESHRINK? 一次壓縮期間所釋放的平均字節(jié)數(shù)
          ??? AVEACTIVE? 該回滾段中活動盤區(qū)的平均字節(jié)數(shù),超時測算
          ?
          ??? 注:該表信息在系統(tǒng)啟動時被重置
          ?
          ??? 對于V$ROLLSTATSHRINKS AVESHRINK狀況的評價
          ?
          ??? SHRINKS??AVESHRINK??分析和建議
          ????? 低???????低???????若AVEACTIVE與OPTSIZE值接近,則設(shè)置正確, 否則OPTIMAL值太大
          ????? 低?????? 高?????? 最好的設(shè)置,正確的OPTIMAL
          ????? 高?????? 低?????? OPTIMAL太小,太多的壓縮在執(zhí)行
          ????? 高?????? 高?????? 定期長時間運(yùn)行的事務(wù)可能生成這些統(tǒng)計(jì)信息,講OPTIMAL設(shè)高
          ?
          ?
          ?




          -The End-

          posted on 2009-02-07 23:41 decode360-3 閱讀(328) 評論(0)  編輯  收藏 所屬分類: DBA
          主站蜘蛛池模板: 永兴县| 密云县| 昌平区| 梁河县| 察雅县| 尼勒克县| 南乐县| 贡嘎县| 遂昌县| 耿马| 渝中区| 湖南省| 成安县| 共和县| 饶平县| 大荔县| 舒兰市| 阳山县| 马鞍山市| 博乐市| 大同县| 罗山县| 普兰店市| 剑河县| 贵德县| 兴仁县| 客服| 岱山县| 贵溪市| 日照市| 阜宁县| 武隆县| 阳东县| 滕州市| 沈阳市| 大埔区| 聊城市| 平遥县| 宿松县| 丰原市| 房产|