普通堆表不足之处:

    表更新有日志开销
    表删除有瑕疵
    表记录太大检索较慢
    索引回表读开销很大
    有序插入难有序读出
 
DELETE产生的undo最多,redo也最多,因为undo也需要redo保护
 
全局临时表:
1 高效删除记录
  基于事务的全局临时表commit或者session连接退出后,自动删除
  基于回话的全局临时表在退出回话后自动删除
 
2 针对不同的会话数据独立,不同的session访问全局临时表,看到的结果不同
 
全局临时表在程序的一次调用执行过程中,需要多次清空记录再插入记录,就考虑使用基于是无敌额
 
分区表
--分区表删除
alter table range_part_tab truncate partition p9; --分区表交换
alter table range_part_tab exchange partition p9 with table mid_table; --分区表的分割
alter table range_part_tab split partition p_max at(to_date('2013-02-01','YYYY-MM-DD'))into (partition p2013_01,partition p_max); --分区表合并
alter table range_part_table merge partitions p2013_01,p_max into partition p_max;

SCN,保证数据一致读,解决了读一致性的问题,避免使用锁
 
 
Oracle开启与关闭过程
1 startup nomount 寻找定位 参数文件(SGA共享内存段开启,后台进程开启)
2 alter database mount 寻找定位 控制文件(其中包含 数据文件 日志文件 检查点信息等)
3 alter database open 寻找定位 数据文件 日志文件等
 
关闭正好是开启的逆过程:
全部命令融合在shutdown immediate里面
database closed.
database dismounted.
oracle instance shut down.
 
各文件查找位置:
show parameter spfile;
show parameter control;
 
sqlplus "/ as sysdba"
select file_name from dba_data_files;
select group#,member from v$logfile;
show parameter recovery;
setlinesize 1000;
show parameter dump;
 
cd /home/oracle/admin/itmtest/bdump
ls -lart alert*
 
OLTP倾向于让块的尺寸小一些:因为如果块太大,容易导致大量并发查询及更新操作都指向同一个数据块,从而产生热点块竞争。

Leaf 主要存储了 key column value 以及 具体能定位到数据块所在位置的rowid
 
索引特点:
    高度比较低
    存储索引列还有rowid
    本身是有序的
 
MIN MAX的索引优化:INDEX FULL SCAN(MIN\MAX)
    select max(object_id) from t;
select max,min from (select max(object_id) max from t) a,(select min(object_id) min from t) b;
索引回表读(TABLE ACCESS BY INDEX ROWID)
select * from t where object_id <=5;
因为是select * 查询完索引列后,还需要返回查询其他全部的值
 
INDEX RANGE SCAN 针对索引高度较低这个特性实现的一种范围扫描,在返回记录很少时相当高效。
 
INDEX FAST FULL SCAN 针对整个索引的全扫描,一次读取多个索引块
INDEX FULL SCAN 针对整个索引的全扫描,一次读取一个索引块,有利于数据的排序,在count*的场合很适用,但是逻辑读增加了
 

Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All,对两个结果集进行并集操作,包括重复行,不进行排序;

主外键:

1 主键本身是一种索引

2 可以保证表中主键所在列的唯一性

3 可以有效的限制外键依赖的表的记录的完整性

如果某个表建立的索引过多,插入数据的时候会很慢。可以删除索引后,插入,再建立索引。可以优化很大一部分的时间。

索引过多,对三种操作的影响:

1 对insert影响最大,只要有索引,就会变慢,越多越慢。

2 对delete来说,有好有坏,在海量数据删除较少数据的时候,很有用。但是过多的索引,也会使得其他的索引进行更新时代价变大。

3 对update的影响最小。

建立索引会引起整个表的锁,使得表被挂起,任何操作无法执行。

 

alter index 索引名 monitoring usage;

select * from v$object_usage;--查询索引是否被使用

alter index 索引名 nomonitoring usage;--解锁索引监控

位图索引允许存储为空值(缺点,进行插入的时候,同一个索引的值相同,是插不进去的)

建立位图索引适合的两个条件:1 位图索引列大量重复 2 该表极少更新

为什么位图索引只适用于低基数值,但是对频繁更新的列不适用。
原因在于,PROCESSED_FLAG列只有两个值:Y和N。对于插入到表中的记录,该列值为N(表示未处理)。其他进程读取和处理这个记录时,就会把该列值从N更新为Y。这些进程要很快地找出PROCESSED_FLAG列值为N的记录,所以开发人员知道,应该对这个列建立索引。他们在别处了解到,位图索引适用于低基数(low-cardinality)列,所谓低基数列就是指这个列只有很少的可取值,所以看上去位图索引是一个很自然的选择。
不过,所有问题的根由正是这个位图索引。采用位图索引,一个键指向多行,可能数以百计甚至更多。如果更新一个位图索引键,那么这个键指向的数百条记录会与你实际更新的那一行一同被有效地锁定。
所以,如果有人插入一条新记录(PROCESSED_FLAG列值为N),就会锁定位图索引中的N键,而这会有效地同时锁定另外数百条PROCESSED_FLAG列值为N的记录(以下记作N记录)。此时,想要读这个表并处理记录的进程就无法将N记录修改为Y记录(已处理的记录)。原因是,要想把这个列从N更新为Y,需要锁定同一个位图索引键。实际上,想在这个表中插入新记录的其他会话也会阻塞,因为它们同样想对这个位图索引键锁定。简单地讲,开发人员实现了这样一组结构,它一次最多只允许一个人插入或更新!
可以用一个简单的例子说明这种情况。在此,使用两个会话来展示阻塞很容易发生:

