- 浏览: 519061 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011165335:
distinct不影响使用半连接
(转)关于semi-join/anti-join的一点探讨 -
353790060:
redo 记录事务执行后的日志 undo 记录事务回滚的日志 ...
Oracle redo与undo浅析 -
jayxigua:
redo用于在失败时重放事务(即恢复事务),undo则用于取消 ...
Oracle redo与undo浅析 -
aa_qq110:
Openbravo有中文包吗
Openbravo开发手册 -
iocaop:
不错,写的很清晰易懂
JAVA 服务提供者框架介绍
理论上,我们进行表分区都是为了提升性能,加快查询速度。但是有的时候,不但不能加快查询速度,反而拖累的查询速度。下面举的一个例子就是这样的:
假设某一个表是按照主键散列分区,创建表如下所示:
create table t ( OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY ) partition by hash(object_id) partitions 16 as select * from all_objects;
我们经常要在表上面,根据owner 或者 object_type,object_name 或者owner, object_type,object_name进行查询。于是我们想到在这三列上建立一个局部索引。如下所示:
create index t_idx on t(owner,object_type,object_name) LOCAL
运行一个存储过程收集cpu耗用等信息:
begin dbms_stats.gather_table_stats ( user, 'T', cascade=>true); end; /
改变几个会话属性,便于允许TKPROF
alter session set timed_statistics=true; alter session set events '10046 trace name context forever,level 12';
执行如下SQL语句:
select * from t where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP'; select * from all_objects where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP';
查看TKPROF记录的性能日志位置:
select rtrim(c.value,'\') ||'\'||d.instance_name|| '_ora_' ||ltrim(to_char(a.spid))||'.trc' from v$process a,v$session b,v$parameter c,v$instance d where a.addr=b.paddr and b.audsid =sys_context('userenv','sessionid') and c.name='user_dump_dest';
假如看到这样的输出:D:\ORACLELWS\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_5928.trc
另外打开一个命令行,输入如下命令解析日志文件
tkprof D:\ORACLELWS\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_5928.trc
弹出一个output = 要你输入解析日志之后的文件存放的目录,可以填写c:\tk.prof ,必须prof后缀。
这个时候我们可以用记事本打开tk.prof文件查看上述两条查询SQL语句的性能,我的机器上查看的结果如下
select * from t where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP' call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 34 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 34 0 1 select * from all_objects where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP' call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.01 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 8 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.01 0.01 0 8 0 1
各个字段的意思可以百度一下,我们发现query字段分区是34,不分区是8。query代表I/O操作次数,分区反而增加了I/O操作次数,费力不讨好。这是因为查找条件字段没有包含分区表的分区键,导致每一个表分区都要扫描,也就是每一个索引分区都要扫描,还不如全表扫描来得快。
如果不创建局部索引,而是建立一个全局索引。效率跟不分区差不多,创建局部分区的sql换成:
create index t_idx on t(owner,object_type,object_name) global partition by hash(owner) partitions 16
其实,对于OLTP系统,分区对于获取数据没有什么正面影响(基本不能提高查询速度)。相反,我们还有非常小心避免产生负面影响,比如上面那个例子。但是对于高度并发修改的环境,分区则可能提供显著的效果,因为分区避免了数据的冲突,你修改这个分区,他修改那个分区,大大降低了发生冲突的可能性。因此,不要盲目使用分区,分区不一定能够提高性能。
评论
2.on t(owner,object_type,object_name)
3.LOCAL
这就是本地非前缀索引,查询时会引用到每个分区的索引,对于查询系统是有影响,但是好处是当你要删除一个分区时,可以直接删除整个分区,而不用重建索引,对于生产环境相当有用。
发表评论
-
Oracle事务原理探究2--读书笔记五
2015-01-05 13:46 1704续上篇... 3. 数据块访问与undo ... -
Oracle事务原理探究1--oracle核心技术读书笔记五
2014-12-29 21:18 20281. 冲突解决 假如有一个系统只有你和我两个 ... -
oracle undo 复杂度--oracle核心技术读书笔记四
2014-10-01 14:23 1288一. 概述 undo ... -
Oracle redo 复杂度--oracle核心技术读书笔记三
2014-09-29 22:13 1190一. 概述 我 ... -
(转)undo系列学习之Oracle IMU及Redo Private Strands技术
2014-09-27 23:09 1169原博客地址: http://blo ... -
oracle如何保证事务的ACID原则--oracle核心技术读书笔记二
2014-09-21 11:18 1785在事务中有四个通用的原则是所有数据库都必须遵守的,简称ACI ... -
Oracle基本数据改变原理浅析(redo与undo)--oracle核心技术读书笔记一
2014-09-14 17:00 4845在oracle中我们做一些更新操作,oracle底层是怎么流 ... -
(转)Oracle中Hint深入理解
2014-01-07 19:48 1217原文出处:http://czmmiao.iteye.com/ ... -
Oracle全表扫描成本示例
2013-12-29 22:51 0一. 准备工作 1. block size 8KB( ... -
(转)Oracle查看trace文件步骤
2013-12-10 09:54 5448原文地址: http://www.2cto.com/data ... -
【转】CBO hint:no_unnest,push_subq,push_pred的用法
2013-12-02 20:11 1266原博客地址:http://blog.itpub.net/15 ... -
index_stats视图各列的含义
2013-12-02 19:10 1403index_stats视图来收集B树 ... -
(转)Oracle 调整SGA、PGA大小
2013-10-31 13:25 31219SQL> show parameter sga; ... -
(转)Oracle cursor_sharing 参数 详解
2013-08-25 23:04 1992原博客地址:http://blog.csdn.net/tia ... -
(转)shared pool 原理
2013-08-18 22:58 1490原博客地址:http://blog.csdn.net/ro ... -
(转)Oracle 游标(cursor)说明
2013-08-15 20:17 1493原博客地址:http://blog.csdn.net/ti ... -
(转)关于semi-join/anti-join的一点探讨
2013-08-14 21:20 11010原博客地址:http://space.itpub.net ... -
oracle 索引访问方式
2013-07-29 23:02 1467一. 概述 index uni ... -
(转)Oracle动态性能视图学习笔记(2)_v$sesstat_v$mystat_v$statname
2013-07-29 21:41 1215原博客地址:http://space.itpub.net/1 ... -
(转)Oracle性能优化 之 共享池
2013-07-29 21:04 1268转载作品,原始出去如下: http://blog.ch ...
相关推荐
"Oracle分区表和分区索引在VLDB中的研究" 本文研究了Oracle分区表和分区索引在VLDB(Very Large Databases)中的应用。分区表和分区索引是数据库管理中的关键技术之一,是VLDB中一个重要的性能提升机制。通过分析一...
Oracle分区技术是一种数据库管理系统(DBMS)特性,用于将大型表和索引分割成更小、更易管理和处理的部分,从而提升查询性能和数据管理效率。这种技术特别适用于数据仓库和决策支持系统(DSS),因为这些系统通常...
### Oracle 分区表详解 #### 一、Oracle 分区简介 Oracle 的分区技术是一种用于管理和优化超大型表和索引的有效手段。...通过合理应用分区技术,不仅可以提高数据的可管理性,还能有效提升查询性能和系统可用性。
Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...
这种分区方式使得每个分区都可以放在不同的表空间上,从而提高了查询性能和管理效率。 #### 2. 列表分区(List Partitioning) 列表分区是基于表中某一列的离散值来进行数据分割。 ##### 示例 创建一个问题工单表`...
总结,Oracle分区表是大型数据库系统中提高性能和管理效率的重要手段。通过理解其概念、作用、优缺点以及各种分区类型,可以根据实际需求设计并实施合适的分区策略,以实现数据库的最佳性能和可扩展性。
总的来说,Oracle分区表培训内容涵盖了分区表的原理、创建、索引构建、元数据管理以及实际操作,这些都是提升数据库性能和管理效率的关键技能。通过深入学习和实践这些示例,员工将能够更好地应对大数据环境下的挑战...
Oracle数据库是全球广泛使用的大型关系型数据库系统之一,其在数据管理和高性能处理方面有着卓越的表现。...在实际工作中,正确运用分区和锁机制能有效提高Oracle数据库的性能和稳定性,为企业的数据管理提供坚实保障。
总的来说,Oracle 分区和索引是优化大数据查询的关键工具,它们通过有效的数据组织和快速的数据访问路径,提升了系统的整体性能和可维护性。在设计时,应考虑数据的特性、查询模式以及系统资源,以制定最佳的分区和...
标签“oracle分区表 自动维护”概括了脚本的核心功能和使用场景,说明脚本主要用于Oracle数据库的分区表自动维护。 从提供的部分内容中,我们可以看到脚本的具体实现细节: 1. 创建基础表`PART_T_MAINTENANCE`,...
Oracle 分区表及分区索引 Oracle 分区表是指将一个大表分割成多个小表,每个小表称为一个分区,分区表的...在选择分区表和分区索引时,需要根据实际情况选择合适的分区方式和索引类型,以提高查询性能和改善管理型。
Oracle分区技术提供了强大的工具来管理和优化大型表和索引。通过合理选择分区策略和正确使用分区管理功能,可以显著提高数据库性能并降低管理复杂性。在实际应用中,应根据具体的业务需求和技术环境灵活运用这些分区...
Oracle 表分区是一种高效的数据管理策略,用于处理大数据量的表,以提升查询性能和数据库的可维护性。本文将详细介绍Oracle表分区的概念、作用、优缺点,以及各种类型的分区和操作方法。 首先,理解表空间和分区表...
Oracle分区技术是数据库管理系统中用于优化大规模...它允许根据业务需求对数据进行智能划分,从而提升数据库的性能和管理效率。在设计分区策略时,应考虑数据的分布模式、查询模式以及预期的增长趋势,以确保最佳效果。
Oracle分区表是Oracle数据库中一种优化大数据处理的高级特性,它通过将一个大表分成多个逻辑部分,即分区,来提高查询性能、简化管理和增强可用性。分区技术在处理海量数据时尤其有用,因为它们允许数据库仅扫描与...
以上介绍了Oracle表分区的基本概念、优点、限制以及两种常见的分区类型——范围分区和列表分区,并给出了具体的创建示例。通过合理地使用表分区技术,可以有效地提高数据库系统的性能和可管理性。
Oracle分区是一种强大的工具,可以帮助管理员和开发人员更好地管理和优化大型数据库。通过合理地设计分区策略,不仅可以提高查询性能,还可以简化数据管理任务。希望本文的介绍能够帮助读者更好地理解和应用Oracle...