Oracle性能分析7:创建索引
在创建索引时,我们往往希望可以预估索引大小,以评估对现有project环境的影响,我们也希望创建索引的过程可以最小化的影响我们正在执行的project环境,并能查看索引的状况。
预估索引大小
预估索引大小,最好的办法是在測试环境中创建它,測试环境最好包括完整的project环境数据,否则仅仅有通过部分数据来推算完整的索引大小。
假设不能搭建測试环境,Oracle提供了存储过程DBMS_SPACE.CREATE_INDEX_COST来估算索引的大小,以下是一个样例:
declare
used_bytes number(10);
alloc_bytes number(10);
begin
dbms_stats.gather_table_stats(user, 'HISTORYALARM');
dbms_space.create_index_cost('create index idx_historyalarm on historyalarm(position1)',
used_bytes => used_bytes,
alloc_bytes => alloc_bytes);
dbms_output.put_line('used_bytes : ' || used_bytes);
dbms_output.put_line('alloc_bytes : ' || alloc_bytes);
end;
在计算索引大小的时候,你须要先收集表的统计信息,由于Oracle是依据表的数据信息来推算的,以下是输出的结果:
used_bytes : 151994511
alloc_bytes : 251658240
创建索引
在估算了索引大小后,假设没有问题,就能够開始实际的创建索引了:
create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index
创建索引的索引会对表加排他DDL锁(Exclusive DDL lock),这会防止其它会话得到他们自己的DDL锁或TM(DML)锁,也就是在创建索引期间你可以查询一个表,可是无法以不论什么方式改动这个表。这导致创建索引的操作在project环境中实施时会存在问题,因此,Oracle企业版提供了在线创建索引的方式:
create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index online
online将改变详细创建索引的过程,Oracle不会再加一个排他DDL锁来防止数据改动,改为试图得到表上的一个低级(mode 2)TM锁,这将有效地防止其它DDL(data definition language,包含CREATE、ALTER、DROP等)操作发生,但同意DML(data manipulation language,包含SELECT、UPDATE、INSERT、DELETE)操作正常进行。在Oracle的内部,Oracle会将创建索引期间做的DML操作放到一个暂时表中,等创建索引操作完毕后,再将DML操作所做的改动同步到新的索引。这样就有效的攻克了project环境中实施的问题。
查看索引信息
能够通过上面的方式查看创建成功后的索引:
select * from user_indexes where index_name = upper('idx_historyalarm')
能够通过以下的方式显示所占用的空间的实际数额:
select bytes from user_segments where segment_name = upper('idx_historyalarm')
以下是输出结果,空间分配字节数的预计量略小于实际使用量:
BYTES
--------------------------
293601280
随着记录插入到表中,该索引将添加,对索引大小监控能够确保有足够的磁盘空间,以适应未来的数据添加需求。
Oracle性能分析7:创建索引的更多相关文章
- Oracle性能分析12:对象统计信息
对象统计信息描写叙述数据是如何在数据库中存储的,查询优化器使用这些统计信息来做出正确的决定.Oracle中有三种类型的对象统计信息:表统计.列统计和索引统计.而在每种类型中,有细分为:表或索引级别的统 ...
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
- oracle 物化视图及创建索引
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...
- oracle海量数据中提升创建索引的速度
基本信息情况: 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 操作系统版本:Ce ...
- Oracle性能分析3:TKPROF简介
tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_1 ...
- Oracle性能分析11:系统统计信息
早期Oracle查询优化器的开销计算是基于运行SQL语句所须要的物理读,这种方法被叫做I/O开销模式(I/O cost model),这种方法的主要缺点是觉得单块读和多块读开销相当.在Oracle 8 ...
- Oracle性能分析1:开启SQL跟踪和获取trace文件
当Oracle查询出现效率问题时,我们往往须要了解问题所在,这样才干针对问题给出解决方式.Oracle提供了SQL运行的trace信息,当中包括了SQL语句的文本信息.一些运行统计,处理过程中的等待, ...
- Oracle 性能分析
1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...
- Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...
随机推荐
- css3.0
css3.0相比css2.0多了些我们经常需要使用的标签属性,例如:圆角,个别圆角,不透明度,阴影特效等 1.圆角(即如何画圆)border-radius a{width:20px; height:2 ...
- ThinkPHP - 进行继承时的 构造函数
被继承文件:PublicController.class.php <?php namespace Admin\Controller; use Think\Controller; class Pu ...
- 字符串查找函数 find()函数
find()函数可以帮助你在两个字符串之间,查找很多他们的关系... #include<iostream> #include<string> using namespace s ...
- [转]CentO下限制SSH登录次数
应公司内部网站等级测评的需求,正逐渐加强系统安全防护. 设备默认 3 次验证失败自动退出,并且结束会话:网络登录连接超时自动退出时间 5 分钟: 第一种方法:已验证. 1.ssh超时时间设置 # cd ...
- Best Component for Bitmap Image
The best is to purchase ImageEn and use the latest version. Coz nothing compares to ImageEn.... But ...
- freemarker序列的拆分
freemarker序列的拆分 1.简易说明 序列的拆分能够是数组.字符串.布尔值等等 2.实现源代码 <#--freemarker序列的拆分--> ${"hudjfkskhd你 ...
- SRM 577 Div II Level Two: EllysRoomAssignmentsDiv2
题目来源: http://community.topcoder.com/tc?module=ProblemDetail&rd=15497&pm=12521 这个问题要注意的就是只需要直 ...
- Git 将本次修改追加在上一次修改上面
Git 将本次修改追加在上一次修改上面 git add . git commit --amend 之后就是进入日志提交页面 确保change-Id那条记录出现在最后一行,如: zh-->en 修 ...
- python中打印文件名,行号,路径
print "I have a proble! And here is at Line: %s"%sys._getframe().f_lineno PDB,哈哈http://doc ...
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
在上篇我们加上了简单的坦克之间的碰撞检测,这篇我们继续加上子弹之间, 子弹与坦克之间的碰撞检测,对于上一篇碰撞处理不太完美的地方我们继续改进. 1.子弹之间的碰撞 //玩家子弹和敌方子弹之间的碰撞 C ...