Insert插入不同的列数量,统计信息对比
一、實驗目的:
Insert插入表中相同的行數量,不同的列數量,通過10046?和autotrace工具對比查看邏輯讀、物理讀、time數據,并得出相應結論
?
二、測試
2.1測試流程:
??? =>【為盡可能滿足測試數據可靠性,提前準備好操作流程】
??? =>實驗數據及環境的準備:
???????????????#目標端環境準備:授予用戶yang表空間的使用權限、
????????????????????????????????????????????? 轉儲目錄的創建及讀寫權限授予給yang用戶
????????????????????????????????????????????? 及 開啟autotrace工具的權限
?????????????? #源庫使用數據泵導出一張表的測試數據,操作系統命令scp遠程傳輸至目標端,目標端使用Impdp導入測試環境中,得到測試源表及數據后,創建一個與源表結構相同的測試表(結構相同,沒有數據)
????????????? #查詢驗證源表,測試表是否滿足上述條件,測試表是否有約束,有則禁用約束????
??? =>會話監控10046 level 1事件開啟、自動追蹤 autotrace開啟
?????????????? 會話一、使用SYS用戶登錄:對會話二進行10046 trace level 1事件追蹤
???????????????會話二、使用yang用戶登錄:開啟set autotrace traceonly 開啟自動追蹤工具
??? =>insert操作執行:
????????????? yang用戶:執行第一個insert 操作,對測試表中所有的數據進行插入
????????????? commit提交后,truncate 截斷清空測試表
????????????? yang用戶:執行第二個insert操作,對測試表中的三個列數據進行插入
????????????? commit提交后
??? =>autotrace工具收集信息對比:
?????????????邏輯讀、物理讀、執行時間統計對比
??? =>結束會話追蹤,生成trace文件,10046事件收集信息對比:
???????????? 邏輯讀、物理讀、執行時間統計對比
????=>對比結果進行分析,得出相應結論
?
2.2測試操作說明:
?????2.2.1工具說明:
????????=>10046事件:可以跟蹤應用程序執行的SQL語句,根據開啟的追蹤級別不同:查詢不同級別的信息
??????? Level ?1: 可以查看包含解析、執行、提取、提交、回滾等信息記錄
??????? Level ?4: 可以查看包含解析、執行、提取、提交、回滾的信息 + 變量詳細信息
????????Level ?8: 可以查看包含解析、執行、提取、提交、回滾的信息 + 等待事件
??????? Level ?12:可以查看包含解析、執行、提取、提交、回滾的信息 + 綁定變量+等待事件
???????
?????=>autotrace 自動追蹤工具:可以查看SQL執行結果、執行計劃、統計信息的查看????
Set autotrace on?????????? 打開工具開關,顯示SQL執行結果+執行計劃+統計信息 Set autotrace traceonly?顯示執行計劃+統計信息 Set autotrace traceonly explain??顯示執行計劃 Set autotrace traceonly statistics 顯示統計信息 2.2.2:操作說明 =>禁用測試表約束的考量:因為測試中,有Insert插入少量列的數據測試,如果有not null約束,則該列必須有值,為了簡化操作過程,禁用約束 =>trace文件中如何唯一標識SQL,如果測試過程中,由于誤操作等原因產生多個相同的Insert語句,如何獲取想要的SQL統計信息,每個Insert語句,通過大小寫不同(得到不同的SQL_ID),即使相同的操作,SQL_id不同,更精確查找實驗結果????????? 2.3實際操作: =>目標端準備: #授予表空間存儲無限制權限 SQL> grant resource to yang; #授予yang用戶可以開啟autotrace權限 @?/sqlplus/admin/plustrce SQL> grant plustrace to yang;#創建轉儲目錄 SQL> create directory yy as '/home/oracle'; #轉儲目錄讀寫授予yang用戶 SQL> grant read,write on directory yy to yang; #查詢轉儲目錄 SQL> select directory_name,directory_path from dba_directories;DIRECTORY_NAME DIRECTORY_PATH --------------------------------------------------------YY /home/oracle
?
? =>源端數據導出,操作系統SCP命令遠程傳輸文件至目標端
#測試數據從源庫導出: expdp \'/ as sysdba\' DIRECTORY=DMPDIR logfile=G_BIL_C_DAT_LTE_206_T_20180414.logDUMPFILE=G_BIL_C_DAT_LTE_206_T_20180414.dmp tables='gat.G_BIL_C_DAT_LTE_206_T_20180414'
query='"where rownum<12000"'
#操作系統SCP遠程拷貝
$ scp G_BIL_C_DAT_LTE_206_T_20180414.dmp 192.168.20.67:/home/oracle/.
#源庫查詢信息:表的用戶名稱,表所在的表空間
SQL> select owner,tablespace_name from dba_segments where segment_name='G_BIL_C_DAT_LTE_206_T_20180414';
??????? OWNER????? TABLESPACE_NAME
--------------------------------------------------------------------------------
??????? GAT????????TBSFSH_DATA21
????
=>目標端:導入并創建測試表,查詢驗證
?
#查詢目標端測試用戶yang的默認永久表空間 SQL> select username,DEFAULT_TABLESPACE from dba_users where username='YANG';USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ YANG USERS#導入源表 [oracle@bj ~]$ impdp yang/yang directory=yydumpfile=G_BIL_C_DAT_LTE_206_T_20180414.dmpremap_schema=GAT:yang remap_tablespace=TBSFSH_DATA21:users#查詢源表有多少行數據SQL> select count(*) from G_BIL_C_DAT_LTE_206_T_20180414; COUNT(*)---------- 23998 #創建測試表: CREATE TABLE "YANG"."G_BIL_C_DATA_LTE_20180414"( "TICKET_ID" NUMBER(12,0) NOT NULL ENABLE,"FILE_ID" NUMBER(18,0) NOT NULL ENABLE,"BATCH_ID" NUMBER(12,0) NOT NULL ENABLE,"SWITCH_ID" NUMBER(9,0) NOT NULL ENABLE,"SERVICE_TYPE" VARCHAR2(15) NOT NULL ENABLE,"BILLING_REGION_ID" NUMBER(10,0),---此處省略107個列---) SEGMENT CREATION IMMEDIATEPCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS BASIC NOLOGGINGSTORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)TABLESPACE "USERS";#查詢測試表的約束名稱:
SQL> select 'alter table '||table_name||' disable constraint '||CONSTRAINT_NAME||';'? "Script" from user_constraints where table_name='G_BIL_C_DATA_LTE_20180414' and status='ENABLED';
Script
--------------------------------------------------------------------------------
alter table G_BIL_C_DATA_LTE_20180414 disable constraint SYS_C004285;
--此處省略剩余6條語句
?
#執行上述禁用約束SQL:
alter table G_BIL_C_DATA_LTE_20180414 disable constraint SYS_C004285;
--此處省略剩余6條語句
#再次查詢驗證:測試表是否還有約束啟用
SQL> select 'alter table '||table_name||' disable constraint '||CONSTRAINT_NAME||';'? "Script" from user_constraints where table_name='G_BIL_C_DATA_LTE_20180414' and status='ENABLED';
no rows selected
?
?
??? =>會話監控10046 level 1事件開啟、自動追蹤 autotrace開啟
?
?????????????? 會話一、使用SYS用戶登錄:對會話二進行10046 trace level 1事件追蹤
#yang用戶查詢當前會話的操作系統進程號 SQL> select spid from v$process a,v$session b where a.addr=b.paddr andb.sid=(select sid from v$mystat where rownum=1); SPID ------------------------ 29062
#SYS用戶進行監控
SQL> show user
USER is "SYS"
SQL> oradebug setospid 29062;
Oracle pid: 34, Unix process pid: 29062, image: oracle@bj (TNS V1-V3)
SQL> oradebug event 10046 trace name context forever,level 1;
Statement processed.
?
???????????????會話二、使用yang用戶登錄:開啟set autotrace traceonly 開啟自動追蹤工具
#yang用戶開啟自動追蹤開關 SQL> set autotrace traceonly;?
??? =>insert操作執行:
?
????????????? yang用戶:執行第一個insert 操作,對測試表中所有的數據進行插入
?
????????????? commit提交后,truncate 截斷清空測試表
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID,FILE_ID,BATCH_ID,SWITCH_ID,SELF_CELL_ID,SELF_MSC_ID###此處省略剩余表的所有列名稱###,RATABLE_RESOURCE_LIST,FLUX_CARD_LIST) select trim(TICKET_ID),trim(FILE_ID ),trim(BATCH_ID ),trim(SWITCH_ID ),trim(SELF_CELL_ID ),trim(SELF_MSC_ID )###此處省略剩余表的所有列名稱###,trim(FLUX_CARD_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t;?
?AUTOTRACE工具信息記錄:
Execution Plan ----------------------------------------------------------| Id? | Operation??????????????? | Name?????????????????????? | Rows? | Byte s | Cost (%CPU)| Time??? | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------
Plan hash value: 2515889339| 0 | INSERT STATEMENT | | 24031 | 200M| 262 (2)| 00:00:04 | || 1 | LOAD TABLE CONVENTIONAL | G_BIL_C_DATA_LTE_20180414 | | | | | | |
| 2 | PARTITION LIST ALL | | 24031| 200M| 262 (2)| 00:00:04 | 1 | 2| 3 | TABLE ACCESS FULL | G_BIL_C_DAT_LTE_206_T_20180414 |24031 | 200M| 262 (2)| 00:00:04 | 1 | 2 |-------------------------------------------------------------------------------- Note ------ dynamic sampling used for this statement (level=2)Statistics ----------------------------------------------------------849 recursive calls30555 db block gets2057 consistent gets1 physical reads24014124 redo size838 bytes sent via SQL*Net to client8776 bytes received via SQL*Net from client3 SQL*Net roundtrips to/from client43 sorts (memory)0 sorts (disk)23998 rows processed
第一次操作:結束
?
????????????? yang用戶:執行第二個insert操作,對測試表中的三個列數據進行插入
?
????????????? commit提交后
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID, BSID, IPV6_PDSN_ADDRESS, RATABLE_RESOURCE_LIST) select trim(TICKET_ID), trim(BSID ), trim(IPV6_PDSN_ADDRESS ), trim(RATABLE_RESOURCE_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t;?AUTOTRACE工具信息記錄:
Execution Plan ---------------------------------------------------------- Plan hash value: 2515889339--------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |---------------------------------------------------------------------------------------------------------------------------| 0 | INSERT STATEMENT | | 24031 | 50M| 261 (1)| 00:00:04 | | || 1 | LOAD TABLE CONVENTIONAL | G_BIL_C_DATA_LTE_20180414 | | | | | | || 2 | PARTITION LIST ALL | | 24031 | 50M| 261 (1)| 00:00:04 | 1 | 2 || 3 | TABLE ACCESS FULL | G_BIL_C_DAT_LTE_206_T_20180414 | 24031 | 50M| 261 (1)| 00:00:04 | 1 | 2 |---------------------------------------------------------------------------------------------------------------------------Note ------ dynamic sampling used for this statement (level=2)Statistics ----------------------------------------------------------24 recursive calls25795 db block gets1081 consistent gets0 physical reads10095484 redo size841 bytes sent via SQL*Net to client1045 bytes received via SQL*Net from client3 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)23998 rows processed?
?
?
??? =>autotrace工具收集信息對比:
?
?????????????邏輯讀、物理讀、執行時間統計對比
?
| Autotrace | 邏輯讀 consistent gets | 物理讀 physical reads | TIME 時-分-秒 |
| Insert插入表的所有列(全表總計94個列) | 2057 | ?1 ? | 00:00:04 |
| Insert插入表的四個列 | 1081 | ?0 | 00:00:04 |
?
?
??? =>結束會話追蹤,生成trace文件,10046事件收集信息對比:
?????
SQL> oradebug event 10046 trace name context off; Statement processed. SQL> show parameter user_dump_destNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ user_dump_dest string /picclife/app/oracle/diag/rdbms/aa/dingding/trace[oracle@bj admin]$ cd /picclife/app/oracle/diag/rdbms/aa/dingding/trace
[oracle@bj trace]$ ls *29062.trc
dingding_ora_29062.trc
[oracle@bj trace]$ tkprof dingding_ora_29062.trc /home/oracle/select.trc sys=no
#trace文件中第一次Insert,全表所有列的插入操作:
?????****此處省略90個列名稱??? ,FLUX_CARD_LIST) select trim(TICKET_ID)
??????????????????? ,trim(FILE_ID??????????? ),SELF_CELL_ID****此處省略90個列名稱,trim(FLUX_CARD_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 tcall count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.02 0.02 0 3 0 0 Execute 1 8.64 15.29 1 1062 30554 23998 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 8.66 15.32 1 1065 30554 23998
#parse解析
#execute執行
#fetch獲取
#elapsed 執行時間
#query 邏輯讀
#disk 物理讀
#current 當前讀
#rows 處理行數
#解析期間:庫緩存中未命中:硬解析1次 Misses in library cache during parse: 1 Optimizer mode: ALL_ROWS Parsing user id: 54 Number of plan statistics captured: 1Rows (1st) Rows (avg) Rows (max) Row Source Operation ---------- ---------- ---------- ---------------------------------------------------0 0 0 LOAD TABLE CONVENTIONAL (cr=1179 pr=1 pw=0 time=15305076 us)23998 23998 23998 PARTITION LIST ALL PARTITION: 1 2 (cr=957 pr=0 pw=0 time= 74766 us cost=262 size=209742568 card=24031)23998 23998 23998 TABLE ACCESS FULL G_BIL_C_DAT_LTE_206_T_20180414 PARTITI ON: 1 2 (cr=957 pr=0 pw=0 time=67557 us cost=262 size=209742568 card=24031)
?
?
#trace文件中第二次Insert,四個列的插入操作:
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID, BSID, IPV6_PDSN_ADDRESS, RATABLE_RESOURCE_LIST) select trim(TICKET_ID), trim(BSID ), trim(IPV6_PDSN_ADDRESS ), trim(RATABLE_RESOURCE_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 tcall count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 2 0 0 Execute 1 0.28 0.31 0 1000 25794 23998 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.28 0.31 0 1002 25794 23998#解析期間:庫緩存中未命中:硬解析1次 Misses in library cache during parse: 1 Optimizer mode: ALL_ROWS Parsing user id: 54 Number of plan statistics captured: 1Rows (1st) Rows (avg) Rows (max) Row Source Operation ---------- ---------- ---------- ---------------------------------------------------0 0 0 LOAD TABLE CONVENTIONAL (cr=1006 pr=0 pw=0 time=315302 us )23998 23998 23998 PARTITION LIST ALL PARTITION: 1 2 (cr=957 pr=0 pw=0 time= 52444 us cost=261 size=53060448 card=24031)23998 23998 23998 TABLE ACCESS FULL G_BIL_C_DAT_LTE_206_T_20180414 PARTITI ON: 1 2 (cr=957 pr=0 pw=0 time=47368 us cost=261 size=53060448 card=24031)
?
???????????? 邏輯讀、物理讀、執行時間統計對比
?
| 10046 工具level1 | 邏輯讀 query | 物理讀 ?disk | TIME Elapsed(單位微秒) 1s=1,000,000微秒 |
| Insert插入表的所有列(全表總計94個列) | 1065 | 1 | 15.32 |
| Insert插入表的四個列 | 1002 | 0 | 0.31 |
?
?
| Autotrace | 邏輯讀 consistent gets | 物理讀 physical reads | TIME 時-分-秒 |
| Insert插入表的所有列(全表總計94個列) | 2057 | ?1 ? | 00:00:04 |
| Insert插入表的四個列 | 1081 | ?0 | 00:00:04 |
?
????=>對比結果進行分析,得出相應結論
???? 結論一、以上兩個工具查詢的統計信息對比:
?????????????? Insert操作,插入的列數量越多,消耗的邏輯讀就越多,代價也越大
???? 結論二、autotrace工具顯示的時間不準確,從邏輯讀降低一半,但是執行時間根本沒有減少
????
?? =>工具使用對比:autotrace?|| 10046?
?????使用autotrace操作更加簡便,但是只能當前用戶執行,當前用戶下查看
??? 使用10046,操作復雜一點,但是可以查看監控其它用戶下執行的sql,且執行時間維度更加精確,收集的統計信息更多。
?
轉載于:https://www.cnblogs.com/lvcha001/p/8907247.html
總結
以上是生活随笔為你收集整理的Insert插入不同的列数量,统计信息对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WWDC 2018: Shortcuts
- 下一篇: SpringBoot :cannot b