[20180327]行遷移與ITL浪費.txt

来源:https://www.cnblogs.com/lfree/archive/2018/03/27/8658099.html
-Advertisement-
Play Games

[20180327]行遷移與ITL浪費.txt--//生產系統遇到的一個問題,增加一個欄位到表結構,修改數據字典,導致出現行遷移,而更加嚴重的是沒有修改pctfree值,--//以後的業務操作,依舊會導致大量的行遷移,不僅僅是操作時IO增加,而且還導致的問題ITL槽浪費,特別在密集的dml操作的-- ...


[20180327]行遷移與ITL浪費.txt

--//生產系統遇到的一個問題,增加一個欄位到表結構,修改數據字典,導致出現行遷移,而更加嚴重的是沒有修改pctfree值,
--//以後的業務操作,依舊會導致大量的行遷移,不僅僅是操作時IO增加,而且還導致的問題ITL槽浪費,特別在密集的dml操作的
--//情況下:

1.環境:
SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> create table t as select rownum id from dual connect by level<=2000;
Table created.

--//分析表略.

SCOTT@book>  alter table t add (vc  varchar2(10) default lpad('a',10,'a'));
Table altered.

--//建立chained_rows表.
SCOTT@book> @ /u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlchain.sql
Table created.
--//我個人喜歡修改腳本建立臨時表:
CREATE GLOBAL TEMPORARY TABLE CHAINED_ROWS
(
   owner_name          VARCHAR2 (30)
  ,table_name          VARCHAR2 (30)
  ,cluster_name        VARCHAR2 (30)
  ,partition_name      VARCHAR2 (30)
  ,subpartition_name   VARCHAR2 (30)
  ,head_rowid          ROWID
  ,analyze_timestamp   DATE
) ON COMMIT PRESERVE ROWS;

SCOTT@book> Analyze Table t Compute Statistics;
Table analyzed.

SCOTT@book> select NUM_ROWS,BLOCKS,CHAIN_CNT from dba_tables where owner=user and table_name='T';
  NUM_ROWS     BLOCKS  CHAIN_CNT
---------- ---------- ----------
      2000         23       1690

--//1690條記錄出現行遷移.

SCOTT@book> analyze table t list chained rows into chained_rows;
Table analyzed.

SCOTT@book> select TABLE_NAME,HEAD_ROWID from chained_rows where rownum<=10;
TABLE_NAME HEAD_ROWID
---------- ------------------
T          AAAWHJAAEAAAAIjABl
T          AAAWHJAAEAAAAIjABm
T          AAAWHJAAEAAAAIjABn
T          AAAWHJAAEAAAAIjABo
T          AAAWHJAAEAAAAIjABp
T          AAAWHJAAEAAAAIjABq
T          AAAWHJAAEAAAAIjABr
T          AAAWHJAAEAAAAIjABs
T          AAAWHJAAEAAAAIjABt
T          AAAWHJAAEAAAAIjABu
10 rows selected.

SCOTT@book> @ &r/rowid AAAWHJAAEAAAAIjABl
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90569          4        547        101  0x1000223           4,547                alter system dump datafile 4 block 547 ;

SCOTT@book> @ &r/rowid AAAWHJAAEAAAAIjABm
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90569          4        547        102  0x1000223           4,547                alter system dump datafile 4 block 547 ;

--//這些記錄出現行遷移.

2.bbed觀察:
SCOTT@book> select * from t where rowid in ('AAAWHJAAEAAAAIjABl','AAAWHJAAEAAAAIjABm');
        ID VC
---------- ----------
       102 aaaaaaaaaa
       103 aaaaaaaaaa

BBED> x  /rnc *kdbr[101]
rowdata[5002]                               @6461
-------------
flag@6461: 0x20 (KDRHFH)
lock@6462: 0x02
cols@6463:    0
nrid@6464:0x01000227.0

