日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 高水位问题

發(fā)布時(shí)間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 高水位问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • Oracle 對(duì)數(shù)據(jù)段的管理有一個(gè)高水位(HWM, High Water Mark)的概念。高水位是數(shù)據(jù)段中使用過(guò)和未使用過(guò)的數(shù)據(jù)塊的分界線。高水位以下的數(shù)據(jù)塊是曾使用過(guò)的,以上的是從未被使用或初始化過(guò)的。
  • 當(dāng) Oracle 進(jìn)行全表掃描(FTS, Full table scan)的操作時(shí),它會(huì)讀高水位下的所有數(shù)據(jù)塊。如果高水位下還有很多空閑空間(碎片),讀取這些空閑數(shù)據(jù)塊會(huì)降低操作的性能。
  • 當(dāng)針對(duì)一個(gè)表的刪除操作很多時(shí),表會(huì)產(chǎn)生大量碎片。刪除操作釋放的空間不會(huì)被插入操作立即重用,甚至永遠(yuǎn)也不會(huì)被重用,這被稱之為高水位問(wèn)題;

如何檢查表是否有高水位問(wèn)題?

  • 收集表的統(tǒng)計(jì)信息
  • SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME');
  • 查詢高水位表信息
  • /* Formatted on 2017/9/21 14:14:37 (QP5 v5.240.12305.39476) */ SELECT TABLE_NAME,ROUND((BLOCKS * 8), 2) "高水位空間 k",ROUND((NUM_ROWS * AVG_ROW_LEN / 1024), 2) "真實(shí)使用空間 k",ROUND((BLOCKS * 10 / 100) * 8, 2) "預(yù)留空間(pctfree) k",ROUND((BLOCKS * 8 - (NUM_ROWS * AVG_ROW_LEN / 1024) -BLOCKS * 8 * 10 / 100),2) "浪費(fèi)空間 k"FROM USER_TABLESWHERE TEMPORARY = 'N'ORDER BY 5 DESC;
  • 查看上次收集的統(tǒng)計(jì)時(shí)間
  • select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'
  • 收集整個(gè) Schema 中對(duì)象的統(tǒng)計(jì)信息
  • SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');

    高水位問(wèn)題會(huì)產(chǎn)生什么不好的影響?

    • 查詢響應(yīng)時(shí)間(尤其是全表掃描)變慢
    • 產(chǎn)生大量行遷移
    • 浪費(fèi)空間

    如何解決高水位問(wèn)題?

    10g之前有兩種方式

  • 導(dǎo)出表,刪除表,再導(dǎo)入表
  • alter table move (一般選擇第二種,但是不能在線進(jìn)行而且需要重建索引)
  • 10g之后

    提供 shrink 命令,需要表空間是基于自動(dòng)段管理的,分兩步走:

    • 第一步:整理表,不影響DML操作
    alter table TABLE_NAME enable ROW MOVEMENT;--啟動(dòng)行移動(dòng)功能 alter table TABLE_NAME shrink space compact; --只整理碎片 不回收空間
    • 第二步:重置高水位,此時(shí)不能有DML操作
    alter table TABLE_NAME shrink space; --整理碎片并回收空間,并調(diào)整水位線。業(yè)務(wù)少時(shí)執(zhí)行 alter table TABLE_NAME disable ROW MOVEMENT;--關(guān)閉行移動(dòng)

    也可以一步到位:

    alter table TABLE_NAME shrink space;

    shrink 的優(yōu)勢(shì):不需要重建索引。可以在線操作。

    注意 :segment shrink執(zhí)行的兩個(gè)階段:

  • 數(shù)據(jù)重組(compact):通過(guò)一系列insert、delete操作,將數(shù)據(jù)盡量排列在段的前面。在這個(gè)過(guò)程中需要在表上加RX鎖,即只在需要移動(dòng)的行上加鎖。由于涉及到rowid的改變,需要enable row movement.同時(shí)要disable基于rowid的trigger.這一過(guò)程對(duì)業(yè)務(wù)影響比較小。
  • HWM調(diào)整:第二階段是調(diào)整HWM位置,釋放空閑數(shù)據(jù)塊。此過(guò)程需要在表上加X(jué)鎖,會(huì)造成表上的所有DML語(yǔ)句阻塞。在業(yè)務(wù)特別繁忙的系統(tǒng)上可能造成比較大的影響。
    • 注意:shrink space語(yǔ)句兩個(gè)階段都執(zhí)行。shrink space compact只執(zhí)行第一個(gè)階段。如果系統(tǒng)業(yè)務(wù)比較繁忙,可以先執(zhí)行shrink space compact重組數(shù)據(jù),然后在業(yè)務(wù)不忙的時(shí)候再執(zhí)行shrink space降低HWM釋放空閑數(shù)據(jù)塊。

    轉(zhuǎn)載于:https://www.cnblogs.com/fubinhnust/p/9925731.html

    總結(jié)

    以上是生活随笔為你收集整理的Oracle 高水位问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。