通过实验可以得知:
1.对于,即便没有真正数据,建表之后也会预分配空间
2.disable 主键取消索引空间,当重新enable,空间会发生变化。
3.PCTINCREASE参数,我经过实验,没有效果。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
col SEGMENT_NAME format a20;
col PARTITION_NAME format a20;
col PARTITION_NAME format a10;
col TABLESPACE_NAME format a20;
1.创建一个表,并添加主键
test@CISCOSYS>
create
table
t1 (id
int
,
name
varchar2(32));
表已创建。
test@CISCOSYS>
alter
table
t1
add
constraint
pk_t1
primary
key
(id);
表已更改。
虽然还没有存储数据,但表及新建的索引均已分配了空间
test@CISCOSYS>
select
SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3 BLOCKS,EXTENTS ,INITIAL_EXTENT,
4 NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5
from
user_segments
6
where
segment_name
in
(
'T1'
,
'PK_T1'
);
SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1
TABLE
USERS 65536 8 1 65536 1 2147483645
PK_T1
INDEX
USERS 65536 8 1 65536 1 2147483645
系统默认的块大小
test@CISCOSYS> show parameter db_block_size;
NAME
TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size
integer
8192(bytes)=8K
BYTES=BLOCKS*db_block_size
初始化10000条数据
test@CISCOSYS>
insert
into
t1
select
level
,
'n'
||
level
from
dual
connect
by
level
<=10000;
已创建10000行。
test@CISCOSYS>
commit
;
提交完成。
数据初始化后,索引及表的空间均增加了
test@CISCOSYS>
select
SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3 BLOCKS,EXTENTS ,INITIAL_EXTENT,
4 NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5
from
user_segments
where
segment_name
in
(
'T1'
,
'PK_T1'
);
SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1
TABLE
USERS 262144 32 4 65536 1 2147483645
PK_T1
INDEX
USERS 196608 24 3 65536 1 2147483645
同时,可以看出系统的一个区,有8个块组成!
--------------------------------------------------------------------
将主键置为diable ,主键在段内就不能查询了,也就意味着索引删除了
test@CISCOSYS>
alter
table
t1 disable
constraint
pk_t1;
表已更改。
test@CISCOSYS>
select
SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3 BLOCKS,EXTENTS ,INITIAL_EXTENT,
4 NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5
from
user_segments
where
segment_name
in
(
'T1'
,
'PK_T1'
);
SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1
TABLE
USERS 262144 32 4 65536 1 2147483645
重新启用又查询到了,同时发现索引占的空间增加了!!!
test@CISCOSYS>
alter
table
t1 enable
constraint
pk_t1;
表已更改。
test@CISCOSYS>
select
SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3 BLOCKS,EXTENTS ,INITIAL_EXTENT,
4 NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5
from
user_segments
where
segment_name
in
(
'T1'
,
'PK_T1'
);
SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1
TABLE
USERS 262144 32 4 65536 1 2147483645
PK_T1
INDEX
USERS 262144 32 4 65536 1 2147483645
设置最初的并发事务条目(块级别)
test@CISCOSYS>
alter
table
t1 INITRANS 4;
表已更改。
查询确认
test@CISCOSYS>
SELECT
2 TABLE_NAME,
3 PCT_FREE,
4 PCT_USED,
5 INI_TRANS,
6 MAX_TRANS,
7 INITIAL_EXTENT
8
from
dba_tables
where
table_name =
'T1'
;
TABLE_NAME PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT
---------- ---------- ---------- ---------- ---------- --------------
T1 10 4 255 65536
设置PCTUSED 参数(对于块,低于这个值,才可以插入,默认为40)
PCTFREE,PCTUSED两个参数配合使用。
如果一个块的可用空间小于PCTFREE,那么不允许再插入,只能更新,删除。
当删除若干数据时,可用空间低于PCTUSED,允许插入。
test@CISCOSYS>
alter
table
t1 storage(
next
50k)
2 ;
alter
table
t1 storage(
next
50k)
*
第 1 行出现错误:
ORA-25150: 不允许对区参数执行 ALTERING
表空间使用本地管理,其中的表不能修改
NEXT
MAXEXTENTS和PCTINCREASE参数
sys@CISCOSYS>
create
table
t2(id
int
,
name
varchar2(32)) storage(initial 10k);
表已创建。
SELECT
TABLE_NAME,
PCT_FREE,
PCT_USED,
INI_TRANS,
MAX_TRANS,
INITIAL_EXTENT
from
dba_tables
where
table_name
in
(
'T1'
,
'T2'
,
'T3'
);
test@CISCOSYS>
SELECT
2 TABLE_NAME,
3 PCT_FREE,
4 PCT_USED,
5 INI_TRANS,
6 MAX_TRANS,
7 INITIAL_EXTENT
8
from
dba_tables
where
table_name
in
(
'T1'
,
'T2'
,
'T3'
);
TABLE_NAME PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT
---------- ---------- ---------- ---------- ---------- --------------
T2 10 40 1 255 16384
T3 10 1 255 65536
T1 10 4 255 65536
select
SEGMENT_NAME ,PARTITION_NAME ,
SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
BLOCKS,EXTENTS ,INITIAL_EXTENT,
NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
from
dba_segments
where
segment_name
in
(
'T3'
,
'T2'
,
'T3);
指定的initial=17K.系统会根据系统指定块大小,最近的整数倍(2*8<17k<3*8)
create table t4(id int,name varchar2(32)) storage(initial 17k);
test@CISCOSYS> select SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3 BLOCKS,EXTENTS ,INITIAL_EXTENT,
4 NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5 from dba_segments
6 where segment_name in ('
T3
','
T2
','
T4
');
SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T2 TABLE SYSTEM 65536 8 1 16384 1 2147483645
T3 TABLE USERS 65536 8 1 65536 1 2147483645
T4 TABLE USERS 65536 8 1 24576 1 2147483645
test@CISCOSYS> SELECT 24576/1024 from dual;
24576/1024
----------
24
明确段与块的关系
test@CISCOSYS> select * from dba_extents where segment_NAME='
T1
';
OWNER SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES
------------------------------ -------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- ----------
TEST T1 TABLE USERS 0 5 721 65536
TEST T1 TABLE USERS 1 5 745 65536
TEST T1 TABLE USERS 2 5 753 65536
TEST T1 TABLE USERS 3 5 769 65536
test@CISCOSYS> SELECT SEGMENT_NAME,EXTENTS FROM DBA_SEGMENTS WHERE SEGMENT_NAME='
T1
';
SEGMENT_NAME EXTENTS
-------------------- ----------
T1 4
测试pctincrease参数(发现没有效果)
test@CISCOSYS> create table t2 (id int,name varchar2(32)) storage(pctincrease 20);
表已创建。
test@CISCOSYS> insert into t2 select level,'
name
'||level from dual connect by level <=10000;
已创建10000行。
test@CISCOSYS> commit;
提交完成。
test@CISCOSYS> select * from dba_extents where segment_NAME='
T2';
OWNER SEGMENT_NAME PARTITION_ SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS RE
------------------------------ -------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- ---------- ----------
SYS T2
TABLE
SYSTEM 0 1 59497 65536 8
TEST T2
TABLE
USERS 0 4 5793 65536 8
TEST T2
TABLE
USERS 1 4 5801 65536 8
TEST T2
TABLE
USERS 2 4 5809 65536 8
TEST T2
TABLE
USERS 3 4 5817 65536 8
|
本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1351887,如需转载请自行联系原作者