BBED> x  /rnc *kdbr[102]
rowdata[4993]                               @6452
-------------
flag@6452: 0x20 (KDRHFH)
lock@6453: 0x02
cols@6454:    0
nrid@6455:0x01000227.1

--//數據依舊保持在原來位置,但是數據信息遷移到dba=0x01000227.

BBED> set dba 0x01000227
        DBA             0x01000227 (16777767 4,551)

BBED> x  /rnc *kdbr[0]
rowdata[3455]                               @8164
-------------
flag@8164: 0x0c (KDRHFL, KDRHFF)
lock@8165: 0x01
cols@8166:    2
hrid@8167:0x01000223.65

col    0[3] @8173: 102
col   1[10] @8177: aaaaaaaaaa


BBED> x  /rnc *kdbr[1]
rowdata[3431]                               @8140
-------------
flag@8140: 0x0c (KDRHFL, KDRHFF)
lock@8141: 0x01
cols@8142:    2
hrid@8143:0x01000223.66

col    0[3] @8149: 103
col   1[10] @8153: aaaaaaaaaa

--//在dba=4,551中記錄數據信息.也就是發生了行遷移情況.

3.看看dba=4,551的情況:

BBED> map /v dba 4,551
 File: /mnt/ramdisk/book/users01.dbf (4)
 Block: 551                                   Dba:0x01000227
------------------------------------------------------------
 KTB Data Block (Table/Cluster)

 struct kcbh, 20 bytes                      @0
    ub1 type_kcbh                           @0
    ub1 frmt_kcbh                           @1
    ub1 spare1_kcbh                         @2
    ub1 spare2_kcbh                         @3
    ub4 rdba_kcbh                           @4
    ub4 bas_kcbh                            @8
    ub2 wrp_kcbh                            @12
    ub1 seq_kcbh                            @14
    ub1 flg_kcbh                            @15
    ub2 chkval_kcbh                         @16
    ub2 spare3_kcbh                         @18

 struct ktbbh, 3552 bytes                   @20
    ub1 ktbbhtyp                            @20
    union ktbbhsid, 4 bytes                 @24
    struct ktbbhcsc, 8 bytes                @28
    sb2 ktbbhict                            @36
    ub1 ktbbhflg                            @38
    ub1 ktbbhfsl                            @39
    ub4 ktbbhfnx                            @40
    struct ktbbhitl[147], 3528 bytes        @44
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 struct kdbh, 14 bytes                      @3580
    ub1 kdbhflag                            @3580
    sb1 kdbhntab                            @3581
    sb2 kdbhnrow                            @3582
    sb2 kdbhfrre                            @3584
    sb2 kdbhfsbo                            @3586
    sb2 kdbhfseo                            @3588
    sb2 kdbhavsp                            @3590
    sb2 kdbhtosp                            @3592

 struct kdbt[1], 4 bytes                    @3594
    sb2 kdbtoffs                            @3594
    sb2 kdbtnrow                            @3596

 sb2 kdbr[145]                              @3598
 ub1 freespace[821]                         @3888
 ub1 rowdata[3479]                          @4709
 ub4 tailchk                                @8188

--//可以發現ktbbhitl=147,也就是占用147槽.而僅僅145條記錄.

SCOTT@book> alter system dump datafile 4 block 551;
System altered.

Block header dump:  0x01000227
 Object id on Block? Y
 seg/obj: 0x161c9  csc: 0x03.1766e4bf  itc: 147  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1000220 ver: 0x01 opc: 0
     inc: 0  exflg: 0

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.00b.00005161  0x00c00586.0ff3.3c  --U-  145  fsc 0x0000.1766e4d4
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
0x03   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x04   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x05   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x06   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x07   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x08   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x09   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0a   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0b   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0c   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0d   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0e   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x0f   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x10   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
....
0x86   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x87   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x88   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x89   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8a   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8b   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8c   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8d   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8e   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x8f   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x90   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x91   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x92   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x93   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x01000227

