ORACLE大数据业务表空间碎片化问题

[复制链接]
查看11 | 回复9 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
情景:ORACLE11g中,表空间使用率在60%左右,数据入库不了。报
ORA-01658: unable to create INITIAL extent for segment in tablespace DATA_0000
对数据库做查询:
SQL> ttitle -
SQL> center'Database Freespace Summary'skip 2
2
SQL> comp sum of nfrags totsiz avasiz on report
SQL> break on report
SQL> set pages 999
SQL> col tsnameformat a16 justify c heading 'Tablespace'
SQL> col nfragsformat 999,990 justify c heading 'Free|Frags'
SQL> col mxfragformat 999,999 justify c heading 'Largest|Frag (MB)'
SQL> col totsizformat 999,999 justify c heading 'Total|(MB)'
SQL> col avasizformat 999,999 justify c heading 'Available|(MB)'
SQL> col pctusdformat 990 justify c heading 'Pct|Used'
SQL>
SQL> select total.TABLESPACE_NAME tsname,
2 D nfrags,
3
C/1024/1024 mxfrag,
4
A/1024/1024 totsiz,
5 B/1024/1024 avasiz,
6
(1-nvl(B,0)/A)*100 pctusd
7 from
8(select sum(bytes) A,
9
tablespace_name
10
from dba_data_files
11
group by tablespace_name) TOTAL,
12 (select sum(bytes) B,
13
max(bytes) C,
14
count(bytes) D,
15
tablespace_name
16
from dba_free_space
17
group by tablespace_name) FREE
18where
19 total.TABLESPACE_NAME=free.TABLESPACE_NAME(+)
20 ;

TSNAME
NFRAGS MXFRAG TOTSIZ AVASIZ PCT
---------------- ---------- ---------- ---------- ---------- ---
SYSTEM
816256 130056 97986.9375 24.

657

887

756

043

6

USERS
1
4
5
420
IDX_0000
156769162569282560 7393205.93 20.

353

803

934

475

ZXT_DATA
6339216256 291840 278364.312 4.6

174

916

049

890

4

ZXT_IDX
1816256 291840 291837 0.0

010

279

605

263

157

9

TS_DSA
4206416256 10543104 5801029.87 44.

977

969

723

147

9

SYSAUX
105 195.8125 5660 1494.875 73.

588

780

918

727

9

UNDOTBS1
3057970.437522405 21573.1875 3.7

126

199

509

038

2

DATA_0000 320306516256 14730240 7626063.25 48.

228

520

037

691

2


9 rows selected

SQL>
SQL> SELECT t.tablespace_name,
2 CASE
3 WHEN t.contents = 'TEMPORARY' AND t.extent_management = 'LOCAL' THEN
4
u.bytes
5 ELSE
6
df.user_bytes - NVL(fs.bytes, 0)
7 END / 1024 / 1024 used_mb,
8 CASE
9 WHEN t.contents = 'TEMPORARY' AND t.extent_management = 'LOCAL' THEN
10
df.user_bytes - NVL(u.bytes, 0)
11 ELSE
12
NVL(fs.bytes, 0)
13 END / 1024 / 1024 free_mb,
14 fs.min_fragment / 1024 / 1024 min_fragment_mb,
15 fs.max_fragment / 1024 / 1024 max_fragment_mb,
16 (fs.bytes / 1024 / 1024) / fs.fragments avg_fragment_mb,
17 fs.fragments,
18 t.status,
19 t.contents,
20 t.logging,
21 t.extent_management,
22 t.allocation_type,
23 t.force_logging,
24 t.segment_space_management,
25 t.def_tab_compression,
26 t.retention,
27 t.bigfile
28FROM dba_tablespaces t,
29 (SELECT tablespace_name,
30
SUM(bytes) bytes,
31
MIN(min_fragment) min_fragment,
32
MAX(max_fragment) max_fragment,
33
SUM(fragments) fragments
34
FROM (SELECT tablespace_name,
35
SUM(bytes) bytes,
36
MIN(bytes) min_fragment,
37
MAX(bytes) max_fragment,
38
COUNT(*) fragments
39
FROM dba_free_space
40
GROUP BY tablespace_name
41
UNION ALL
42
SELECT tablespace_name,
43
SUM(bytes) bytes,
44
MIN(bytes) min_fragment,
45
MAX(bytes) max_fragment,
46
COUNT(*) fragments
47
FROM dba_undo_extents
48
WHERE status = 'EXPIRED'
49
GROUP BY tablespace_name)
50 GROUP BY tablespace_name) fs,
51 (SELECT tablespace_name, SUM(user_bytes) user_bytes
52
FROM dba_data_files
53 GROUP BY tablespace_name
54
UNION ALL
55
SELECT tablespace_name, SUM(user_bytes) user_bytes
56
FROM dba_temp_files
57 GROUP BY tablespace_name) df,
58 (SELECT tablespace_name, SUM(bytes_used) bytes
59
FROM gv$temp_extent_pool
60 GROUP BY tablespace_name) u
61WHERE t.tablespace_name = df.tablespace_name(+)
62 AND t.tablespace_name = fs.tablespace_name(+)
63 AND t.tablespace_name = u.tablespace_name(+)
64;

