国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle Database 10g:最佳新特性(第二周:回滾監(jiān)視 )

2024-08-29 13:30:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

第 2 周:回滾監(jiān)視
還要多長(zhǎng)時(shí)間?:回滾監(jiān)視



為用戶提供對(duì)回滾操作時(shí)間的準(zhǔn)確評(píng)估

我們還在這地方嗎?還要多長(zhǎng)時(shí)間?

聽(tīng)起來(lái)熟悉嗎?這些問(wèn)題可能是您在前往孩子們最喜愛(ài)的主題公園的路上,從汽車后座上提出來(lái)的,并且經(jīng)常是不斷地、越來(lái)越頻繁地提出來(lái)。您不想告訴他們還確切需要多長(zhǎng)時(shí)間嗎 — 或者更簡(jiǎn)單些,您自己知道答案嗎?

同樣,在回滾長(zhǎng)期運(yùn)行的事務(wù)時(shí),經(jīng)常會(huì)有些用戶不停地詢問(wèn)相同的問(wèn)題。這些問(wèn)題是合理的,因?yàn)樵撌聞?wù)進(jìn)行了鎖定,正常的處理經(jīng)常受到回滾進(jìn)程的影響。

在 oracle 9i database 及更低的版本中,您可以執(zhí)行查詢
select used_urecfrom v$transaction;
該語(yǔ)句返回由當(dāng)前事務(wù)所使用的重做記錄的數(shù)量,而如果重復(fù)地執(zhí)行該語(yǔ)句,將會(huì)顯示連續(xù)減少的數(shù)值,因?yàn)榛貪L進(jìn)程在其處理過(guò)程中會(huì)釋放重做記錄。隨后您可以通過(guò)對(duì)一段間隔進(jìn)行快照來(lái)計(jì)算其速率,然后推斷出評(píng)估結(jié)束時(shí)間的結(jié)果。

雖然在視圖 v$transaction 中有一個(gè)名為 start_time 的列,但該列只顯示整個(gè)事務(wù)的起始時(shí)間(也就是在回滾執(zhí)行之前)。因此,除了推斷,您沒(méi)有辦法知道回滾實(shí)際上是在什么時(shí)間執(zhí)行的。

事務(wù)回滾的擴(kuò)展統(tǒng)計(jì)信息

在 oracle database 10g 中,這種操作很簡(jiǎn)單。當(dāng)事務(wù)回滾時(shí),事件被記錄在視圖 v$session_longops 中,該視圖顯示長(zhǎng)期運(yùn)行的事務(wù)。用于回滾,如果進(jìn)程耗時(shí)超過(guò)六秒,則記錄出現(xiàn)在該視圖中。在回滾執(zhí)行以后,您可能會(huì)隱藏所查看的監(jiān)視屏幕并執(zhí)行以下的查詢:
select time_remainingfrom v$session_longopswhere sid = <sid of the session doing the rollback>;
既然您意識(shí)到這個(gè)視圖 v$session_longops 的重要性,就讓我們來(lái)看它必須提供的其他信息。該視圖在 oracle database 10g 的預(yù)覽版中提供,但沒(méi)有捕獲關(guān)于回滾事務(wù)的信息。為了以一種易讀的方式顯示所有的列,我們將使用由 tom kyte 在 asktom.com 中所描述的 print_table 函數(shù)。此過(guò)程簡(jiǎn)單地以表格方式而不是常用的行方式來(lái)顯示列。
sql> set serveroutput on size 999999sql> exec print_table('select * from v$session_longops where sid = 9')sid : 9serial# : 68opname :transaction rollbacktarget :target_desc :xid:0x000e.01c.00000067sofar : 20554totalwork : 10234units :blocksstart_time :07-dec-2003 21:20:07last_update_time :07-dec-2003 21:21:24time_remaining : 77elapsed_seconds : 77context : 0message :transaction rollback:xid:0x000e.01c.00000067 :10234 out of 20554 blocks doneusername :syssql_address :00000003b719ed08sql_hash_value : 1430203031sql_id :306w9c5amyanrqcsid : 0
注意,此處顯示對(duì)行的所有更改,即使刪除并重新插入行時(shí)也是如此。version_operation 列顯示對(duì)該行執(zhí)行的操作 (insert/update/delete)。完成這些操作不需要?dú)v史表或額外的列。

