大数据量删除的思考(二)
简单的数据集
executedbms_random.seed(0)createtablet1(idnotnull,date_open,date_closed,deal_type,client_ref,small_vc,padding)nologgingaswithgeneratoras(select/*+materializecardinality(1e4)*/rownumidfromdualconnectbyrownum<=1e4)select1e4*(g1.id-1)+g2.idid,trunc(add_months(sysdate,-120)+(1e4*(g1.id-1)+g2.id)*3652/1e7)date_open,trunc(add_months(add_months(sysdate,-120)+(1e4*(g1.id-1)+g2.id)*3652/1e7,12*trunc(dbms_random.value(1,6))))date_closed,cast(dbms_random.string('U',1)asvarchar2(1))deal_type,cast(dbms_random.string('U',4)asvarchar2(4))client_ref,lpad(1e4*(g1.id-1)+g2.id,10)small_vc,rpad('x',100,'x')paddingfromgeneratorg1,generatorg2whereg1.id<=1e3andg2.id<=1e4;executedbms_stats.gather_table_stats(user,'t1',method_opt=>'forallcolumnssize1')altertablet1addconstraintt1_pkprimarykey(id)usingindexnologging;
规模
Quality
场景
selectrows_in_block,count(*)blocks,rows_in_block*count(*)row_count,sum(count(*))over(orderbyrows_in_block)running_blocks,sum(rows_in_block*count(*))over(orderbyrows_in_block)running_rowsfrom(selectdbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),count(*)rows_in_blockfromt1----wheredate_open>=add_months(sysdate,-60)--wheredate_open<add_months(sysdate,-60)----wheredate_closed>=add_months(sysdate,-60)--wheredate_closed<add_months(sysdate,-60)----wheresubstr(client_ref,2,1)>='F'--wheresubstr(client_ref,2,1)<'F'--groupbydbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid))groupbyrows_in_blockorderbyrows_in_block;
BlocksRowsRowsperblockBlocksRowsRunningtotalRunningtotal------------------------------------------------------------2712712749203,8779,989,973203,8789,990,0005020010,000204,07810,000,000--------sum204,078
BlocksRowsRowsperblockBlocksRowsRunningtotalRunningtotal-------------------------------------------------------------271271274214226949102,0144,998,686102,0164,998,755--------sum102,016
BlocksRowsRowsperblockBlocksRowsRunningtotalRunningtotal--------------------------------------------------------------15555222442749311333914038842811,1244211,51256803,4001,1014,91261,2567,5362,35712,44871,85612,9924,21325,44082,50820,0646,72145,50492,87525,8759,59671,379102,96129,61012,557100,989112,62128,83115,178129,820122,22226,66417,400156,484131,81223,55619,212180,040141,55021,70020,762201,740151,54323,14522,305224,885161,61125,77623,916250,661171,97633,59225,892284,253182,16839,02428,060323,277192,41645,90430,476369,181202,31746,34032,793415,521212,31048,51035,103464,031222,08045,76037,183509,791231,83342,15939,016551,950241,69640,70440,712592,654251,76944,22542,481636,879261,79946,77444,280683,653272,13857,72646,418741,379282,25163,02848,669804,407292,44870,99251,117875,399302,33970,17053,456945,569312,28670,86655,7421,016,435321,86459,64857,6061,076,083331,70456,23259,3101,132,315341,56653,24460,8761,185,559351,55654,46062,4321,240,019361,85066,60064,2821,306,619372,13178,84766,4131,385,466382,58398,15468,9961,483,620392,966115,67471,9621,599,294402,891115,64074,8531,714,934412,441100,08177,2941,815,015421,93281,14479,2261,896,159431,30055,90080,5261,952,0594468330,05281,2091,982,1114529113,09581,5001,995,206461074,92281,6072,000,12847321,50481,6392,001,63248314481,6422,001,77649122,4125,998,188204,0547,999,964--------sum204,054
索引空间
selectrows_per_leaf,count(*)leaf_blocksfrom(select/*+index_ffs(t1(client_ref))*/sys_op_lbid(94255,'L',t1.rowid)leaf_block,count(*)rows_per_leaffromt1whereclient_refisnotnullgroupbysys_op_lbid(94255,'L',t1.rowid))groupbyrows_per_leaforderbyrows_per_leaf;
selectrows_per_leaf,count(*)blocks,rows_per_leaf*count(*)row_count,sum(count(*))over(orderbyrows_per_leaf)running_blocks,sum(rows_per_leaf*count(*))over(orderbyrows_per_leaf)running_rowsfrom(select/*+leading(v1t1)use_hash(t1)*/leaf_block,count(*)rows_per_leaffrom(select/*+no_mergeindex_ffs(t1(client_ref))*/sys_op_lbid(94255,'L',t1.rowid)leaf_block,t1.rowidridfromt1whereclient_refisnotnull)v1,t1wheret1.rowid=v1.ridanddate_open<add_months(sysdate,-60)groupbyleaf_block)groupbyrows_per_leaforderbyrows_per_leaf;
BlocksRowsRows_per_leafBlocksRowsRunningtotalRunningtotal-------------------------------------------------------------1812362345818623725830187237471,204188118881,392...21034672,6602,312474,88221140184,6112,713559,493...221808178,5688,9891,921,410222851188,9229,8402,110,332223832185,53610,6722,295,868...24221652,27221,3204,756,57524317342,03921,4934,798,61424415638,06421,6494,836,678...265126522,3215,003,718266126622,3225,003,984
原作者:Jonathan Lewis
原文地址:https://www.red-gate.com/simple-talk/sql/oracle/massive-deletes-part-2/
| 译者简介
汤健·沃趣科技数据库技术专家沃趣科技数据库工程师,多年Oracle数据库从业经验,深入理解Oracle数据库结构体系,现主要参与公司一体机产品安装、测试、优化,并负责电信行业数据库以及系统运维。声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。