目录
优化空间,不是为了解决空间,而是为了提高效率
一、描述和使用节省空间的Oracle数据库功能
1、空间管理功能
(1)空间由Oracle数据库服务器自动管理。它会生成警报并建议可能的解决方案。
(2)空间管理功能包括:
-Oracle托管文件(OMF) -使用位图(“本地管理”)和自动数据文件进行自由空间管理扩展 -积极主动的空间管理(默认阈值和服务器生成的警报) -空间回收(收缩段、在线表重新定义) -能力规划(增长报告)
2、块空间管理
3、行链接和迁移
更新时:行长度增加,超过块中可用的可用空间。 数据需要存储在新块中。 行的原始物理标识符(ROWID)为保存下来。 Oracle数据库服务器需要读取两个块来检索数据。 区段顾问查找包含以下内容的区段迁移的行,进行自动优化。 碎片自动合并块内的空闲空间。
4、段内的可用空间管理
5、分配区(自动管理)
在数据文件的位图中搜索所需数量的相邻空闲块
带存储子句的扩展尺寸: -UNIFORM (自动分配,AUTOALLOCATE ) 查看扩展区映射 获取解除分配建议
6、使用不可用的索引
(1)考虑使用不可用的索引来提高大容量负载的性能。
(2)优化器忽略不可用的索引。
(3)创建不可用索引时,不创建段:
CREATE INDEX test i1 ON seg test(c) UNUSABLE
(4)当现有索弓|被更改为不可用时,段将被删除:
ALTER INDEX test i UNUSABLE
(5)无法使用的索引可以重新生成,使其再次有效: .
ALTER INDEX test i REBUILD
7、使用临时表
(1)临时表包含事务或会话持续时间的数据。
(2)临时表的类型:
-Global :表定义对所有会话都可见;内容特定于会话。 -private:表定义仅对创建会话可见。
(3)临时表的段在INSERT or CREATE TABLE AS SELECT的第一个语句到达时分配。
(4)表定义在回滚后保持不变。
(5)事务特定的临时表一次只能由一 个事务使用。
8、创建全局临时表
(1)使用“CREATE GLOBAL TEMPORARY TABLE"创建全局临时表声明。
(2)指定全局临时表是否应用于事务或会话,方法是使用ON COMMIT子句:
-事务特定(默认值) : 提交时删除行
-特定于会话:在提交保留行时
(3)示例: .
SQL> CREATE GLOBAL TEMPORARY TABLE trans buff area (date1 DATE) ON COMMIT DELETE ROWS ;
9、创建专用临时表
(1)使用“创建专用临时表”创建专用临时表声明。
(2)表名必须以ORA$PTT_开头:
PRIVATE_TEMP_TABLEPREFIX= =ora$ptt_
SQL> CREATE PRIVATE TEMPORARY TABLE ORASPTT mine (c1 DATE,.... c3 NUMBER(10,2) ) ;
(3)CREATE PRIVATE临时表语句不提交事务。
(4)两个并发会话可能有一个具有相同名称的专用临时表,但各自拥有。
(5)私有临时表定义和内容在会话或事务层面。
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT mine (c1 DATE ..ON COMMIT PRESERVE DEFINITION; SQL> DROP TABLE ORA$PTT mine ;
二、使用段收缩功能从表和索引|中回收浪费的空间
1、表压缩
(1)压缩作用
随着数据库不断增长,可以考虑使用表压缩。压缩可以节省磁盘空间,减少数据库buffer
cache内存使用,并且可以加速查询。 压缩对于数据装载和DML操作有一定的CPU消耗。然而,这些消耗可以为I/O的减少而抵消。
(2)基本压缩特点:
--使用基本压缩,只有当数据是直接路径插入或更新记录(direct-path insert and updated)时才会发生压缩。 并且支持有线的数据类型和SQL操作。
(3)如何启用基本压缩?
1)通过create table语句中指定compress条件。 2)通过alter table .. compress; 来给现有表启用压缩; 3)通过alter table .. nocompress; 来禁用表压缩
(4)通过压缩所有数据降低存储成本:
--直接路径插入操作的基本压缩: 10倍 --用于所有DML操作的高级行压缩:2 -4倍
(5)对比
(6)压缩过程
2、直接路径插入操作的压缩(推荐OLAP数据仓库中的压缩)
通过创建表.. .压缩基本功能启用 推荐用于批量装载数据仓库 以块为单位最大限度地利用连续可用空间
3、DML操作的高级行压缩(推荐OLTP交易型数据库)
通过“CREATE TABLE ... ROW STORE COMPRESS ADVANCED启用 推荐用于活动OLTP环境
4、指定表压缩
(1)您可以为以下内容指定表压缩:
--整个堆组织表 --分区表(每个分区可以有不同的压缩类型或级别) --嵌套表的存储
(2)您不能:
-对列数超过255列的表指定基本和高级行压缩 -如果压缩表以便直接加载,则删除列,但如果表提前行是否已压缩(???)
5、使用压缩顾问(Use compression Advisor)
(1)分析对象,以估计不同压缩方式节省的空间
(2)帮助确定应用程序的正确压缩级别
推荐各种压缩策略 -为特定数据集选择正确的压缩算法 -对特定列进行排序,以提高压缩比 -在不同压缩算法之间的折衷
三、解决空间使用问题
1、空间警告
2、通过以下方式解决空间使用问题:
-添加或调整数据文件的大小
-将AUTOEXTEND设置为ON
-缩小对象
-减少撤消保留
3、检查临时表空间中是否有长时间运行的查询。
4、通过收缩段回收空间
(1)收缩是一种在线、到位的操作。
(2)它仅适用于驻留在ASSM表空间中的段。
(3)候选细分类型:
--堆组织的表和索引|组织的表--索引 --分区和分分区 --物化视图和物化视图日志
5、收缩段
前提:
(1)对表开启rowmoment行迁移功能
(2)对表进行行迁移(此收缩过程可以发出DML操作和查询)
SQL>alter table employees shrink space compact;
(3)收缩空间(水位线下移)
SQL>alter table employees shrink space;
6、收缩操作的结果
(1)提高性能和空间利用率 (2)维护索弓| (3)未执行触发器 (4)可减少迁移行数 (5)在推荐的IOT上重建辅助索引
四、管理可恢复空间分配
1、可恢复的声明:
(1)使您可以挂起大型操作而不是接收错误
(2)使您有机会在操作暂停时修复问题,而不是重新开始
(3)在下列情况下暂停:
-空间不足 -达到的最大范围 -超出空间配额
(4)可多次暂停和恢复
(5)查询、DML操作和某些DDL操作可以在遇到以下情况时恢复以避免空间不足的错误:
可恢复语句可以通过SQL、PL/SQL、 SQL*Loader和数据泵实用程序,或Oracle调用接口(OCI)发出
(6)语也只有在其会话已由以下项之一启用时才以可恢复模式执行以下操作:
--RESUMABLE_TIMEOUT初始化参数设置为非零值。 --发出ALTER SESSION ENABLE RESUMABLE语句。
2、恢复挂起的语句
3、哪些操作可以恢复
以下操作可恢复:
1、查询:
选择用完临时空间的语句(用于排序区域)
2、DML
INSERT、UPDATE和DEL .ETE语句
3、以下DDL语句:
--创建表...作为SELECT --创建索引| --更改索引..重新生成. --更改表...移动分区 --更改表.. .拆分分区 --更改索引..重新生成分区 --更改索引...拆分分区 --创建物化视图