Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedure,trigger)的信息,以及这些对象所依赖的table,index,view等对象的信息。Li...
分类:
数据库 时间:
2014-12-09 12:00:17
阅读次数:
323
在oracle10G或者11G版本中,如何合理设置sharedpool大小,对oracle数据库的性能影响很大。SharedPool的大小设置规则如下:1.查到sharedpool设置的合理值,语句如下:select‘SharedPool‘component,shared_pool_size_for_estimateestd_sp_size,estd_lc_time_saved_factorparse_ti..
分类:
数据库 时间:
2014-11-08 02:13:47
阅读次数:
388
我们知道, SQL 在执行前, 先要进行解析, 解析后, 生成很多执行计划, 从中进行比较.1. 快速解析也就是我们常说的, 比如利用绑定变量等, SQL 的执行计划直接可以利用 shared pool 中的内容.tkprof sys=no sort=prsela,exeela,fchela发现解....
分类:
其他好文 时间:
2014-10-23 10:40:10
阅读次数:
208
之前给南京某客户优化一套OLTP数据库,其数据库中在某个时间段,会执行大量结构非常相似的查询语句,造成shared_pool被大量占用,导致数据库性能下降。碰到这种情况,其实最佳优化方案,就是让应用厂商修改相应代码,通过增加绑定变量,来有效减少相似SQL语句执行时的硬解析数,降低对shared_pool的消耗。下面来做一个关于绑定变量的测试:
1.创建测试用户并赋予权限
[oracle...
分类:
其他好文 时间:
2014-09-14 16:44:27
阅读次数:
278
1.1 现象描写叙述数据库节点响应缓慢,部分用户业务受到影响。查看数据库告警日志,開始显示ORA-07445错误,然后是大量的ORA-04031错误和ORA-00600错误。检查数据库日志,数据库仍处于活动状态的信息例如以下:Sat Jul 17 07:51:52 2010Thread 1 adva...
分类:
数据库 时间:
2014-08-27 23:15:18
阅读次数:
357
Cache BuffersLRU Chain闩锁竞争与解决
当用户进程需要读数据到Buffer Cache时或Cache Buffer根据LRU算法进行管理等,就不可避免的要扫描LRU List获取可用Buffer或更改Buffer状态,我们知道,Oracle的Buffer Cache是共享内存,可以为众多并发进程并发访问,所以在搜索的过程中必须获取Latch(Latch是Oracle的一种串行锁机制,用于保护共享内存结构),锁定内存结构,防止并发访问损坏内存中的数据(我们必须认识到对于数据的访问、Bu...
分类:
其他好文 时间:
2014-08-02 15:36:23
阅读次数:
393
1.2 shared pool原理
Shared Pool是Oracle SGA设置中最复杂也是最重要的一部分内容,Oracle通过Shared Pool来实现SQL共享、减少代码硬解析等,从而提高数据库的性能。在某些版本中,如果设置不当,Shared Pool可能会极大影响数据库的正常运行。
在Oracle 7之前,Shared Pool并不存在,每个Oracle连接都有一个独立的Server进程与之相关联,Server进程负责解析和优化所有SQL和PL/SQL代码。典型的,在OLTP环境中,很多代...
分类:
其他好文 时间:
2014-08-02 15:36:03
阅读次数:
354
X$KSMSP视图
Shared Pool 的空间分配和使用情况,可以通过一个内部视图来观察,这个视图就是X$KSMSP。
X$KSMSP的名称含义为: [K]ernal [S]torage [M]emory Management [S]GA Hea[P]其中每一行都代表着Shared Pool中的一个Chunk。以下是x$ksmsp的结构:
12:03:45 sys@felix SQL>desc x$ksmsp
Name Null? Type...
分类:
其他好文 时间:
2014-08-02 15:35:13
阅读次数:
274
诊断和解决ORA-04031 错误
Shared Pool的主要问题在根本上只有一个,就是碎片过多带来的性能影响。
1.2.7.1 什么是ORA-04031错误
当尝试在共享池分配大块的连续内存失败(很多时候是由于碎片过多,而并非真是内存不足)时,Oracle首先清除共享池中当前没使用的所有对象,使空闲内存块合并。如果仍然没有足够大的单块内存可以满足需要,就会产生ORA-04031错误。
如下一段伪代码来描述04031错误的产生:
Scan free lists --扫描Free...
分类:
其他好文 时间:
2014-08-02 15:34:23
阅读次数:
317
1.1 buffer pool原理
Buffer Cache是Oracle SGA中一个重要部分,通常的数据访问和修改都需要通过BufferCache来完成。当一个进程需要访问数据时,首先需要确定数据在内存中是否存在,如果数据在Buffer中存在,则需要根据数据的状态来判断是否可以直接访问还是需要构造一致性读取;如果数据在Buffer中不存在,则需要在Buffer Cache中寻找足够的空间以装载需要的数据,如果Buffer Cache中找不到足够的内存空间,则需要触发DBWR去写出脏数据,释放Buff...
分类:
其他好文 时间:
2014-08-02 12:50:33
阅读次数:
337