ORA10G> create table t ( processed_flag varchar2(1) );
Table created.
ORA10G> create bitmap index t_idx on t(processed_flag);
Index created.
ORA10G> insert into t values ( 'N' );
1 row created.

现在,如果在另一个SQL*Plus会话中执行以下命令:

ORA10G> insert into t values ( 'N' );

这条语句就会“挂起”,直到在第一个阻塞会话中发出COMMIT为止。

【面试虐菜】—— Oracle知识整理《收获,不止Oracle》的更多相关文章

  1. 【面试虐菜】—— Oracle知识整理《DBA的思想天空》

    Inventory Oracle安装工具OUI用来管理Oracle安装目录的   Oracle的参数文件,启动后按照下面的顺序读取参数文件,如果读取失败,启动数据库 失败: 1  $ORACLE_HO ...

  2. 【面试虐菜】—— Apache知识整理

    Apache性能调优1 Apache 部分:1. 移除不用的模块.2. 使用 mod_disk_cache NOT mod_mem_cache .3. 扁平架构配置mod_disk_cache.4.  ...

  3. 【面试虐菜】—— MongoDB知识整理

    为什么我们要使用MongoDB? 特点: 高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包含内部对象. 支 ...

  4. 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

    1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...

  5. Oracle知识整理

    1.自带三种登录方式: Scott/tiger   sys/manager   system/manager 2.基本的操作 1)  建数据库 create tablespace 表空间的名称 dat ...

  6. 【面试虐菜】—— Jboss调优

    吐血整理了以前Jboss以及JVM在生产环境下的调优参数,各种不同的案例,都是来自网友杜撰.整合后,希望对广大使用jboss作为生产应用服务器的朋友有所帮助. JBOSS参数调优 配置deploy/j ...

  7. 【面试虐菜】—— LVS负载均衡

    Load Balancer(负载均衡器): Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上.Load Balancer通过Ldirectord监测各Rea ...

  8. 【面试虐菜】—— JAVA面试题(3)

    1 throws与throw的区别 解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理.Thro ...

  9. 【面试虐菜】—— JAVA面试题(1)

    今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了 ...

随机推荐

  1. CQRS学习——IOC,配置,仓储隔离以及QueryEntry[其三]

    从IoC开始说起 博主最早开始用的IoC容器叫AutoFac,那时候用它主要是为了生命周期管理——将EF上下文的生命周期限定为每请求.当然也总是每每听到IoC的好处,但是仍然不能理解其优势.最近在学习 ...

  2. zepto源码学习-05 ajax

    学习zeptoajax之前需要先脑补下,强烈推荐此文http://www.cnblogs.com/heyuquan/archive/2013/05/13/js-jquery-ajax.html 还有A ...

  3. Linux系统调用列表

    转自Linux系统调用列表 一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtabl ...

  4. 对于 APM 用户的一次真实调查分析(下)

    一.前言 对 APM 用户的一次真实调查分析(上)中,我们主要聊到了现阶段国外 APM 行业对各个企业的渗透率.大部分使用 APM 工具的企业规模以及 APM 工具在用户心中的地位等问题,有兴趣的朋友 ...

  5. django的url的name参数的意义(转发)

    http://bio.rusaer.com/archives/288   Django一个比较隐含的函数url 阅读量(5010)  |  发表 于 2010-03-09 14:26:18 Djang ...

  6. loadrunner 一个诡异问题

    最近使用loadrunner压测一个项目的时候,发现TPS波动巨大.且平均值较低.使用jmeter压测则没有这个问题.经过多方排查发现一个让人极度费解的原因: 原脚本: //脚本其他代码...... ...

  7. MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据

    数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...

  8. dojo.hitch 原理

    在使用dojo的时候,遇到dojo.hitch这个函数 ,官方文档说的很清楚,将函数和作用域绑定起来,这让我想起了call和apply这两个函数,call和apply用于改变一个方法的执行上下文,JS ...

  9. Android:Fragment+ViewPager实现Tab滑动

    public class FragAdapter extends FragmentPagerAdapter { private List<Fragment> fragments ; pub ...

  10. JAVA信号量使用示例程序

    JAVA里也有强大的信号量工具Semaphore,使用信号量可以很方便的实现线程同步功能,以解决类似于 生产者——消费者 之类的典型问题. 下面是我的测试程序,大部分看注释就可以明白用法: impor ...