
oracle内部原理
文章平均质量分 55
深圳gg
这个作者很懒,什么都没留下…
展开
-
oracle和达梦数据库在索引上的一个区别
Oracle索引是不存储null值的,达梦是存储了Null值,下面来做一个实验。drop table test;create table test(id number primary key,name varchar2(100), age number);insert into test select rownum, 'aaaaaaaaaaa'||rownum, CASE WHEN mod(rownum,10) = 0 THEN null ELSE rownum END from.原创 2021-07-29 18:07:16 · 783 阅读 · 0 评论 -
oracle 分区表exchange原理
oracle分区的exchange操作非常快,那原理是什么呢?下面我们来做个实验:原创 2013-08-29 08:37:46 · 1648 阅读 · 0 评论 -
索引读取一条数据逻辑读为什么不为3
下面来做一个实验,在一张表上建一个B*tree索引,查到索引的高度为2(BLEVEL+1,BLEVEL是叶子节点到根节点),此时逻辑读应该为3,先读取索引的根,然后是叶子节点,最后通过叶子节点的rowid找到表的记录,一共是3个逻辑读,但是实验做出来是4个逻辑读,是什么原因呢? 再次实验,用unique index,结果逻辑读是3,这样才是对的。 可以看出是uniq原创 2013-05-29 19:17:37 · 1448 阅读 · 0 评论 -
dump b*tree内容解析
SQL> create table test as select * from dba_objects;SQL> create index ind_object_name on test(object_name);SQL> select index_name,s.blevel from user_indexes s where s.index_name='IND_OBJECT_NAME';原创 2013-06-06 13:04:46 · 1769 阅读 · 0 评论 -
探究oracle clob字段是如何存储的
clob字段存储的是文本,如果存储少于4000个字节则clob字段会和记录存放在一起,如果存储超过4000个字节,则不会与记录存放在一起。值得注意的是,这里的4000个字节并不是等同于varchar2(4000),那相当于什么呢,请看下列实验:drop table test_clob purge;create table test_clob( id number, clob原创 2014-06-06 08:58:55 · 4800 阅读 · 0 评论 -
oracle 下操作blob字段是否会产生大量redo
操作blob字段是否会产生大量redo,答案是不会,下面来做一个实验,测试数据库版本是11.2.0.1.0:--创建一张表做测试之用create table test_blob( id number, tupian blob);import java.io.FileInputStream;import java.io.OutputStream;import ja原创 2014-06-05 17:23:31 · 1961 阅读 · 1 评论 -
Oracle嵌套表存储格式浅析
Oracle嵌套表很少用,下面来研究下其如何存储的。用一个例子,一个用户对应对个部门。SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edi原创 2014-09-10 18:55:51 · 1566 阅读 · 0 评论 -
dump bitmap(位图索引)内部研究
一直对位图索引印象都不深刻,通过dump内容,逐步就清晰了。可以看到索引在这种数据结构下,当频繁的修改数据,会造成严重的enq: TX - row lock contention等待事件。SQL> create table t_bitmap(a number, b number);SQL> insert into t_bitmap select rownum,mod(rownum,5)原创 2012-12-07 08:48:06 · 1693 阅读 · 0 评论 -
Oracle INDEX FAST FULL SCAN与 INDEX FULL SCAN
两种常见的索引扫描方式:INDEX FAST FULL SCAN,INDEX FULL SCAN。前者是按照索引的物理结构扫描(就是高水位线以下),后者是按照索引的逻辑结构,即树形结构,叶子节点的双向链表扫描数据。--制造一些数据drop table test purge;create table test as select * from dba_objects where obje原创 2016-05-04 15:51:41 · 1654 阅读 · 0 评论 -
Oracle 11g表的碎片率诊断
在Oracle中,有些表由于频繁的插入和删除数据,导致高水位过高,表的碎片也很高,如何判断呢?drop table test purge;create table test as select * from dba_objects;insert into test select * from test;insert into test select * from test;co原创 2017-02-07 11:22:00 · 5552 阅读 · 0 评论 -
Oracle dump索引组织表
dump了索引组织表,发现跟索引的块结构是一样的。create table iot_t ( id number, name varchar2(10), primary key(id))organization index;insert into iot_t values(1,'a');insert into iot_t values(5,'e');原创 2017-05-17 20:23:40 · 722 阅读 · 0 评论 -
Oracle 11g索引的碎片分析
数据被删除之后,索引只是加了一个标记,并没有真正的删除,这样可以查看碎片率。drop table test purge;create table test as select * from dba_objects;insert into test select * from test;insert into test select * from test;commit;cr原创 2017-02-07 14:29:56 · 2014 阅读 · 0 评论 -
rdba地址如何计算出file_id和block_id
rdba: 0x0241a162转换一、第一种方法RDBA由rfile# + block#组成,相对文件号10位 block号22位。首先将十六进制转换为二进制:SELECT pkg_number_trans.f_hex_to_bin('0241a162') FROM dual; 10 0100 0001 1010 0001 0110 0010补全原创 2012-10-15 09:15:35 · 1310 阅读 · 0 评论 -
Cache buffers chains latch 与Cache buffers LRU chain latch
Cache buffers chains latch官方解释: This latch is acquired whenever a block in the buffer cache is accessed (pinned).Reducing contention for the cache buffer chains latch will usually require red原创 2013-06-15 10:35:31 · 1604 阅读 · 0 评论 -
rowid的理解及block转储(dump)、ITL、UBA、DBA
一、rowId的理解 select t.rowid,t.* from test t; --AAAMimAAFAAAAAMAAC 64进制 A-Z(0-25)a-z(26-51)0-9(52-61)+/(62-63) select 12*64*64+34*64+38 from dual; --51366 select rowid,dbms_ro原创 2012-08-15 21:49:35 · 3736 阅读 · 0 评论 -
x$bh详解
X$BH Fixed Table Buffer Cache Diagram Column Type Description~~~~~~ ~~~~~ ~~~~~~~~~~~ADDR RAW(4) Hex address of the Buffer Header.INDX NUMBER Buffer Header numberBU原创 2013-04-01 20:22:59 · 1798 阅读 · 0 评论 -
oracle中的IMU和 PVRS
1、概述在10g中,redolog buffer的改进,先提下,redo信息产生的过程:1)先在PGA区域中生成redo entries,也就是redo条目,并计算大小记录之;2)服务器进程oracle去rodolog buffer中申请 redo copy latch(redo 复制闩),失败了,会发生等待事件,成功了则:3)再去申请redo alloca转载 2013-04-04 10:55:38 · 1922 阅读 · 0 评论 -
ASSM原理
为什么要引入ASSM: 在920以前,表的剩余空间的管理与分配都是由链接列表freelist来完成的,因为freelist存在串行的问题因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA 花费大量的精力去管理这些争用并监控表的空间利用。新的管理机制用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-7原创 2012-12-27 19:52:00 · 2196 阅读 · 0 评论 -
逻辑读产生Cache Buffer Chain(简称CBC) Latch的解析
测试环境:版本11gR2SQL> select * fromv$version where rownum=1;BANNER--------------------------------------------------------------------------------Oracle Database 11gEnterprise Edition Release 11.2.转载 2013-04-01 22:11:01 · 1749 阅读 · 0 评论 -
DMT、LMT、MSSM、ASSM
dmt,lmt是管理segment中的extent的,而mssm和assm是管理extent中的block的。1、dmt (dictionary managed tablespace) 表空间里相应的数据文件中的extent是被使用了还是处于空闲是记录在两个数据字典表中(uet$:used extent;fet$:free extent),也就是说Oracle updates原创 2012-12-03 08:56:10 · 2872 阅读 · 0 评论 -
commit时的块清除
commit的时候最重要的事情是块清除(影响的块不超过缓冲的10%),块清除做的事情是清除块头中的事务信息。主要观察dump block的内容,block中的flag注释是:Flags: 1nibble。---- = transaction is active, or committed pending cleanoutC--- = transaction has been committ原创 2012-10-06 23:35:08 · 1017 阅读 · 0 评论 -
dump index的同时对rowid存储的解析
本地有个pub_department的表,索引为PK_PUB_DEPARTMENT。1.找到object_idselect object_id from dba_objects s where s.object_name='PK_PUB_DEPARTMENT'; OBJECT_ID----------644082.进行转储alter session原创 2012-11-23 09:50:18 · 1169 阅读 · 0 评论 -
oracle是如何进行全表扫描实验
从下列实验可以看出全表扫描是根据extent/block顺序去取数据, 第一次实验有'db file scattered read'等待事件,第二次实验已经把数据加载到databuffer中,所以没有等待实验。SQL> create table test as select * from dba_objects;SQL> select extent_id, file_id, block_i原创 2012-10-24 19:28:42 · 1527 阅读 · 0 评论 -
行链接nrid找到是哪个file,block
测试行链接时,nrid是链接的block,对于这个值如何找到是哪个块呢?如下:Block header dump: 0x01400166 Object id on Block? Y seg/obj: 0xc9dc csc: 0x00.138507 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x1400161 ver: 0x原创 2012-10-07 19:47:16 · 1824 阅读 · 0 评论 -
索引被更改时会生成undo,redo吗
当表的索引列被更改,索引会生成undo,redo。下列就是实验:SQL> create table bigtab as select * from dba_objects;SQL> create index ind_object_id on BIGTAB (object_id);SQL> select v$statname.name,value 2 from v$mysta原创 2012-10-07 00:11:31 · 1603 阅读 · 0 评论 -
dump block的内容解析(varchar2 number date)实验
对于dump block出来的字段内容一直都很好奇,碰巧看到老杨的blog对oracle基本数据类型存储格式,于是做了个试验。下面的两条数据就是dump出来的内容,图中字段截取了部分(要不然图太长了)。dump block 的内容,截取前两条数据:block_row_dump:tab 0, row 0, @0x1bc7tl: 77 fb: --H-FL-- lb: 0x1原创 2012-09-23 17:10:15 · 2578 阅读 · 0 评论 -
偷窥Data block 的物理结构
1. Data Block 物理结构图:2. 一次对block的dump过程: SQL> create table t9 (a varchar(10));Table created. SQL> insert into t9 values('a');1 row created. SQL> commit;Commit complete. SQL> s转载 2013-03-23 15:00:58 · 1812 阅读 · 0 评论