Dropping Very Large Table In Oracle

朱雀 2021-04-24 02:16 570阅读 0赞

这是一张550G的大表,表上还包括了CLOB和BLOB对象;我们来观察下Oracle drop这样一个大表时的具体表现:

  1. SQL> select * from v$version;
  2. BANNER
  3. ----------------------------------------------------------------
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
  5. PL/SQL Release 10.2.0.4.0 - Production
  6. CORE 10.2.0.4.0 Production
  7. TNS for Linux: Version 10.2.0.4.0 - Production
  8. NLSRTL Version 10.2.0.4.0 - Production
  9. SQL> show parameter recyclebin
  10. NAME TYPE VALUE
  11. ------------------------------------ ----------- ------------------------------
  12. recyclebin string OFF
  13. /* 为了避免被flashback table骚扰,关闭了recyclebin回收站功能 */
  14. SQL> conn maclean/maclean
  15. Connected.
  16. SQL> col segment_name for a20
  17. SQL> select segment_name,bytes/1024/1024/1024 "size in Gbytes" from user_segments where segment_name='TV';
  18. SEGMENT_NAME size in Gbytes
  19. -------------------- --------------
  20. TV 547.25
  21. SQL> select NUM_ROWS,BLOCKS from user_tables where table_name='TV';
  22. NUM_ROWS BLOCKS
  23. ---------- ----------
  24. 859150100 65649786
  25. SQL> desc tv;
  26. Name Null? Type
  27. ----------------------------------------- -------- ----------------------------
  28. OWNER VARCHAR2(30)
  29. OBJECT_NAME VARCHAR2(128)
  30. SUBOBJECT_NAME VARCHAR2(30)
  31. OBJECT_ID NUMBER
  32. DATA_OBJECT_ID NUMBER
  33. OBJECT_TYPE VARCHAR2(19)
  34. CREATED DATE
  35. LAST_DDL_TIME DATE
  36. TIMESTAMP VARCHAR2(19)
  37. STATUS VARCHAR2(7)
  38. TEMPORARY VARCHAR2(1)
  39. GENERATED VARCHAR2(1)
  40. SECONDARY VARCHAR2(1)
  41. SPARE1 CLOB
  42. SPARE2 CLOB
  43. SPARE3 CLOB
  44. SPARE4 BLOB
  45. /* 该大表包含CLOB、BLOB2种大对象,共859150100行数据,占用65649786个块
  46. 其所在是一个大文件表空间(bigfile tablespace),本地区间管理方式,区间大小统一为128MB
  47. */
  48. SQL> col tablespace_name for a2
  49. SQL> select relative_fno,header_block,owner,tablespace_name from dba_segments where segment_name='TV';
  50. RELATIVE_FNO HEADER_BLOCK OWNER TA
  51. ------------ ------------ ------------------------------ --
  52. 1024 82 MACLEAN BF
  53. /* 因为是用bigfile tablespace技术,故数据段所在相对数据文件号为1024 */
  54. SQL> col segment_name for a30
  55. SQL> col owner for a10
  56. SQL> select owner,segment_name,segment_type,header_block from dba_segments where relative_fno=1024;
  57. OWNER SEGMENT_NAME SEGMENT_TYPE HEADER_BLOCK
  58. ---------- ------------------------------ ------------------ ------------
  59. MACLEAN TV TABLE 82
  60. MACLEAN SYS_IL0000057409C00014$$ LOBINDEX 32850
  61. MACLEAN SYS_IL0000057409C00015$$ LOBINDEX 65618
  62. MACLEAN SYS_IL0000057409C00016$$ LOBINDEX 98386
  63. MACLEAN SYS_IL0000057409C00017$$ LOBINDEX 131154
  64. MACLEAN SYS_LOB0000057409C00014$$ LOBSEGMENT 16466
  65. MACLEAN SYS_LOB0000057409C00015$$ LOBSEGMENT 49234
  66. MACLEAN SYS_LOB0000057409C00016$$ LOBSEGMENT 82002
  67. MACLEAN SYS_LOB0000057409C00017$$ LOBSEGMENT 114770
  68. 9 rows selected.
  69. /* 该bigfile数据文件1024上的数据段如上包括TV表本身以及LOB对象和LOB索引 */
  70. SQL> select current_scn from v$database;
  71. CURRENT_SCN
  72. -----------
  73. 44989856
  74. /* 获取当前scn以便闪回数据库 */
  75. SQL> alter session set events '10046 trace name context forever,level 12';
  76. Session altered.
  77. SQL> set timing on;
  78. SQL> drop table tv;
  79. Table dropped.
  80. Elapsed: 00:00:01.21
  81. /* 虽然是550G的大表,但drop也仅耗时1.21s再次证明了drop仅仅是修改数据字典 */
  82. 通过tkprof分析的trace文件信息:
  83. drop table tv
  84. call count cpu elapsed disk query current rows
  85. ------- ------ -------- ---------- ---------- ---------- ---------- ----------
  86. Parse 1 0.00 0.00 0 0 0 0
  87. Execute 1 0.12 0.29 28 9 30163 0
  88. Fetch 0 0.00 0.00 0 0 0 0
  89. ------- ------ -------- ---------- ---------- ---------- ---------- ----------
  90. total 2 0.12 0.29 28 9 30163 0
  91. Misses in library cache during parse: 1
  92. Optimizer mode: ALL_ROWS
  93. Parsing user id: 64
  94. Elapsed times include waiting on following events:
  95. Event waited on Times Max. Wait Total Waited
  96. ---------------------------------------- Waited ---------- ------------
  97. db file sequential read 28 0.00 0.00
  98. rdbms ipc reply 10 0.01 0.06
  99. reliable message 8 0.00 0.00
  100. enq: RO - fast object reuse 8 0.00 0.00
  101. write complete waits 9 0.04 0.10
  102. log file sync 1 0.00 0.00
  103. SQL*Net message to client 1 0.00 0.00
  104. SQL*Net message from client 1 7.22 7.22

以上可以看到少量的等待事件,drop要求所被drop对象先做object对象级别的checkpoint检查点,以便将脏块写出;故而会出现Write complete waits(A user wants to modify a block that is part of DBWR

发表评论

表情:
评论列表 (有 0 条评论,570人围观)

还没有评论,来说两句吧...

相关阅读