<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    [Oracle10G新特性]_02.回滾監(jiān)視
    ?
    ??? 對于Oracle的這個(gè)問題,之前基本上沒有遇到過,也無法模擬。所以就不發(fā)表意見了,記下來僅供參考。
    ?
    -----------------------------------------------------------------------------
    ?
    還要多長時(shí)間?:回滾監(jiān)視
    ?
    為用戶提供對回滾操作時(shí)間的準(zhǔn)確評估
    ?
    ??? 我們還在這地方嗎?還要多長時(shí)間?
    ?
    ??? 聽起來熟悉嗎?這些問題可能是您在前往孩子們最喜愛的主題公園的路上,從汽車后座上提出來的,并且經(jīng)常是不斷地、越來越頻繁地提出來。您不想告訴他們還確切需要多長時(shí)間嗎 — 或者更簡單些,您自己知道答案嗎?

    ??? 同樣,在回滾長期運(yùn)行的事務(wù)時(shí),經(jīng)常會(huì)有些用戶不停地詢問相同的問題。這些問題是合理的,因?yàn)樵撌聞?wù)進(jìn)行了鎖定,正常的處理經(jīng)常受到回滾進(jìn)程的影響。
    ?
    ??? 在 Oracle 9i Database 及更低的版本中,您可以執(zhí)行查詢
    ?
    SELECT USED_UREC
    FROM V$TRANSACTION;
    ?
    ??? 該語句返回由當(dāng)前事務(wù)所使用的重做記錄的數(shù)量,而如果重復(fù)地執(zhí)行該語句,將會(huì)顯示連續(xù)減少的數(shù)值,因?yàn)榛貪L進(jìn)程在其處理過程中會(huì)釋放重做記錄。隨后您可以通過對一段間隔進(jìn)行快照來計(jì)算其速率,然后推斷出評估結(jié)束時(shí)間的結(jié)果。
    ?
    ??? 雖然在視圖 V$TRANSACTION 中有一個(gè)名為 START_TIME 的列,但該列只顯示整個(gè)事務(wù)的起始時(shí)間(也就是在回滾執(zhí)行之前)。因此,除了推斷,您沒有辦法知道回滾實(shí)際上是在什么時(shí)間執(zhí)行的。
    ?
    ?
    事務(wù)回滾的擴(kuò)展統(tǒng)計(jì)信息
    ?
    ??? 在 Oracle Database 10g 中,這種操作很簡單。當(dāng)事務(wù)回滾時(shí),事件被記錄在視圖 V$SESSION_LONGOPS 中,該視圖顯示長期運(yùn)行的事務(wù)。用于回滾,如果進(jìn)程耗時(shí)超過六秒,則記錄出現(xiàn)在該視圖中。在回滾執(zhí)行以后,您可能會(huì)隱藏所查看的監(jiān)視屏幕并執(zhí)行以下的查詢:
    ?
    select time_remaining
    from v$session_longops
    where sid = <sid of the session doing the rollback>;
    ?
    ??? 既然您意識(shí)到這個(gè)視圖 V$SESSION_LONGOPS 的重要性,就讓我們來看它必須提供的其他信息。該視圖在 Oracle Database 10g 的預(yù)覽版中提供,但沒有捕獲關(guān)于回滾事務(wù)的信息。為了以一種易讀的方式顯示所有的列,我們將使用由 Tom Kyte 在 AskTom.com 中所描述的 PRINT_TABLE 函數(shù)。此過程簡單地以表格方式而不是常用的行方式來顯示列。
    ?
    SQL> set serveroutput on size 999999
    SQL> exec print_table('select * from v$session_longops where sid = 9')
    SID : 9
    SERIAL#?????????????????????? : 68
    OPNAME??????????????????????? :Transaction Rollback
    TARGET??????????????????????? :
    TARGET_DESC?????????????????? :xid:0x000e.01c.00000067
    SOFAR???????????????????????? : 20554
    TOTALWORK???????????????????? : 10234
    UNITS???????????????????????? :Blocks
    START_TIME??????????????????? :07-dec-2003 21:20:07
    LAST_UPDATE_TIME????????????? :07-dec-2003 21:21:24
    TIME_REMAINING??????????????? : 77
    ELAPSED_SECONDS?????????????? : 77
    CONTEXT?????????????????????? : 0
    MESSAGE?????????????????????? :Transaction Rollback:xid:0x000e.01c.00000067 :
    10234 out of 20554 Blocks done
    USERNAME????????????????????? :SYS
    SQL_ADDRESS?????????????????? :00000003B719ED08
    SQL_HASH_VALUE??????????????? : 1430203031
    SQL_ID??????????????????????? :306w9c5amyanr
    QCSID???????????????????????? : 0
    ?
    ??? 注意,此處顯示對行的所有更改,即使刪除并重新插入行時(shí)也是如此。VERSION_OPERATION 列顯示對該行執(zhí)行的操作 (Insert/Update/Delete)。完成這些操作不需要?dú)v史表或額外的列。
    ?
    ??? 讓我們仔細(xì)檢查這些列中的每一列。在會(huì)話中可能會(huì)有超過多個(gè)長期運(yùn)行操作 — 特別是因?yàn)橐晥D中包含以前的會(huì)話中所有長期運(yùn)行操作的歷史。列 OPNAME 顯示該記錄用于“事務(wù)回滾”,這為我們指出了正確的方向。列 TIME_REMAINING 顯示所評估的剩余時(shí)間秒數(shù),這在前面已經(jīng)描述過,而列 ELAPSED_SECONDS 顯示到目前為止所消耗的時(shí)間。
    ?
    ??? 那么該表如何提供對剩余時(shí)間的評估呢?可以在列 TOTALWORK 中找到線索,該列顯示要完成的“工作”總量,還有 SOFAR 顯示到目前為止已經(jīng)完成了多少工作。工作的單位顯示在列 UNITS 中。在本例中以數(shù)據(jù)塊為單位;因此,到目前為止已經(jīng)回滾了 20,554 個(gè)數(shù)據(jù)塊中共計(jì) 10,234 個(gè)數(shù)據(jù)塊。此操作到目前為止已消耗了 77 秒。因此,剩余數(shù)據(jù)塊將消耗:
    ?
    ??? 77 * ( 10234 / (20554-10234) ) ~ 77 秒
    ?
    ??? 但您不必利用這種方法來獲得該數(shù)值,它已經(jīng)清楚地顯示出來了。最后,列 LAST_UPDATE_TIME 顯示有關(guān)當(dāng)前視圖內(nèi)容的時(shí)間,這將用于加強(qiáng)您對結(jié)果的解釋。
    ?
    ?
    SQL 語句
    ?
    ??? 另一部分重要的新信息是正在被回滾的 SQL 語句的標(biāo)識(shí)符。在早先,SQL_ADDRESS 和 SQL_HASH_VALUE 用于獲取正在被回滾的 SQL 語句。新的列 SQL_ID 對應(yīng)于視圖 V$SQL 的 SQL_ID,如下所示:
    ?
    SELECT SQL_TEXT
    FROM V$SQL
    WHERE SQL_ID = <value of SQL_ID from V$SESSION_LONGOPS>;
    ?
    ??? 該查詢返回所回滾的語句,因此提供了額外的校驗(yàn)以及 SQL 語句的地址和散列值。
    ?
    ?
    并行實(shí)例恢復(fù)
    ?
    ??? 如果 DML 操作是并行操作,則列 QCSID 顯示并行查詢服務(wù)器會(huì)話的 SID。在并行回滾事件中,如實(shí)例恢復(fù)以及隨后的故障事務(wù)恢復(fù)期間,經(jīng)常用到該信息經(jīng)常。
    ?
    ??? 例如,假設(shè)在大型的更新期間,實(shí)例異常關(guān)閉。當(dāng)實(shí)例啟動(dòng)時(shí),發(fā)生故障的事務(wù)被回滾。如果啟用了用于并行恢復(fù)的初始化參數(shù)值,則回滾并行地而不是串行地發(fā)生,如同它發(fā)生在常規(guī)事務(wù)回滾中一樣。下一步的任務(wù)是評估回滾進(jìn)程的完成時(shí)間。
    ?
    ??? 視圖 V$FAST_START_TRANSACTIONS 顯示為回滾故障事務(wù)所產(chǎn)生的事務(wù)。類似的視圖 V$FAST_START_SERVERS 顯示對回滾進(jìn)行處理的并行查詢服務(wù)器的數(shù)量。這兩個(gè)視圖都在以前的版本中提供,但顯示事務(wù)標(biāo)識(shí)符的新列 XID 使得聯(lián)接更方便了。在 Oracle9i Database 以及更低的版本中,您必須通過三列(USN — 重做段號(hào),SLT — 重做段中的存儲(chǔ)區(qū)號(hào),SEQ — 序列號(hào))來聯(lián)接視圖。其父集顯示在 PARENTUSN、PARENTSLT 和 PARENTSEQ 中。在 Oracle Database 10g 中,您只需將其聯(lián)接到 XID 列,其父 XID 由直觀的名稱表示:PXID。
    ?
    ??? 最有用的信息部分來自于 V$FAST_START_TRANSACTIONS 視圖中的列 RCVSERVERS。如果發(fā)生并行回滾,則該列中顯示并行查詢服務(wù)器的數(shù)量。您可以查看該列,了解啟動(dòng)了多少并行查詢進(jìn)程:
    ?
    select rcvservers from v$fast_start_transactions;
    ?
    ??? 如果輸出是 1,則事務(wù)正在由 SMON 進(jìn)程進(jìn)行串行回滾 — 顯然這是完成工作的一種不充分的方法。您可以將初始化參數(shù) RECOVERY_PARALLELISM 的值改為除 0 或 1 以外的值,重新啟動(dòng)實(shí)例進(jìn)行并行回滾。隨后您可以執(zhí)行 ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK = HIGH,按 CPU 數(shù)量的 4 倍創(chuàng)建并行服務(wù)器。
    ?
    ??? 如果上述查詢的輸出顯示不是 1,則正在進(jìn)行并行回滾。您可以查詢同一視圖 (V$FAST_START_TRANSACTIONS) 來獲得父事務(wù)和子事務(wù)(父事務(wù) id — PXID,而子事務(wù) id — XID)。XID 還可用于聯(lián)接此視圖與 V$FAST_START_SERVERS,以獲得其他詳細(xì)信息。
    ?
    ?
    結(jié)論
    ?
    ??? 總之,當(dāng)在 Oracle Database 10g 中回滾長期運(yùn)行的事務(wù)時(shí) — 無論是并行實(shí)例恢復(fù)會(huì)話還是用戶執(zhí)行的回滾語句 — 您所需做的一切就是查看視圖 V$SESSION_LONGOPS 并評估還需要多少時(shí)間。
    ?
    ??? 現(xiàn)在,如果能預(yù)測到達(dá)主題公園的時(shí)間就好了!
    ?
    ?
    ?
    ?
    ?
    posted on 2009-08-03 23:48 decode360 閱讀(277) 評論(0)  編輯  收藏 所屬分類: 08.DBA
    主站蜘蛛池模板: 99热在线免费播放| 亚洲?v女人的天堂在线观看| 亚洲jizzjizz在线播放久| 成在人线AV无码免费| 五月婷婷免费视频| 亚洲校园春色小说| 亚洲av无码乱码在线观看野外 | 99久久精品免费视频| 亚洲中文字幕无码久久2020| 狠狠综合久久综合88亚洲| 91手机看片国产永久免费| 免费一级特黄特色大片| 久久亚洲精精品中文字幕| 国产成人精品免费视频软件| 无码国产精品一区二区免费式芒果| 亚洲综合色丁香婷婷六月图片| 久久久久国产成人精品亚洲午夜 | 免费大片av手机看片高清| 亚洲国产一区二区三区青草影视| 免费黄色一级毛片| 99久9在线|免费| 男人免费视频一区二区在线观看| 91亚洲精品麻豆| 亚洲中文字幕在线第六区| 噜噜嘿在线视频免费观看| 中国人xxxxx69免费视频| 中文字幕高清免费不卡视频| 亚洲精品无码久久久久久| 中文字幕亚洲色图| 亚洲人成网77777亚洲色| 日韩免费观看一级毛片看看| 91在线手机精品免费观看| 亚洲天堂免费在线视频| 国产亚洲精品国产福利在线观看| 亚洲一区二区三区免费视频| 亚洲av午夜成人片精品网站| 久久久久一级精品亚洲国产成人综合AV区| 最新猫咪www免费人成| 99久久免费国产香蕉麻豆| 免费国产黄网站在线观看视频 | 国产JIZZ中国JIZZ免费看|