测试2——表空间管理 段空间管理 段收缩测试

简介: 表空间的管理  --简要语法:     CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name     DATAFILE datafile spec | TE...

表空间的管理

 --简要语法:

    CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name

    DATAFILE datafile spec | TEMPFILE tempfile spec

    [MINIMUM EXTENT minimum extent size]

    [BLOCKSIZE blocksize]

    [[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]

    [LOGGING|NOLOGGING]

    [FORCE LOGGING]

    [ONLINE|OFFLINE]

    [EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]

    [SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

    [FLASHBACK ON|OFF]


注意标红的部分,EXTENT管理,也就是所谓的表空间管理;而SEGMENT管理就是所谓的段空间管理。我们稍后会做一个段空间收缩的实验。

字典管理:oracle 8i(不包括i),只存在一种表空间的管理模式,即字典管理表空间(DMT),DMT是指oracle的空间分配或回收是通过数据库中的数据字典表来记录和管理的,用于管理的两个数据字典表分别是:UET$used extents)FET$(freeextents) 。其工作方式是:当建立一个新的段或者段在表空间时,oracle通过一系列的SQL语句来完成这个工作; 且和前面的两个字典表有关,在繁忙的系统中会造成竞争和等待(另一个DMT会带来的问题是空间碎片)(DMT已经废弃了)

      

    本地管理(LMT):   在9iR2版本后成了默认的选项

       LMT在表空间的数据文件头部加入了一个位图区域,在其中记录每个extent的使用状况

       extent被使用或者被释放,oracle会更新头部的记录来反映这个变化,不产生回滚信息

        因为仅仅操作数据文件头部的几个数据块,不用操作数据字典,LMTDMT要快,尤其是在繁忙的时候更明显

在每个表空间的数据文件的头部加入了一个位图区域 
一个段的第一个区的第一个块是first level bitmap block 
第二个块是second level bitmap block 
第三个块才是段头块 
这两个块是用来管理freeblock 

若为自动分配,则Oracle会按照递增算法来分配空间 
如果选择统一尺寸,还可以详细指定每个区间的大小 
dba_extents这个视图可以看到哪些对象分配了多少区间 


段空间管理:

从9i开始,段空间管理有两种: 
①MSSM:由你设置freelists、freelistgroups、pctused、pctfree、initrans等参数来控制如何分配、使用段中的空间 
②ASSM:你只需控制一个参数pctfree,其他参数即使建了也将被忽略 



(1)freelist和freelistgroup

使用MSSM表空间管理时,Oracle会在freelist中为有自由空间的对象维护HWM以下的块 
freelist和freelistgroup在ASSM表空间中根本不存在,仅在MSSM表空间使用这个技术 


(2)pctfree和pctused 
pctfree告诉Oracle:块上应该保留多大的空间来完成将来的更新 
对于MSSM,她控制着块何时放入freelist中,以及何时从freelist中取出。 如果大于pctfree,则这个块会一直在freelist上 
对于ASSM,因为ASSM根本不使用freelist。在ASSM中,pctused也将被忽略。 
但她仍然会限制能否将一个新行插入到一个块中 .
适当的设置pctfree有助于减小行迁移 .


⑶initrans 
无论是ASSM  or  MSSM这个参数仍然有效 
块头的事务槽的初始化大小有对象的initrans指定


实验:shrink命令完成段收缩

从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM.这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报ORA-10635: Invalid segment or tablespace type.

在这里,我们来讨论如和对一个ASSM的segment回收浪费的空间.

同样,我们用系统视图all_objects来在tablespace ASSM上创建测试表my_objects,这一小节的内容,

实验环境为oracle11.2.0.3:

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production


[oracle@lyg ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu Apr 10 14:31:45 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

创建测试表空间:

SQL>   CREATE  TABLESPACE ASSMTEST
    DATAFILE '/u01/app/oracle/oradata/test/assmtest01.dbf' size 50m  2  ;

Tablespace created.


SQL> create user assmtest identified by assm default tablespace ASSMTEST;
User created.


SQL>   grant connect,resource to assmtest;
Grant succeeded.


创建测试用户:

SQL> grant dba to assmtest;
Grant succeeded.


SQL> conn assmtest/assm
Connected.


SQL> create table my_objects as select * from dba_objects;
Table created.

查看表空间管理状态:

select TABLESPACE_NAME,BLOCK_SIZE,EXTENT_MANAGEMENT,ALLOCATION_TYPE, SEGMENT_SPACE_MANAGEMENT 
from dba_tablespaces where TABLESPACE_NAME = 'ASSMTEST';

然后我们随机地从table MY_OBJECTS中删除一部分数据:
SQL>select count(*) from my_objects;
COUNT(*)
----------

74582


SQL>delete from my_objects where object_name like '%C%';

27523 rows deleted.


SQL>delete from my_objects where object_name like '%U%';

6632 rows deleted.


SQL> delete from my_objects where object_name like '%A%';

10828 rows deleted.

现在我们使用show_space和show_space_assm来看看my_objects的数据存储状况:

SQL>exec show_space('MY_OBJECTS','ASSMTEST');
SQL> exec show_space('MY_OBJECTS','ASSMTEST');
Unformatted Blocks  ....................     0
FS1 Blocks (0-25)   ....................       0
FS2 Blocks (25-50)  ....................     330
FS3 Blocks (50-75)  ....................     270
FS4 Blocks (75-100) ....................    398
Full Blocks    ....................      65
Total Blocks ...........................       1,152
Total Bytes  ...........................              9,437,184
Total MBytes ...........................       9
Unused Blocks...........................      63
Unused Bytes ...........................       516,096
Last Used Ext FileId....................      8
Last Used Ext BlockId..................    1,152
Last Used Block.........................      65

PL/SQL procedure successfully completed.


SQL>exec show_space_assm('MY_OBJECTS','ASSMTEST');
SQL> exec show_space_assm('MY_OBJECTS','ASSMTEST');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............330
free space 50-75% Blocks:...............270
free space 75-100% Blocks:..............398
Full Blocks:............................65
Unformatted blocks:.....................0

PL/SQL procedure successfully completed.


这里,table my_objects的HWM下有1151个block,其中,free space为25-50%的block有330个,free space为50-75%的block有270个,free space为75-100%的block有398个,full space的block只有65个,这种情况下,我们需要对这个table的现有数据行进行重组.

要使用assm上的shink,首先我们需要使该表支持行移动,可以用这样的命令来完成:

SQL>alter table my_objects enable row movement;

现在,就可以来降低my_objects的HWM,回收空间了,使用命令:
SQL>   alter table my_objects shrink space;

表已更改.


我们具体的看一下实验的结果:

SQL> exec show_space('MY_OBJECTS','ASSMTEST');
Unformatted Blocks  .................... 0
FS1 Blocks (0-25)   ....................       0
FS2 Blocks (25-50)  ....................      1
FS3 Blocks (50-75)  ....................      1
FS4 Blocks (75-100) .................... 0
Full Blocks    ....................     427
Total Blocks ...........................     448
Total Bytes  ...........................           3,670,016
Total MBytes ...........................       3
Unused Blocks...........................       3
Unused Bytes ...........................       24,576
Last Used Ext FileId.................... 8
Last Used Ext BlockId................... 512
Last Used Block.........................      61
PL/SQL 过程已成功完成.
SQL> exec show_space_assm('MY_OBJECTS','ASSMTEST');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............1
free space 50-75% Blocks:...............1
free space 75-100% Blocks:..............0
Full Blocks:.........................................427
Unformatted blocks:.....................0

PL/SQL 过程已成功完成. 


在执行完shrink命令后,我们可以看到,table my_objects的HWM现在降到了447的位置,而且HWM下的block的空间使用状况,full space的block有249个,free space 为25-50%Block只有1个.


相关文章
|
7月前
|
测试技术 API
使用 Postman 工具高效管理和测试 SAP ABAP OData 服务的试读版
使用 Postman 工具高效管理和测试 SAP ABAP OData 服务的试读版
78 1
|
2月前
|
JSON 前端开发 测试技术
接口管理测试繁琐复杂?何不试试Eolink
接口管理测试繁琐复杂?何不试试Eolink
23 0
|
3月前
|
前端开发 JavaScript API
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
41 0
|
4月前
|
算法 关系型数据库 API
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
42 0
|
4月前
|
测试技术
『测试基础』| 如何理解测试用例管理和缺陷管理?
『测试基础』| 如何理解测试用例管理和缺陷管理?
113 1
|
Java 测试技术 开发工具
软件测试技术实战 设计、工具及管理》联载-36
软件测试技术实战 设计、工具及管理》联载-36
89 0
软件测试技术实战 设计、工具及管理》联载-36
|
JSON 前端开发 测试技术
|
前端开发 测试技术
|
机器学习/深度学习 传感器 自动驾驶
|
测试技术 数据格式 Python
SolrCloud空间搜索测试
空间查询是是利用点,线和多边形等地理信息获得满足特定空间关系的数据,广泛应用于新型农业、零售、服务和安全等领域。本文的业务背景也是基于活动轨迹的多边形查询。
1736 0