目录:
Oracle数据完整性和锁机制 索引及优化之表分析 表分析、约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区3 海量数据库及分区4 高级SQL优化(一) 高级SQL优化(二) 高级SQL优化(三) 常用优化工具 PPT和源码 下载: http://sishuok.com/forum/posts/list/6365.html 配套视频课程 Oracle性能优化 http://sishuok.com/product/601 海量 数据库和高级SQL优化 http://sishuok.com/product/602 原规划本课的内容为表分区,即单级分区表的简要知识,规划为一课。由于近年来行业内海量数据处理人才紧缺,现根据读者反馈将内容调整为四课,以详细讨论海量数据库的全部主要知识,并辅以大量实践练习,以期有志于研究学习VLDB的读者通过加量的课程学习能达到建立起VLDB基础理论体系,迅速适应相应的海量 数据库设计和开发工作的效果。 VLDB概述引子 很多现代企业如电子商务企业需要频繁的在一个包含数百个GB或者数个TB数据的数据库上运行关键任务。这种数据库称为超大型数据库(VLDB,Very Large Databases,又称海量数据库),其中的数据称为海量数据。实践中,VLDB一般包含两个关键要素:一是用户达到百万级甚至千万级,数据库的容量一般超过1TB(1TB=1024GB);二是系统必须提供实时响应功能,不能停机、具有高度的可靠性和可扩展性。例如亚马逊、淘宝、苏宁易购等系统的数据库。对于VLDB的支持和维护的挑战工作催生了海量数据解决方案。VLDB的主要主题中,最关键的方法一般是使用分区、压缩、并行执行等技术。 分区简介 分区是将一个超大表或者索引分解成若干个更小、更易于管理的小的部分,这些小的部分称为分区。对于表而言称为分区表,对于索引而言称为分区索引。原来对超大表或超大索引的SQL查询和DML无需进行任何修改即可访问这些分区表和分区索引。定义了分区后, DDL语句就只访问和操纵单个分区,而不 是整个表或索引,因而分区带来了高可维护性的好处。分区的一个基本要求是表或索引的每个分区具有 相同逻辑属性,如列名、约束等;但不同的分区可以具有不同的物理属性,如压缩的启用/禁用,物理存储设置、表空间等。对于许多不同类型的应用,尤其是管理大量数据的应用程序而言分区是非常有用的,如对于OLTP分区可提高其可管理性和可用性、性能,而对于数据仓库分区则可提高其性能和可管理性。 分区的优点如下: 显著缩短操作处理时间:这些操作包括数据装载、索引的创建和重建、备份与恢复。能显著缩短的原因是这些操作仅限于分区级(在个体的分区上),而非表级(在整个表上) 提高查询响应性能:通常的查询只需要访问分区的一个子集即可完成,从而避免了访问整个表。这种技术称为分区裁剪,其对性能的提升可以达到量级单位 显著缩短因维护操作导致的计划宕机时间:分区是独立于分区维护操作的,因此允许在表的不同分区或索引不同的分区上执行并发维护操作。如可以对分区执行并发的SELECT和DML语句等维护操作,其二者不会相互影响 VLDB与分区 海量数据库没有最小的绝对大小,VLDB虽然类似于一个小型数据库,但管理一个VLDB依然存在很多挑战,这些挑战与执行操作的数据库的 绝对规模及其 成本效用是有关系的。数据库大小的稳步增长与以下几个趋势因素有关: 系统开发的独立性和综合合并应用需求的驱动:每个系统独立开发,但跨部门的综合应用需要数据库和应用进行整合合并,而整合带来的一个是基础数据和存储结构的不统一,二就是导致数据库大小的持续增长 法律法规的规定:法律法规要求存储最小时间粒度的数据并保存一个较长时间,如日志信息、交易信息等 客户公司发展因素:如公司的增长发展、收购等导致用户规模和业务规模的增长,这些均能带来数据规模和并发规模的增长 分区策略是管理超大容量数据库的一个核心特性。分区地址的增长是VLDB的最基本挑战之一,
2.分区键 分区表的行必须明确的存储在单一的分区,分区键可以由一个或多个列组成,用来决定行所存储的分区,Oracle使用分区键来自动确定Insert、Update、Delete操作所对应的分区。 如课程“索引及优化之表分析”中“用户交易表”基于年度、月度和日期建立分区,则该三列构成分区键,用来决定DML操作对应的分区。
3.分区表 表可以被分割为无数个分区,但如果表中包含LONG或LONG RAW类型的列是则不可分区,而CLOB和BLOB类型的列是支持分区的。 为了减少磁盘和内存使用情况(特别是高速缓存),可以将表和分区的分区表进行压缩,表压缩 也可以大大节约存储空间、加快查询执行速度。 然而,有轻微的增加CPU的负担。压缩适合的情况 是数据仓库环境,即读多写少的情况。建议考虑使用表分区的情形: (1).表的大小超过2GB时,或超过2000万行记录时 (2).表中包含历史数据,新数据会被写入新分区时 (3).表的内容必须被分布在不同类型的存储设备时 建议考虑使用索引分区的情形: (1).对表数据进行迁移并且希望避免重建索引时 (2).对部分数据进行维护,而不希望维护期间使整个索引无效时 (3).减少索引中具有单一递增值的列引起的索引偏移时 4.分区与LOB类型数据 LOB类型列中存储的非结构化数据(图片、文档等)也能分区。当进行分区时,LOB类型的列存储在子集的表空间,且列存储在分区所在的表空间中。此技术在存储有大对象数据且不经常更新,而其他数据会经常被更新时非常高效,原因是将大对象数据与主数据进行了分离的存储。如员工记录数据,照片是大对象。 分区的好处 1.提高性能分区通过限定操作数据的数量、对并行执行的数据是分布式的,因此带来了成倍的性能提升,主要包括: (1).分区修剪 分区修剪是最简单也是最本质的性能提高手段,原因是限定了数据范围。常常可以将查询性能提高几个数量级。如某个订单表按月分区,该表中存有2年的数据,现在查询某个月度的订单数,则只需访问访问一个分区,而不是24个分区,因此性可能会提升20倍。 (2).智能化分区连接 多表连接时,该技术能在下列两种情形下会得到应用 1).A表与B表连接,A表的键是colS,B表的键也是colS,两个表的分区均是基于列colS,且连接条件是A.colS= A.colS 2).参考完整性中的参考分区表与其父表连接 此时智能化分区连接技术能将一