本文希望通过系统地介绍这方面的有关概念 让大家能更好地规划使用数据空间 正确使用Oracle提供的有关功能特性 提高应用的执行效率
数据库空间的有效使用和维护不仅是数据库管理的重要工作 也是大多数开发人员所关心的内容 因为它直接关系到数据库性能的发挥 同时数据碎片是经常令人头疼的问题 碎片不仅造成空间的浪费 更重要的是会直接影响应 用程序的响应速度
Oracle提供了不少方法用于数据空间的使用 监控和维护 同时也在各版本中陆续对这方面的功能进行了增强 目的在于简化这方面工作的复杂度 提高应用的运行效率
一 相关概念
数据库的空间在逻辑上分为多个表空间 每个表空间则由系统中的一个或多个物理数据文件构成 Oracle存储数据的基本单位是块 其大小在建库时由DB_BLOCK_SIZE参数确定 一个或多个连续的块构成一个区片(EXTENT) 它作为数据对象存储的基本单位来使用 在Oracle中 每个基本数据对象使用的空间称为段(Segment) 段存放在唯一的表空间上 每个段实际上是一系列区片(更为准确地是数据块)的集合 每个简单数据对象对应一个段 对于分区对象如分区表 索引 则每个(子)分区对应一个段 由各个(子)分区共同构成一个完整的数据对象 因此 可以把表空间看作桶 里面放著许多段 一个段只能放在一个桶中 而不能跨越多个桶
二 表空间的使用
表空间碎片的产生
由于同一个表空间中存放有多个数据段 各个数据段可以有不同的区片尺寸 不同段的区片可以交叉存放 当这些段中的区片经过分配(如创建表) 释放(如删除表)后 就可能使表空间中原本连续的空闲数据块变成不连续 而区片必须由连续的数据块构成 这时 当某一段需要分配新的区片时 就有可能出现虽然表空间空闲数据块的总和大于所需区片的大小 但却无法找到一串连续的块来供此区片分配使用 这种情况就称为表空间的Extent Fragmentation 我们经常会遇到这种情况 明明从DBA_FREE_SPACE中计算表空间还有几百MB 但其中的某一个表却无法再扩展几个MB的空间
消除表空间碎片
Oracle在段的区片分配上为用户提供了很大的灵活性 然而如果未能正确使用创建表空间和数据对象的各个可选择参数 则在最后将不可避免的要面对区片碎片的问题 Oracle 的Bhaskar Himatsingka 和 Juan Loaiza 为此提出了SAFE(Simple Algorithm for Fragmentation Elimination )配制规则 通过遵循这套规则 区片级碎片可以完全的避免 而实际上 Oracle i引入的新特性 Local Managed Tablespace就是SAFE规则在Oracle Server的内置实现 SAFE原则概括起来包括
对每个表空间上的段使用相同的区片尺寸 段参数INITIAL=NEXT PCTINCREASE= 可以通过使用Create Tablespace 的 MINIMUM EXTENT 子句来确保分配的区片是此参数的倍数
仅在表空间级指定INITIAL NEXT参数 在创建数据段时不要指定这些参数
区片的大小根据段大小来确定 原则是均衡顺序扫描的效率和空间的利用率 同时确保段的区片数目控制在 之下 根据此原则 在进行相应测试之后 确定以下区片选取规则
段大小(Oracle ) 区片大小(Oracle ) 段大小(Oracle ) 区片大小(Oracle ) &M K &M K M G M M G M &G M &G M
有此数据库中可以只使用三种区片大小的表空间 在对象创建之前需对其大小进行评估 并放到相应的表空间中
Oracle 引入了本地管理表空间 它在管理和性能上都优于传统的字典管理表空间 它已融合了规则 要使用此特性 在CREATE TABLESPACE语句中指定EXTENT MANAGEMENT LOCAL子句
段的区片数目上限应在 之下 DML *** 作在此区片数目范围内不会有明显的性能差异 但某些DDL *** 作的速度则与区片的数目关系较大 因此合理的区片数目应保持在 之下 对于持续不断扩展的段 应监控区片数目 在必要时移至其它表空间
对于特别大的数据段应控制在 G G(Oracle 为 G G)之间 它们应存放到单独的表空间上 同时对于这些特大段应考虑使用分区拉提高性能
用户的临时表空间应使用TEMPORARY类型
当系统的事务规模比较均衡时可以对回滚段使用OPTIMAL参数 否则应避免制定OPTIMAL参数 而定期监控回滚段的大小 并在必要时重建
临时段和回滚段绝对不要将用户数据存放到SYSTEM表空间 它是专为永远不会Drop和Truncate的系统数据对象而设计的
创建表空间时指定数据文件的大小应=区片整数倍+ 数据块 对于Local Managed Tablespace则为区片整数倍+ K
当表空间使用统一的区片大小时 不要对其进行空间整理 重整的结果不仅耗费精力而且可能会使性能变差 对于未使用统一的区片尺寸的表空间应通过Export/Import重整
i 提供了Alter Table …Move [Tablespace…]命令可用于快速重整表 Alter Index …Rebuild…[Tablespace…] 命令可用于快速重建索引
有关使用单个区片的误导
在许多关于碎片整理的文档中建议在Export时使用Compress=Y选项 将表中的所有数据调整到一个区片中 期望在Import后获得良好性能 由此让许多人产生一个观点 认为当表中数据全部存放到一个区片中时 可以获得良好性能 实际上单区片段只在以下条件成立时 才具有优越性
数据主要以(全段)扫描方式访问
段所对应的数据块在物理磁盘上连续存放 Oracle可以发布较大的顺序磁盘读 *** 作
通过对这两条进行分析可以发现 一方面数据库中大部分表是通过索引来访问 另一方面现在的数据库文件一般在物理上使用了RAID 或RAID + 技术 数据以条带化方式分布到多个物理磁盘上 逻辑上的单个区片和多区片在物理上并无本质上的区别 另外 从Oracle的角度来看 管理几百个区片的段是非常轻松的并不会有性能的下降 由此可见将整个段放到一个区片中并无明显好处 而这种做法却会导致表空间碎片的产生
三 表数据段的使用
表空间的组织
Heap表的空间由一系列区片链接而成 每个数据块除块头外其余部分可用于存放数据 在创建表时可以指定以下参数
PCTFREE 块中保留用于UPDATE *** 作的空间百分比 当数据占用的空间达到此上限时 新的数据将不能再插入到此块中
PCTUSED 指定块中数据使用空间的最低百分比 当一个块在达到PCTFREE 之后经历了一些DELETE *** 作 在其空间使用下降到PCTUSED后便可以重新被用于INSERT数据 这就是PCTFREE/PCTUSED参数的含义
调整PCTFREE PCTUSED参数的目标一方面是提高性能 另一方面则主要是提高空间使用效率 避免出现块中存在有许多未用的空间 但却无法找到一个块可以被用于插入新数据行的情况发生
PCTFREE的使用
在Oracle中表的每一行数据由唯一的ROWID标记 而Oracle支持的数据类型中有一些长度是可变的 如VARCHAR 当对这些数据进行UPDATE时 如果块中的可用空间不能容纳UPDATE后的数据行时 Oracle将会把此行移到其它数据块 同时保留此数据行的ROWID不变 并在原有块中建一指针指向行迁移后的位置 在这种情况下读取一行数据将需要访问 个数据块 从而导致性能下降 PCTFREE保留的空间就是为确保更改后的数据行可以仍存放于原有数据块中 避免行迁移的情况发生
由此 如果PCTFREE设置不足时可能产生行迁移 而另一方面如果PCTFREE设置过高 将会造成空间浪费 因此正确设置PCTFREE需要对表中数据的使用进行分析 对于数据长度不会变化或极少更新的情况 可以采用较小的PCTFREE 对于其它大多数情况应采用稍大的PCTFREE(PCTFREE的缺省值是 如果不好估计需预留的空间 可以使用 的范围) 不要为节约块中的空间而使用较小的PCTFREE值
PCTUSED的使用
当块的使用的空间下降到PCTUSED后 此块被重新放回空闲链表(Freelist)中 作为后续Insert的候选块 同样 设置PCTUSED需要视数据行的特性和Insert Update Delete的模式而定 但必须遵守的原则是 db_block_size * ( PCTFREE PCTUSED)必须比行的长度大
对于数据行长度变化较大的情况 应使用最大行长度来计算PCTUSED 并且应使用较低的PCTUSED值 因为在执行Insert时 如果数据块的可用空间不能装下一行数据 当块的使用的空间是在PCTUSED之上 Oracle将把此块从Freelist中移走 当块的使用的空间是在PCTUSED之下 Oracle将会扩展段空间 因此 PCTUSED如果设得过高 将导致段的不断扩展
lishixinzhi/Article/program/Oracle/201311/18776全国信息技术人才培训基地文件
全信字【2006】第08号
关于举办 通知
《全国信息技术人才培训基地》是信息产业部专业从事全国信息技术高端培训的科
研教学机构。其主要任务是以北京邮电大学的通讯与计算机科研教学力量为依托,面向中国电信、中国网通、中国移动等6大电信运营商和全国各级行政、企事业单位IT部门,重点开展现代通讯与计算机网络技术、经营管理系列中、高端培训。近期举办《全国Oracle数据库管理高级工程师研修班》,培训事项如下:
一、培训目标、方式、重点:
以《ORACLE8i、 9i/10g管理与维护手册》为重点内容,学习标准课程的内容和大型数据库系统的实际配置、管理、性能调整经验,深入案例分析,讲解实际 *** 作方法,使学员在ORACLE8i 、9i/10g的应用中具备解决实际问题的能力,培养有实战经验的Oracle数据库管理与维护高级工程师。
实验室教学,每人一台服务器,边讲边练。
二、授课教师介绍:
邓 芳 北京邮电大学副教授、博士、数据库专家
张 玉 北京邮电大学硕士、中国网通高级工程师、Oracle数据库专家。
张 阳 北京邮电大学硕士、数据库管理工程师
三、研修内容:附件一。
四、时间、地点、培训费:
第10期: 2006年6月16日---6月22日北京邮电大学(16日报到)
第11期: 2006年7月6日---7月12日 大 连 (6日报到)
3800元/人(含餐费)。住宿统一安排,费用自理。
四、权威证书:
培训结束,颁发信息产业部《数据库管理高级工程师》职业资格证书(钢印,全国承认的计算机职业资格证书和继续教育证书),作为就业、转行、提升的职业资格依据。(证书查询请登录:信息产业部电子教育中心网—培养工程—铜牌证书)
五、报名须知:
传真回执报名并将培训费电汇以下帐户,(请免带跨地区转帐支票)欢迎团体参加!报到时请带一寸照片两张。
开 户 行:中国光大银行北京西直门支行
户名:北京真友网络技术有限责任公司
帐号:0835 1512 0100 3040 20313
报名电话:010-87673879 传真:010-87614638
联 系 人: 张 龙
全国信息技术人才培训基地
2006年5月16日
报名回执表
单位名称
开发票名称
详细地址 邮编
参会费用 万仟佰拾元整 ¥ 参会地点
参会人姓名 性别 职务 手 机 电话 E-mail
培训班名称
附件一: 数据库(ORACLE 9I/10g)培训内容
课程概述 详细内容
Oracle产品系列及体系结构
安装与配置 ◆Oracle8i、Oracle9i与Oracle10g的异同
◆Oracle总体结构◆Oracle内存结构
◆Oracle进程◆Oracle后台进程结构
◆Oracle物理结构◆Oracle逻辑结构
◆数据分区 ◆数据库访问
◆SQL语句的处理过程 ◆Oracle数据字典
◆Oracle网络体系结构◆Oracle的安装与配置
◆配置Oracle服务器网络与客户端网络
数据库的
创建方法 ◆手动创建数据库◆通过DBCA创建数据库
◆配置数据库全球化支持 ◆查询全球化参数信息
◆更改数据库字符集 ◆配置多个数据库
◆Oracle系统用户和系统权限 ◆数据库名、实例名等的区分
管理
数据库实例 ◆enterprise manager 10g◆使用 OEM
◆使用iSQL*PLUS ◆初始化参数文件
◆口令文件 ◆管理初始化参数
◆启动和关闭数据库
数据库存储的管理
物理文件的管理
逻辑对象的管理 ◆管理表空间◆管理段
◆管理撤销表空间◆管理区
◆管理数据块◆管理数据文件
◆管理日志文件 ◆管理控制文件
◆管理归档日志文件 ◆管理警告日志文件
◆使用EM进行管理 ◆管理数据库触发器
数据库的
安全管理◆用户管理 ◆查询用户信息
◆权限管理 ◆角色管理
◆资源管理 ◆使用EM进行安全管理
◆使用OEM进行安全管理
数据库的
审计管理 ◆启动数据库审计◆语句审计
◆权限审计 ◆对象审计
◆精细审计 ◆其他审计管理
◆使用EM审计管理
自动存储管理
◆配置自动存储管理 ◆管理ASM实例
◆管理ASM磁盘组◆ ASM文件及查询ASM信息
◆使用EM管理ASM
数据库备份 ◆用户管理的备份 ◆使用RMA的备份
◆数据库逻辑备份工具—Export ◆逻辑备份工具----Oracle数据泵◆DBVERIFY工具 ◆DBNEWID工具
数据库恢复 ◆完全介质恢复 ◆数据库不完全恢复
◆用户管理的表空间及时点恢复 ◆数据库逻辑恢复
◆数据库行、表、级闪回恢复 ◆数据库闪回恢复
◆LogMiner ◆使用RMAN的恢复
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)