讓我們仔細(xì)檢查這些列中的每一列。在會(huì)話中可能會(huì)有超過(guò)多個(gè)長(zhǎng)期運(yùn)行操作 — 特別是因?yàn)橐晥D中包含以前的會(huì)話中所有長(zhǎng)期運(yùn)行操作的歷史。列 opname 顯示該記錄用于“事務(wù)回滾”,這為我們指出了正確的方向。列 time_remaining 顯示所評(píng)估的剩余時(shí)間秒數(shù),這在前面已經(jīng)描述過(guò),而列 elapsed_seconds 顯示到目前為止所消耗的時(shí)間。

那么該表如何提供對(duì)剩余時(shí)間的評(píng)估呢?可以在列 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 秒

但您不必利用這種方法來(lái)獲得該數(shù)值,它已經(jīng)清楚地顯示出來(lái)了。最后,列 last_update_time 顯示有關(guān)當(dāng)前視圖內(nèi)容的時(shí)間,這將用于加強(qiáng)您對(duì)結(jié)果的解釋。

sql 語(yǔ)句

另一部分重要的新信息是正在被回滾的 sql 語(yǔ)句的標(biāo)識(shí)符。在早先,sql_address 和 sql_hash_value 用于獲取正在被回滾的 sql 語(yǔ)句。新的列 sql_id 對(duì)應(yīng)于視圖 v$sql 的 sql_id,如下所示:
select sql_textfrom v$sqlwhere sql_id = <value of sql_id from v$session_longops>;
該查詢返回所回滾的語(yǔ)句,因此提供了額外的校驗(yàn)以及 sql 語(yǔ)句的地址和散列值。

并行實(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ù)是評(píng)估回滾進(jìn)程的完成時(shí)間。

視圖 v$fast_start_transactions 顯示為回滾故障事務(wù)所產(chǎn)生的事務(wù)。類似的視圖 v$fast_start_servers 顯示對(duì)回滾進(jìn)行處理的并行查詢服務(wù)器的數(shù)量。這兩個(gè)視圖都在以前的版本中提供,但顯示事務(wù)標(biāo)識(shí)符的新列 xid 使得聯(lián)接更方便了。在 oracle9i database 以及更低的版本中,您必須通過(guò)三列(usn — 重做段號(hào),slt — 重做段中的存儲(chǔ)區(qū)號(hào),seq — 序列號(hào))來(lái)聯(lián)接視圖。其父集顯示在 parentusn、parentslt 和 parentseq 中。在 oracle database 10g 中,您只需將其聯(lián)接到 xid 列,其父 xid 由直觀的名稱表示:pxid。

最有用的信息部分來(lái)自于 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) 來(lái)獲得父事務(wù)和子事務(wù)(父事務(wù) id — pxid,而子事務(wù) id — xid)。xid 還可用于聯(lián)接此視圖與 v$fast_start_servers,以獲得其他詳細(xì)信息。

結(jié)論

總之,當(dāng)在 oracle database 10g 中回滾長(zhǎng)期運(yùn)行的事務(wù)時(shí) — 無(wú)論是并行實(shí)例恢復(fù)會(huì)話還是用戶執(zhí)行的回滾語(yǔ)句 — 您所需做的一切就是查看視圖 v$session_longops 并評(píng)估還需要多少時(shí)間。

現(xiàn)在,如果能預(yù)測(cè)到達(dá)主題公園的時(shí)間就好了!
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新民市| 都江堰市| 嘉义市| 达日县| 石楼县| 绿春县| 神木县| 和林格尔县| 铁岭县| 扶绥县| 民权县| 渝北区| 老河口市| 洞头县| 海安县| 大安市| 盐山县| 三台县| 河南省| 息烽县| 麻城市| 鄯善县| 伊春市| 长岛县| 南宁市| 旬阳县| 上犹县| 兴化市| 静海县| 高雄县| 察隅县| 阜南县| 铁力市| 临汾市| 长汀县| 金乡县| 怀柔区| 灵寿县| 新沂市| 龙游县| 绥滨县|