- 浏览: 513316 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1663续上篇... 3. 数据块访问与undo ... -
Oracle事务原理探究1--oracle核心技术读书笔记五
2014-12-29 21:18 20051. 冲突解决 假如有一个系统只有你和我两个 ... -
oracle undo 复杂度--oracle核心技术读书笔记四
2014-10-01 14:23 1262一. 概述 undo ... -
Oracle redo 复杂度--oracle核心技术读书笔记三
2014-09-29 22:13 1160一. 概述 我 ... -
(转)undo系列学习之Oracle IMU及Redo Private Strands技术
2014-09-27 23:09 1145原博客地址: http://blo ... -
oracle如何保证事务的ACID原则--oracle核心技术读书笔记二
2014-09-21 11:18 1760在事务中有四个通用的原则是所有数据库都必须遵守的,简称ACI ... -
Oracle基本数据改变原理浅析(redo与undo)--oracle核心技术读书笔记一
2014-09-14 17:00 4787在oracle中我们做一些更新操作,oracle底层是怎么流 ... -
(转)Oracle中Hint深入理解
2014-01-07 19:48 1171原文出处:http://czmmiao.iteye.com/ ... -
Oracle全表扫描成本示例
2013-12-29 22:51 0一. 准备工作 1. block size 8KB( ... -
(转)Oracle查看trace文件步骤
2013-12-10 09:54 5381原文地址: http://www.2cto.com/data ... -
【转】CBO hint:no_unnest,push_subq,push_pred的用法
2013-12-02 20:11 1206原博客地址:http://blog.itpub.net/15 ... -
index_stats视图各列的含义
2013-12-02 19:10 1384index_stats视图来收集B树 ... -
(转)Oracle 调整SGA、PGA大小
2013-10-31 13:25 31176SQL> show parameter sga; ... -
(转)Oracle cursor_sharing 参数 详解
2013-08-25 23:04 1938原博客地址:http://blog.csdn.net/tia ... -
(转)shared pool 原理
2013-08-18 22:58 1467原博客地址:http://blog.csdn.net/ro ... -
(转)Oracle 游标(cursor)说明
2013-08-15 20:17 1467原博客地址:http://blog.csdn.net/ti ... -
(转)关于semi-join/anti-join的一点探讨
2013-08-14 21:20 10932原博客地址:http://space.itpub.net ... -
oracle 索引访问方式
2013-07-29 23:02 1440一. 概述 index uni ... -
(转)Oracle动态性能视图学习笔记(2)_v$sesstat_v$mystat_v$statname
2013-07-29 21:41 1191原博客地址:http://space.itpub.net/1 ... -
(转)Oracle性能优化 之 共享池
2013-07-29 21:04 1232转载作品,原始出去如下: http://blog.ch ...
相关推荐
Oracle表分区和索引分区 分区概述 为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组...
Oracle提供了分区技术以支持VLDB(Very Large DataBase)。将数据分散到各个分区中,减少了数据损坏的可能性;可以对单独的分区进行备份和恢复;可以将分区映射到不同的物理磁盘上,来分散IO ;提高可管理性、可用性和...
虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。
具有Oracle分区功能的Oracle数据库 10g 可以显著增强几乎任何数据库应用程序的可管理性、性能和可用性。分区功能可用于前沿应用程序,分区功能确实能够成为保障这些应用程序成功的关键技术成分。 同时,分区功能也可...
Oracle分区功能提高应用程序性能 79 Oracle数据库处理时间基本准则 81 入侵Oracle数据库常用操作命令 82 Oracle数据库优化及其应用程序研究 83 Instance实例和数据库 85 Oracle数据缓冲区内部机制 85 Oracle 9i...
ORACLE表分区分区概述 为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同...将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能
Oracle 分区详解 Oracle 分区是一种处理超大型表、索引等的技术...Oracle 分区是一种非常有用的技术,可以帮助我们处理超大型表、索引等,提高系统性能和可用性。但是,需要注意的是,分区表相关的缺点需要我们注意。
Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能
分区表对于提高大表的访问性能会有很大的帮助
在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。 以system身份登陆数据库,查看 v$option视图,如果其中Partition为TRUE,则支持分区 功能;否则不支持。Partition有基于范围、哈希、综...
Oracle 分区技术及大数据量操作性能优化.ppt
在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
oracle分区,分区用于对数据库操作时提高性能的一个有效解决方法
官方资料:Oracle白皮书_Oracle数据库11g中的分区 分区的优势:分区的基本知识;使用分区提高可管理性;使用分区提岛性能;使用分区提高可用性;分区一为业务建模:基本分区策略;分区扩展;PARTITION ADVISOR;分区策略和...
1z0-033-13 关于自动段空间管理 ext 与oracle 空间使用 percent oracle块参数 行迁移问题 什么时间进行索引重组 优化性能 13 1z0-033-15 讨论不同类型索引 索引组织表(簇化表) OLTP 有什么性质要求 13 1z0-033-18-...
这份“Oracle甲骨文原厂分区表最佳实践”是一份非常实用的...如果你是一位Oracle数据库的管理员或开发人员,这份资源将会是你不可或缺的指南之一,它将帮助你更好地理解和应用分区表技术,提高数据库的性能和可靠性。
本人自用,全自动化脚本,自动处理一年的表分区
分区的优势 分区的基本知识 ...使用分区提高性能 使用分区提高可用性 分区 — 为业务建模 基本分区策略 分区扩展 PARTITION ADVISOR 分区策略和扩展概述 利用分区进行信息生命周期管理 总结
分区是一种“分而治之”的技术,通过将大表和索引分成可以管理的小块,从而避免了对每个表作为一个大的、单独的对象进行管理,为大量数据提供了可伸缩的性能。分区通过将操作分配给更小的存储单元,减少了需要进行...
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据...