在Oracle中,不论数据块中存储的是表(TABLE)、索引(INDEX)或簇表(CLUSTER TABLE),其内部结构都是类似的。Oracle块的结构如下图所示: 图3-8 Oracle 块结构图 由上图可以看出,一个Oracle块大约由数据块头(包括标准内容和可变内容,Common And Variable Header)、表目录(Table Directory)、行目录(Row Directory)、...
下面,我们介绍两个和库缓存相关的等待事件,如题,就是Library cache lock和Library cache pin。 我们上面说到库缓存中的对象在库缓存中被切割成多个内存块,另有一个对象句柄记录了各个内存块的地址和其他的一些信息。当你要修改句柄中的信息时,需要在句柄上加独占锁,而如果另一个进程恰好在这时要求读、写句柄中的...
Namespace: 被加载对象在v$db_object_cache 视图中namespace名称。 16. Library cache pin这个等待事件和library cache lock 一样是发生在共享池中并发操作引起的事件。通常来讲,如果Oracle 要对一些PL/SQL 或者视图这样的对象做重新编译,需要将这些对象pin到共享池中。 如果此时这个对象被其他的用户特有,就会产生...
写链表所指向的是所有脏数据块缓存(即被进程修改过,但还没有被回写到数据文件中去的数据块,此时缓冲中的数据和数据文件中的数据不一致)。而LRU链表指向的是所有空闲的缓存、pin住的缓存以及还没有来的及移入写链表的脏缓存。空闲缓存中没有任何有用的数据,随时可以使用。而pin住的缓存是当前正在被访问的缓存。
编译SQL或PLSQL对象,获取该对象(cursor,procedure)handle上exclusive类型的lock,并且持有data heap上exclusive类型的pin,防止其他人读取和修改。同时,在该对象所依赖的对象(table)上,必须持有一个share类型的lock和pin,防止在修改的过程中,被其他进程所修改。5.3...
开启In-Memory Option,首先要设置In-Memory Option的大小,然后重启下数据库。 //这里设置In Memory Area大小为100mSQL> alter system set inmemory_size=100m scope=spfile;//加载表到IM中:SQL> alter table t2 inmemory;//取消In-Memeroy Area中的表SQL> alter table t2 no inmemory; ...
SQL> select * from v$sga_dynamic_free_memory; CURRENT_SIZE --- 8388608 1.1.3.数据库缓冲区(Database Buffers) Buffer Cache是SGA区中专门用于存放从数据文件中读取的的数据块拷贝的区域。Oracle进程如果发现需要访问的数据块已经在buffer cache中,就直接读写内存中的相应区域,而无需读取数据文件,从而大大提高...
取而代之的是Mutex的争用(你可以简单地将Mutex理解成是一种轻量级的Latch,Mutex主要也是用于共享SGA内存结构的并发访问控制),Oracle也因此引入了一系列新的等待事件来描述这种Mutex的争用,比如“Cursor:pinS”、“Cursor:pinX”、“Cursor:pin S wait on X”、"Cursor:mutex S'、“Cursor:mutex X”、“Library ...
通常将caching table 存放在keep buffer pool,缺省的情况下会放置在default buffer pool。 3.具有cache属性与pin 的差异 对于具有cache属性的对象,并不是将该对象pin到cache里,而是尽可能的延迟该对象驻留cache的时间 而对于pin对象,则是将该对象常驻到内存 ...
maxpin% = 90 maxperm% = 90 minperm% = 3 maxclient% = 90 strict_maxperm = 0 strict_maxclient = 1 page_steal_method = 1 --增加系统块大小分配,默认128,改为1024 # /usr/sbin/chdev -l sys0 -a ncargs='1024' # lsattr -El sys0 -a ncargs ncargs 1024 ARG/ENV list size in 4K ...