--//可以發現dba=4,551存在大量的ITL槽.你可以發現我執行的是alter table t add (vc  varchar2(10) default lpad('a',10,'a'));
--//理論講就是1個事務,而oracle沒發生1次行遷移就產生1個ITL槽.

--//突然想起來我以前的測試:
[20160726]行鏈接行遷移與ITL槽.txt
[20160727]行鏈接行遷移與ITL槽2.txt
[20160728]行鏈接行遷移與ITL槽3.txt
[20160728]行鏈接行遷移與ITL槽4.txt
[20160729]行鏈接行遷移與ITL槽4.txt

http://blog.itpub.net/267265/viewspace-2122700/
http://blog.itpub.net/267265/viewspace-2122663/
http://blog.itpub.net/267265/viewspace-2122599/
http://blog.itpub.net/267265/viewspace-2122712/

--//測試再次說明,大量的行遷移行鏈接會導致ITL槽數量的異常增加.
--//哎,才想起來以前也遇到過類似問題.
--//看來無論是開發還是dba應該一定程度要重視行鏈接與行遷移問題.看看我們的團隊實在太無語...
--//再重覆看了我以前的測試:
http://blog.itpub.net/267265/viewspace-2122712/
--//還是有點不明白,我的dml是順序執行的,oracle為什麼不重用ITL槽,而是不斷增加ITL槽使用呢....
--//那位解析看看,為了回滾操作嗎?



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Linux上使用vim命令編輯文本內容,Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程式員中被廣泛使用。簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。 vim 則可以說是程式開發者的一項很好用的工具。 ...
  • 通過配置nginx來將請求進行複製,轉發到其他應用,以下是自己實際搭建的步驟以及自己的理解,方便以後使用 1、環境搭建 參考鏈接: http://www.crackedzone.com/testing-service-with-nginx-copy-request.html https://blog ...
  • 在ORACLE資料庫的管理、維護過程中,偶爾會遇到歸檔日誌暴增的情況,也就是說一些SQL語句產生了大量的redo log,那麼如何跟蹤、定位哪些SQL語句生成了大量的redo log日誌呢? 下麵這篇文章結合實際案例和官方文檔“How to identify the causes of High R... ...
  • 狀態不是很穩定,晚上把資料庫經常性的無法啟動解決了,只能說是找到解決的辦法了吧。 開始的時候mysql根本無法運行起來。。 查了百度才知道,要把任務管理器對的mysqld進城結束掉,再用 --console啟動mysqld.exe 反正最後終於是登錄進去了。。 但是服務依舊是啟動,而不是像其他服務一 ...
  • 三範式定義 1NF:每個數據項都是最小單元,不可分割,其實就是確定行列之後只能對應一個數據。 2NF:每一個非主屬性完全依賴於候選碼(屬性組的值能唯一的標識一個元組,但是其子集不可以)。 3NF:每一個非主屬性既不傳遞依賴於主碼,也不部分依賴於主碼。 BCNF:主屬性(候選碼中的某一個屬性)內部也 ...
  • 直入主題 1.首先註冊ngrok,地址是:https://dashboard.ngrok.com/user/signup 。關於怎麼註冊不是本次的重點,所以在這裡就不多說,百度上也有很多教程。 2.接著獲取密鑰, 註冊後會自動分配一個密鑰,查看密鑰地址:https://dashboard.ngrok ...
  • 基本情況: 系統:centos 7 mariadb安裝方式:yum 亂碼解決過程: 1. 查看當前資料庫編碼(登錄資料庫後) (上圖為已經配置成功) 2. 如果結果不為上圖則需要設置資料庫配置文件 編輯 /etc/my.cnf.d/client.cnf 文件,添加如下內容 [client] defa ...
  • 前言 編寫後臺管理系統,測試使用,發現載入數據很慢,平均1秒多。之後和同事一起查找原因,從後段代碼到前端, 最後問題是在資料庫到設計,表沒有主外鍵,之後我們把索引加上後,速度杠杠的... 資料庫索引是什麼 索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定信息。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...