问题描述
你好,
我有2个表T1和T2:
T2为空。
然后我将T1复制到T2中:
当我检查这两个表的数据占用时 (使用user_segments-在T2的情况下,我也将LOB分区和索引求和),T2要大得多: T2 57.19mb (T2-57MB,LOB分区0.13mb,LOB索引0.06mb) vs T1 18mb。
为什么T2比T1大得多,即使存储的信息是相同的?
是否可以更改T2的定义或其他数据库选项以减小T2的大小?
致以最诚挚的问候,
格雷格
额外信息:
声明的结果
TRUNC (长度 (M_PARAM)/50) 计数 (*)
-----------------------------
0 325983
1 3975
2 16755
3 61
4 352
5 492
6 1785
7 25645
8 47209
9 1602
10 2092
11 50
12 75
13 5
15 5
16 5
我忘了提到T1有更多的分区,但我确实复制了唯一的分区。
致以最诚挚的问候,
格雷格
我有2个表T1和T2:
CREATE TABLE "T1" ("DATE_M" DATE, "ID" VARCHAR2(20), "ADDR" VARCHAR2(17), "VER" VARCHAR2(50), "MODEL" VARCHAR2(10), "ADD_I" VARCHAR2(10), "SN" VARCHAR2(15), "MODE" VARCHAR2(5), "DATE_T" DATE, "M_TYPE" VARCHAR2(50), "M_PARAM" VARCHAR2(2500) ) SEGMENT CREATION IMMEDIATE PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 COMPRESS BASIC NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TS" PARTITION BY RANGE ("DATE_T") (PARTITION "P_1" VALUES LESS THAN (TO_DATE(' 2016-07-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 COMPRESS BASIC NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TS" ) CREATE TABLE T2 ("LD_ID" DATE, "DATE_M" DATE, "ID" VARCHAR2(20), "ADDR" VARCHAR2(17), "VER" VARCHAR2(50), "MODEL" VARCHAR2(10), "ADD_I" VARCHAR2(10), "SN" VARCHAR2(15), "MODE" VARCHAR2(5), "DATE_T" TIMESTAMP (6), "M_TYPE" VARCHAR2(50), "M_PARAM" CLOB ) SEGMENT CREATION IMMEDIATE PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 COMPRESS BASIC NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TS" LOB ("M_PARAM") STORE AS SECUREFILE ( ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE NOLOGGING COMPRESS MEDIUM KEEP_DUPLICATES STORAGE(INITIAL 65536 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) PARTITION BY RANGE ("DATE_T") (PARTITION "P_1" VALUES LESS THAN (TIMESTAMP' 2017-03-03 00:00:00') SEGMENT CREATION IMMEDIATE PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 COMPRESS BASIC NOLOGGING STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TS" LOB ("M_PARAM") STORE AS SECUREFILE ( TABLESPACE "TS" ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE NOLOGGING COMPRESS MEDIUM KEEP_DUPLICATES STORAGE(INITIAL 65536 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) )复制
T2为空。
然后我将T1复制到T2中:
insert /*+ append */ into T2 (DATE_M,ID,ADDR,VER,MODEL,ADD_I,SN,MODE,DATE_T,M_TYPE,M_PARAM) select * from T1 partition(P_1)复制
当我检查这两个表的数据占用时 (使用user_segments-在T2的情况下,我也将LOB分区和索引求和),T2要大得多: T2 57.19mb (T2-57MB,LOB分区0.13mb,LOB索引0.06mb) vs T1 18mb。
为什么T2比T1大得多,即使存储的信息是相同的?
是否可以更改T2的定义或其他数据库选项以减小T2的大小?
致以最诚挚的问候,
格雷格
额外信息:
声明的结果
select trunc(length(M_PARAM)/50), count(*) from t1 group by trunc(length(M_PARAM)/50) order by 1复制
TRUNC (长度 (M_PARAM)/50) 计数 (*)
-----------------------------
0 325983
1 3975
2 16755
3 61
4 352
5 492
6 1785
7 25645
8 47209
9 1602
10 2092
11 50
12 75
13 5
15 5
16 5
我忘了提到T1有更多的分区,但我确实复制了唯一的分区。
致以最诚挚的问候,
格雷格
专家解答
抱歉-我不能复制你的结果。我把一切都放在一个名为DEMO的空表空间中:
大约有55兆数据。现在我会的
-创建T2
-将数据复制到其中
-下降T1
所以演示中唯一剩下的就是T2段。
所以我只看到了其中的一小部分。现在这是可以预料的,因为我的lob很容易压缩,但是我看不到您会增长的人 * 除非 * 默认情况下将您的范围大小选择为较大。
因此,深入研究xxx_EXTENTS并检查每个区域的大小。
SQL> CREATE TABLE T1 2 (DATE_M DATE, ID VARCHAR2(20), 3 ADDR VARCHAR2(17), VER VARCHAR2(50), 4 MODEL VARCHAR2(10), ADD_I VARCHAR2(10), 5 SN VARCHAR2(15), XMODE VARCHAR2(5), 6 DATE_T DATE, 7 M_TYPE VARCHAR2(50), 8 M_PARAM VARCHAR2(2500) 9 ) SEGMENT CREATION IMMEDIATE 10 PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 11 COMPRESS BASIC NOLOGGING 12 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 13 PCTINCREASE 0 14 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 15 tablespace demo 16 PARTITION BY RANGE (DATE_T) 17 (PARTITION P_1 VALUES LESS THAN (TO_DATE(' 2016-07-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE 18 PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 19 COMPRESS BASIC NOLOGGING 20 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 21 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 22 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 23 tablespace demo ); Table created. SQL> SQL> insert /*+ append */ into t1 2 select date '2016-07-27'-rownum/100,rownum, 3 'address','ver', 4 'model','addi', 5 'sn','mode', 6 date '2016-07-27'-rownum/100, 7 'type', 8 rpad(rownum,1+mod(rownum,10)*100,'x') 9 from dual 10 connect by level <= 100000; 100000 rows created. SQL> SQL> commit; Commit complete. SQL> SQL> col partition_name format a30 SQL> SQL> select 2 partition_name,bytes 3 from user_extents 4 where tablespace_name = 'DEMO'; PARTITION_NAME BYTES ------------------------------ ---------- P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 65536 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 68 rows selected. SQL> SQL> select bytes from user_segments 2 where tablespace_name = 'DEMO'; BYTES ---------- 55574528 1 row selected.复制
大约有55兆数据。现在我会的
-创建T2
-将数据复制到其中
-下降T1
所以演示中唯一剩下的就是T2段。
SQL> SQL> CREATE TABLE T2 2 (LD_ID DATE, DATE_M DATE, 3 ID VARCHAR2(20), ADDR VARCHAR2(17), 4 VER VARCHAR2(50), MODEL VARCHAR2(10), 5 ADD_I VARCHAR2(10), SN VARCHAR2(15), XMODE VARCHAR2(5), 6 DATE_T TIMESTAMP (6), 7 M_TYPE VARCHAR2(50), 8 M_PARAM CLOB 9 ) SEGMENT CREATION IMMEDIATE 10 PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 11 COMPRESS BASIC NOLOGGING 12 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 13 PCTINCREASE 0 14 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 15 tablespace demo 16 LOB (M_PARAM) STORE AS SECUREFILE ( 17 ENABLE STORAGE IN ROW CHUNK 8192 18 NOCACHE NOLOGGING COMPRESS MEDIUM KEEP_DUPLICATES 19 STORAGE(INITIAL 65536 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 20 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) 21 PARTITION BY RANGE (DATE_T) 22 (PARTITION P_1 VALUES LESS THAN (TIMESTAMP' 2017-03-03 00:00:00') SEGMENT CREATION IMMEDIATE 23 PCTFREE 1 PCTUSED 99 INITRANS 1 MAXTRANS 255 24 COMPRESS BASIC NOLOGGING 25 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 26 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 27 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 28 tablespace demo 29 LOB (M_PARAM) STORE AS SECUREFILE ( 30 tablespace demo ENABLE STORAGE IN ROW CHUNK 8192 31 NOCACHE NOLOGGING COMPRESS MEDIUM KEEP_DUPLICATES 32 STORAGE(INITIAL 65536 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 33 PCTINCREASE 0 34 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ) ; Table created. SQL> SQL> SQL> insert /*+ append */ into T2 (DATE_M,ID,ADDR,VER,MODEL,ADD_I,SN,XMODE,DATE_T,M_TYPE,M_PARAM) 2 select * from T1 ; 100000 rows created. SQL> SQL> commit; Commit complete. SQL> SQL> drop table t1 purge; Table dropped. SQL> SQL> select 2 partition_name,bytes 3 from user_extents 4 where tablespace_name = 'DEMO'; PARTITION_NAME BYTES ------------------------------ ---------- P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 P_1 1048576 SYS_IL_P1018 65536 SYS_LOB_P1017 131072 12 rows selected. SQL> SQL> select bytes from user_segments 2 where tablespace_name = 'DEMO'; BYTES ---------- 10485760 65536 131072 3 rows selected. SQL> SQL>复制
所以我只看到了其中的一小部分。现在这是可以预料的,因为我的lob很容易压缩,但是我看不到您会增长的人 * 除非 * 默认情况下将您的范围大小选择为较大。
因此,深入研究xxx_EXTENTS并检查每个区域的大小。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
623次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
611次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
508次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
495次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
472次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
448次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
442次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
440次阅读
2025-04-30 12:17:56
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
438次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
390次阅读
2025-04-17 09:30:30