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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 高水位问题

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

如何檢查表是否有高水位問題?

  • 收集表的統計信息
  • 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) "真實使用空間 k",ROUND((BLOCKS * 10 / 100) * 8, 2) "預留空間(pctfree) k",ROUND((BLOCKS * 8 - (NUM_ROWS * AVG_ROW_LEN / 1024) -BLOCKS * 8 * 10 / 100),2) "浪費空間 k"FROM USER_TABLESWHERE TEMPORARY = 'N'ORDER BY 5 DESC;
  • 查看上次收集的統計時間
  • select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'
  • 收集整個 Schema 中對象的統計信息
  • SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');

    高水位問題會產生什么不好的影響?

    • 查詢響應時間(尤其是全表掃描)變慢
    • 產生大量行遷移
    • 浪費空間

    如何解決高水位問題?

    10g之前有兩種方式

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

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

    • 第一步:整理表,不影響DML操作
    alter table TABLE_NAME enable ROW MOVEMENT;--啟動行移動功能 alter table TABLE_NAME shrink space compact; --只整理碎片 不回收空間
    • 第二步:重置高水位,此時不能有DML操作
    alter table TABLE_NAME shrink space; --整理碎片并回收空間,并調整水位線。業務少時執行 alter table TABLE_NAME disable ROW MOVEMENT;--關閉行移動

    也可以一步到位:

    alter table TABLE_NAME shrink space;

    shrink 的優勢:不需要重建索引。可以在線操作。

    注意 :segment shrink執行的兩個階段:

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

    轉載于:https://www.cnblogs.com/fubinhnust/p/9925731.html

    總結

    以上是生活随笔為你收集整理的Oracle 高水位问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。