oracle-experimentation
dbaxyc
在重庆从事数据库运维管理工作欢迎交流
展开
-
晶晶实验七_之事务表篇
回滚段头中,有一项非常重要的信息,就是事务表。对事务表频繁的访问,可能会造成回滚段头的争用.了解什么样的操作会访问事务表,对于了解回滚段头争用的原因非常重要.下面我们来做一些实验来验证一下,什么样的操作才会访问事务表. 首先简单介绍一个视图,备份x$bh.对这个视图我想大家都有一定的了解,bh即buffer header 的简写.在buffer header中有一个TCH 列,表示块被转载 2013-01-02 21:39:02 · 488 阅读 · 0 评论 -
晶晶实验十六_详述逻辑读
晶晶实验十六 详述逻辑读 这篇实验讨论下数据的读写过程. 我们都知道,数据块是oracle最基本的读写单位,但用户所需要的数据,并不是整个块,而是块中的行,或列.当用户发出SQL语句时,此语句被解析执行完毕,就开始了数据的抓取阶段,在此阶段,服务器进程会先将行所在的数据块从数据文件中读入buffer cache,这个过程叫做物理读.物理读,每读取一个块,就算一次物理读.当块转载 2013-01-02 22:05:50 · 397 阅读 · 0 评论 -
晶晶实验十二_相关重做的等待事件
一,下面共描述了12个直接相关日志的等待事件,但只有前面几个是值得注意的. 1,log file parallel write 当日志缓存到日志文件时,这是一个主要的等待事件.虽然这个时间的名字中有"并行"(parallel)字样,但即使日志缓存并没有使用并行写,因日志缓存的写出而造成的等待仍然是此等待事件. 我们可以通过v$system_event来了解下某一个阶段内,转载 2013-01-02 21:51:11 · 353 阅读 · 0 评论 -
晶晶实验五_讨论锁 篇
晶晶实验五_讨论锁 篇锁是保护和用户相关的资源,例如:表,用户,会话. 和闩比起来,锁的实现要复杂的多.锁的获取和释放也没有闩快,有些锁持有的时间会比较长,如果说TM锁和TX锁.在DML操作中,用户不提交,这两个锁就不会被释放.锁主要保护会话层面上的一些资源.理解锁的原理还是比较简单的.不过先要明白相关锁的一些数据结构.下面我们先从介绍锁相关的数据结构开始入手. 一,池转载 2013-01-02 21:29:18 · 546 阅读 · 0 评论 -
晶晶实验一_插入时寻找空闲块的步骤篇(ASSM表空间)
晶晶实验一_插入时寻找空闲块的步骤篇(ASSM表空间)服务器进程寻找空闲块的步骤: 在ASSM表空间中,执行Insert声明时,Oracle是如何为声明分配可用块的? 以前已经有网友论证,在ASSM中,可用块的管理,由L3、L2和L1三级位图块实现。具体的步骤就是,先通过数据字典找到段头,而段头其实就是表的第一个L3块,在其中寻找L2。根据执行插转载 2013-01-02 21:13:54 · 636 阅读 · 0 评论 -
晶晶实验十七_逻辑读补疑篇
创建表空间命令如下:create tablespace jj_ts_1 datafile 'e:\oracle\jj_1.dbf' size 50m extent management local uniform size 20k segment space management auto;块大小4K,每区5个块。创建表命令:create table jj_two(id numbe转载 2013-01-02 22:07:13 · 382 阅读 · 0 评论 -
晶晶实验十四_Library cache 篇
第一小结 library cache 的内存结构Library cache的作用,最主要的就是存储已解析的SQL声明,避免硬解析。我们可以通过一个视图V$librarycache来了解Library cache点中率,已此来评估SQL声明的解析情况。应时时注意此视图中点中率情况,好及时发现并解决问题。一、Library cache中所存储的信息:1. 按对象类型分类:转载 2013-01-02 21:55:50 · 438 阅读 · 0 评论 -
晶晶实验二_插入时对L1块的选择篇
我的实验目的是证明:不同的会话做插入操作会选择不同的L1块,即使一个L1块内只使用了一个块。实验环境: 块大小:8K; 区大小1M; 实验表只包含一个区,为插入行;步一:先通过查看dba_segments视图找到段头,通过段头找到L2块,转储L2块,查看一共有几个L1,并记录其状态(L系列块的查找详见晶晶实验一,此处不再详述)*** 2008-0转载 2013-01-02 21:17:35 · 408 阅读 · 0 评论 -
晶晶实验十三_重做日志的资料
资料视图在对数据库做健康检查时,有重要的意义.准确的了解资料所代表的含义,能够是我们对数据库当前的状态做出更准确的判断.下面介绍下和重做相关的资料.一,下面3个资料是与LGWR直接相关的.仅由LGWR进程更新. 1,redo writes: LGWR从日志缓存中刷新重做记录到重做日志文件中的次数. 2,redo blocks written: 由LGWR写进重做转载 2013-01-02 21:54:01 · 654 阅读 · 0 评论 -
晶晶实验十_再论检查点篇
在晶晶实验九中,主要讲述了增量检查点,他属于检查点的一种,除了增量检查点之外,还有完全检查点和切换日志检查点.下面分别论述一下. 1,增量检查点, 增量检查点所涉及的主要概念,是一个队列一个进程.队列是检查点队列,进程是CKPT进程.CKPT进程有两项任务,一个是在一定的时机触发DBWR并告知DBWR的Target RBA,另一个任务是每3秒一次将DBWR的写进度更新到控制文转载 2013-01-02 21:47:16 · 594 阅读 · 0 评论 -
晶晶实验八_DML语句时回滚和重作的工作流程
实验所用表: create table jj_10(id number(5),name char(2000)) tablespace jj_ts_1; insert into jj_10 values(1,'aa'); insert into jj_10 values(2,'bb'); insert into jj_10 values(3转载 2013-01-02 21:40:40 · 3641 阅读 · 1 评论 -
晶晶实验六_自己动手构造CR块
晶晶实验六自己动手构造CR块一、查询魔术步1:在会话17中发布如下声明:17> var x refcursor17> exec open for select substr(c,1,5),id from t8;PL/SQL 过程已成功完成。步2:在会话13删除T8的所有记录且提交:13> delete t8 ;已删除 10 行。13> commit;提转载 2013-01-02 21:32:12 · 9408 阅读 · 0 评论 -
晶晶实验四_讨论闩 篇
因为闩的种类过多,以后分别在各自领域详细介绍.今天先总的介绍闩的概念. 闩不象锁,锁的结构非常复杂,在晶晶实验五中,我们就要讨论锁的结构.闩的实现相对与锁来说就非常简单了,大多数闩没有等待者,持有者等等这些队列,且大部分闩没有共享,独占等模式.(当然有部分闩例外).闩是内存中的一些位,使用CPU的硬指令(test and set 或swap)将其值设置为0或非0,表示是否转载 2013-01-02 21:25:49 · 487 阅读 · 0 评论 -
晶晶实验三_DDL和DML操作都加什么样的TM锁篇
晶晶实验三DDL和DML操作都加什么样的TM锁篇大家都知道TM锁共有6种模式,最常见的是3(插入,更新,删除);4(创建索引时);5(部分DDL操作如:删除列)等等,这些锁比较容易看到,不再详述实验经过.有些操作速度过块,如:Truncate和Drop等.这时不容易看到锁的状态,下面我做了个小实验来看清楚这些速度较快的命令持有什么样的锁. 例如:Truncate和Drop转载 2013-01-02 21:24:03 · 401 阅读 · 0 评论 -
晶晶实验十五_共享SQL区、私有SQL区与游标 篇
晶晶实验十五 共享SQL区、私有SQL区与游标 篇共享SQL区、私有SQL区与游标一、共享SQL区共享SQL区,就是Library cace中的游标对象的句柄和子堆这些数据的另一种叫法。二、私有SQL区的概念私有SQL区,在专用服务器模式下,存贮在PGA中。(复习一下PGA概念:PGA在服务器端分配,记录各种不同的连接至Oracle服务器的进程的信息转载 2013-01-02 21:57:47 · 503 阅读 · 0 评论 -
晶晶实验十一_相关重做日志的闩
一,相关闩的介绍 重做是先产生在各个会话的PGA中,再由各个会话的服务器进程,将重做记录拷贝到SGA中的log buffer中,再由LGWR进程刷新到redo log文件中.整个这个过程,涉及到3个比较重要的闩.分别是redo copy latch,redo allocation,和redo writing.下面先介绍下这3个闩,在重做产生的流程中,各自的作用.明白了这一点,对这3个闩的调优转载 2013-01-02 21:49:14 · 411 阅读 · 0 评论 -
晶晶实验九_详细论述增量检查点篇
**为什么要有检查点? 被修改过的块,在oracle中都被统称为脏块.所有的脏块被一个链表串起来,称做检查点队列.在buffer cache中,每一个块都有一个buffer header 简称BH,在BH中有一个ckptq项,此项目中记录了指向检查点队列上一个块和下一个块的指针.如果某一个块不在检查点队列中,他的ckptq项为空.通过ckptq项oracle将所有的脏块串成了一转载 2013-01-02 21:45:14 · 625 阅读 · 0 评论 -
晶晶实验十八_buffer cache中的LRU链
一、LRU链介绍HASH是快速查找时,常用的算法。Oracle中几乎在所有需要快速查找的地方,都使用了HASH算法。LRU则是在“资源重用”时,常用的算法。 在Buffer cache中,LRU链被分为两半,分别是热端、冷端,在默认方式下,热、冷端各占50%的块,这点可以由隐藏参数_db_percent_hot_default控制。当块第一次被读进Buffer时,会被插入到冷端转载 2013-01-03 07:38:30 · 476 阅读 · 0 评论