TABLESPACE_NAME
USED_MBFREE_MB MIN_FRAGMENT_MB MAX_FRAGMENT_MB AVG_FRAGMENT_MBFRAGMENTS STATUSCONTENTSLOGGING EXTENT_MANAGEMENT ALLOCATION_TYPE FORCE_LOGGING SEGMENT_SPACE_MANAGEMENT DEF_TAB_COMPRESSION RETENTION BIGFILE
------------------------------ ---------- ---------- --------------- --------------- --------------- ---------- --------- --------- --------- ----------------- --------------- ------------- ------------------------ ------------------- ----------- -------
SYSTEM
32067.0625 97986.9375
0.9375 16256 12248.3671875
8 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
MANUAL
DISABLED
NOT APPLY NO
USERS
0
4
4
4
4
1 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
IDX_0000
1889259.06 7393205.93
0.0625 16256 47.159871769929 156769 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
ZXT_DATA
13472.6875 278364.312
0.0625 16256 4.391158387493663392 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
ZXT_IDX
0 291837 15999 16256 16213.166666666 18 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
TS_DSA
4741993.06 5801006.93
0.1875 16256 137.9123442811942063 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
SYSAUX
4164.125 1494.875
0.0625195.8125 14.236904761904105 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
UNDOTBS1
331.1875 22072.8125
0.0625 7970.4375 22.755476804123970 ONLINEUNDOLOGGING LOCAL
SYSTEM
NO
MANUAL
DISABLED
NOGUARANTEE NO
DATA_0000
7104444.37 7625644.62
0.0625 16256 2.38060730012003203235 ONLINEPERMANENT LOGGING LOCAL
SYSTEM
NO
AUTO
DISABLED
NOT APPLY NO
TEMP
020478
ONLINETEMPORARY NOLOGGING LOCAL
UNIFORM NO
MANUAL
DISABLED
NOT APPLY NO

10 rows selected

SQL>
SQL> select count(distinct segment_name) from dba_extents where tablespace_name='DATA_0000';

COUNT(DISTINCTSEGMENT_NAME)
---------------------------

1234

SQL> select blocks,count(*) from dba_extents where tablespace_name='DATA_0000' group by blocks;

BLOCKS COUNT(*)
---------- ----------
61966740
832 55
736 50
1216 33
1472 35
1664 44
544 78
1120 49
1248 37
1728 29
1536 97
12 144090
178 81
82 82
156 87
138 67
70 98
184 87
212 72
114 92
86106
244 71
110 67
200 57
210 80
228 78
52 83
44104
512456
576 54
384 58
1760 35
992 31
896 45
672 38
416 50
448 49
352 44
214 68
54 99
124 79
204 78
218 62
60 86
144 90
48100
158 82
146 77
206 65
204813466
1792107
1152 33
1056 52
768268
1984 32
1088 33
1888 29
1920 24
3062983
8 201296
16 116868
74 90
238 77
66 99
172 79
190 95
216 74
50 94
58 98
76 78
232 69
226 76
222346
64 6439
1344 44
320 51
864 46
1376 38
640 36
1632 33
56 88
202 80
108 92
148 80
84 92
130 91
94 84
152 79
140 79
102 87
42 73
104 74
186 90
162 84
72 81
136 87
154 89
288147
96 4092
704 34
1824 29
608 49
2463519
78 74
46 85
132 79
116 86
236 77
98 86
40 89
208 77
323746884
256 158090
1696 36
224 2045
128 3256
1952 25
2016 33
1568 40
1440 28
1888794
2267822
2075922
198 87
164 89
68 71
220100
230 72
118 96
240 90
222 68
62 90
248 72
170 95
134 81
254 73
188 92
38 90
480 34
160 2762
1024189
1312 47
1504 22
1408 26
1600 36
1184 32
2663060
14 144175
126107
34 94
88 88
250 81
176 78
122 91
196 98
112100
142100
168 76
252 91
36 76
1280121
1856 46
192 2496
960 39
928 47
800 58
455485
10 142841
182 81
2864518
246 72
242 75
166 83
194 78
80 90
234 85
106 91
90 80
100 94
120 72
92 88
150 88
174 83
180 79

184 rows selected
free extent 过碎满足不了要求。
是运营商大数据业务的OLAP分析系统,每天新建1000张表,数据保存1--3个月,数据不会做更新删除操作,直接DROP。
IMP/EXP重建表空间的方案,因数据量太大可操作性比较低,还有其他的解决方案吗?
后续其他地方打算重新规划表空间,分出多个表空间,一个表空间存储一个月份或是更少时间的数据,直接删除表空间的方法避免同样的问题?希望大家多给我提一些解决方案。谢谢!


回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
OLAP的话,可以试着收缩一下表和索引段。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
shrink 收缩表和索引段,应该是没有意义的。
表是不停新建删除的。都是日期表,并大表的数据都是几十亿条
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
这样的场景没有遇到过,60%的使用率 就数据入不了库 可以试试收缩下表空间试试,不过话说表空间一般自动管理 好像不需要人为去做这个事情,关注。。。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
11g中是自动管理的,表空间连续的free extent也合并过,没有效果。
已经有几个省的出现这样的问题了,前期的规划没有做好。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
将DROP 改为truncate
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
試試看 ALTER TABLE table_name MOVE
保留原本配給的空間,並整理碎片
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
litb0125 发表于 2013-2-21 15:07
11g中是自动管理的,表空间连续的free extent也合并过,没有效果。
已经有几个省的出现这样的问题了,前期 ...

从设计上解决 ,不做频繁创建删除操作。。。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
litb0125 发表于 2013-2-21 15:07
11g中是自动管理的,表空间连续的free extent也合并过,没有效果。
已经有几个省的出现这样的问题了,前期 ...

从设计上解决 ,不做频繁创建删除操作。。。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
频繁创建删除操作是业务和数据量决定的。是一套信令监测系统,就是手机电话,上网等一切信息的分析系统,数据量太大。
每天创建第二天1000张日表,同时得删除过了要求的历史表。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行