`
wsql
  • 浏览: 12098663 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

关于shared pool的深入探讨(六)

阅读更多

关于shared pool的深入探讨(六)

原文链接:

http://www.eygle.com/internal/shared_pool-6.htm

研究了几天shared pool,没想到忽然就撞到问题上来了.
作为一个案例写出来给大家参考一下吧.

问题起因是公司做短信群发,就是那个18万买的4000字的短信小说.
群发的时候每隔一段时间就会发生一次消息队列拥堵的情况
在数据库内部实际上是向一个数据表中记录发送日志.

我们介入来检查数据库的问题,在一个拥堵时段我开始诊断:

SQL> select sid,event,p1,p1raw from v$session_wait;

SID EVENT P1 P1RAW
---------- ---------------------------------------------------------------- ---------- --------
76 latch free 2147535824 8000CBD0
83 latch free 2147535824 8000CBD0
148 latch free 3415346832 CB920E90
288 latch free 2147535824 8000CBD0
285 latch free 2147535824 8000CBD0
196 latch free 2147535824 8000CBD0
317 latch free 2147535824 8000CBD0
2 pmon timer 300 0000012C
1 rdbms ipc message 300 0000012C
4 rdbms ipc message 300 0000012C
6 rdbms ipc message 180000 0002BF20

SID EVENT P1 P1RAW
---------- ---------------------------------------------------------------- ---------- --------
18 rdbms ipc message 6000 00001770
102 rdbms ipc message 6000 00001770
311 rdbms ipc message 6000 00001770
194 rdbms ipc message 6000 00001770
178 rdbms ipc message 6000 00001770
3 log file parallel write 1 00000001
13 log file sync 2705 00000A91
16 log file sync 2699 00000A8B
104 log file sync 2699 00000A8B
308 log file sync 2694 00000A86
262 log file sync 2705 00000A91

SID EVENT P1 P1RAW
---------- ---------------------------------------------------------------- ---------- --------
172 log file sync 2689 00000A81
169 log file sync 2705 00000A91
108 log file sync 2694 00000A86
38 log file sync 2707 00000A93
34 db file scattered read 63 0000003F
5 smon timer 300 0000012C
27 SQL*Net message to client 1413697536 54435000
60 SQL*Net message to client 1413697536 54435000
239 SQL*Net message to client 1413697536 54435000
...ignore some idle waiting here...
11 SQL*Net message from client 675562835 28444553
12 SQL*Net message from client 1413697536 54435000

170 rows selected.

在这次查询中,我发现大量的latch free等待,再次查询时这些等待消失,应用也恢复了正常.

SQL> select sid,event,p1,p1raw from v$session_wait where event not like 'SQL*Net%';

SID EVENT P1 P1RAW
---------- ---------------------------------------------------------------- ---------- --------
2 pmon timer 300 0000012C
1 rdbms ipc message 300 0000012C
4 rdbms ipc message 300 0000012C
6 rdbms ipc message 180000 0002BF20
18 rdbms ipc message 6000 00001770
102 rdbms ipc message 6000 00001770
178 rdbms ipc message 6000 00001770
194 rdbms ipc message 6000 00001770
311 rdbms ipc message 6000 00001770
3 log file parallel write 1 00000001
148 log file sync 2547 000009F3

SID EVENT P1 P1RAW
---------- ---------------------------------------------------------------- ---------- --------
273 log file sync 2544 000009F0
190 log file sync 2545 000009F1
5 smon timer 300 0000012C

14 rows selected.

接下来我们来看这些latch free等待的是哪些latch

SQL> select addr,latch#,name,gets,spin_gets from v$latch order by spin_gets;

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
80001398 3 session switching 111937 0
80002010 6 longop free list 37214 0
800023A0 7 cached attr list 0 0
80002628 10 event group latch 2391668 0
.....
80003F3C 28 message pool operations parent latch 3 0
.....
80006030 60 mostly latch-free SCN 19 0
80005F8C 59 file number translation table 68 0
80005F14 58 dlm cr bast queue latch 0 0
80005E8C 57 name-service request 0 0
80005E14 56 name-service memory objects 0 0
80005DA0 55 name-service namespace bucket 0 0

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
80005D2C 54 name-service pending queue 0 0
80005CB4 53 name-service request queue 0 0
80004E08 52 name-service entry 0 0
80008AB0 76 KCL lock element parent latch 0 0
80008A48 75 KCL instance latch 0 0
80007F18 73 redo copy 816 0
80007BBC 71 archive process latch 0 0
80007B54 70 archive control 1 0
80006A10 68 Active checkpoint queue latch 2003308 0
800064B0 66 large memory latch 0 0
80006448 65 cache protection latch 0 0

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
800060EC 61 batching SCNs 0 0
8000CAB0 96 global transaction 6833807 0
8000CA48 95 global tx free list 58258 0
8000C238 93 cost function 0 0
80009FCC 91 temp lob duration state obj allocation 0 0
8000995C 87 ktm global data 8118 0
80009228 84 transaction branch allocation 282388 0
80008EC4 80 begin backup scn array 6968 0
80008D54 79 loader state object freelist 42712 0
80008B80 78 KCL freelist latch 0 0
80008B18 77 KCL name table latch 0 0

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
8000D484 118 presentation list 0 0
8000D41C 117 session timer 855944 0
.....
8000E9D0 129 process queue 44 0
8000E900 127 query server freelists 66 0
8000FC84 140 AQ Propagation Scheduling System Load 0 0
8000E898 126 query server process 10 0
8000E27C 125 job_queue_processes parameter latch 111937 0
8000DA1C 124 NLS data objects 2 0

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
8000D95C 123 ncodef allocation latch 111937 0
8000D674 122 virtual circuits 0 0
8000D60C 121 virtual circuit queues 159877 0
8000D5A4 120 virtual circuit buffers 0 0
8000D4EC 119 address list 2 0
.....
8000CD70 102 Direct I/O Adaptor 2 0
.....
80002408 8 GDS latch 30 0
800092E4 85 sort extent pool 69834 1
8000EC38 132 parallel query alloc buffer 80 1
8000E968 128 error message lists 22 1
80001400 4 process group creation 2615542 2
8000EAA0 131 parallel query stats 14 2

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
8000CD08 101 Token Manager 1151107 2
8000CB18 97 global tx hash mapping 507846 2
80006378 63 cache buffer handles 315924 4
8000EA38 130 process queue reference 190993 5
80003E3C 26 channel handle pool latch 2391680 18
80003EAC 27 channel operations parent latch 4783425 24
80009B90 89 intra txn parallel recovery 32654 33
8000FCF8 141 fixed table rows for x$hs_session 161368 41
800012C8 1 process allocation 2391688 154
80009B28 88 parallel txn reco latch 174519 271
8000CCA0 100 library cache load lock 14947545 5958

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
8000C8D0 94 user lock 13086412 6078
8000914C 82 list of block allocation 120650357 12024
80006A78 69 Checkpoint queue latch 154361751 17686
80009D34 90 sequence cache 64611720 32027
80009090 81 dml lock allocation 234465024 45351
800091C0 83 transaction allocation 214227648 48345
800096AC 86 undo global data 188271244 49641
800028A0 13 enqueue hash chains 373244264 131322
80007E04 72 redo allocation 439389808 201498
80001468 5 session idle bit 2039097976 204969
80002838 12 enqueues 471338482 273695

ADDR LATCH# NAME GETS SPIN_GETS
-------- ---------- ---------------------------------------------------------------- ---------- ----------
80001330 2 session allocation 261826230 428312
800063E0 64 multiblock read objects 1380614923 1366278
800026B8 11 messages 207935758 1372606
80001218 0 latch wait list 203479569 1445342
80006310 62 cache buffers chains 3.8472E+10 2521699
8000A17C 92 row cache objects 1257586714 2555872
80007F80 74 redo writing 264722932 4458044
80006700 67 cache buffers lru chain 5664313769 30046921
8000CBD0 98 shared pool 122433688 59070585
8000CC38 99 library cache 4414533796 1037032730

142 rows selected.

SQL> select startup_time from v$instance;

STARTUP_T
---------
13-AUG-04

检查数据库启动时间


我们注意到,在当前数据库中竞争最严重的两个latch是shared pool和library cache.
显然这极有可能是SQL的过度解析造成的.

进一步我们检查v$sqlarea发现:
SQL> select sql_text,VERSION_COUNT,INVALIDATIONS,PARSE_CALLS,OPTIMIZER_MODE,PARSING_USER_ID,PARSING_SCHEMA_ID,ADDRESS,HASH_VALUE
from v$sqlarea where version_count >1000;
2


SQL_TEXT
------------------------------------------------------------------------------------------------------------------------
VERSION_COUNT INVALIDATIONS PARSE_CALLS OPTIMIZER_MODE PARSING_USER_ID PARSING_SCHEMA_ID ADDRESS HASH_VALUE
------------- ------------- ----------- ------------------------- --------------- ----------------- -------- ----------
insert into sms_log (MSGDATE,MSGTIME,MSGID,MSGKIND,MSGTYPE,MSGTYPE_MOMT,MSGLEN,MSGSTATUS,AREAID,IFIDDEST,IFIDSRC,ADDRSRC
,ADDRDEST,ADDRFEE,ADDRUSER,SERVICECODE,PLANID,FEETYPE,FEEVALUE,DATACODING,FLAGS,SMLEN,SMCONT) values (:b0,:b1,:b2,:b3,:b
4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:b17,:b18,:b19,:b20,:b21,:b22)
7023 0 1596 MULTIPLE CHILDREN PRESENT 36 36 C82AF1C8 3974744754

这就是写日志记录的代码,这段代码使用了绑定变量,但是version_count却有7023个.
也就是这个sql有7023个子指针.这是不可想象的.

通过前面几节的研究我们知道,如果这个sql有7023个子指针
那么意味着这些子指针都将存在于同一个Bucket的链表上
那么这也就意味着,如果同样SQL再次执行,Oracle将不得不搜索这个链表以寻找可以共享的SQL.
这将导致大量的library cache latch的竞争.

这时候我开始猜测原因:
1.可能代码存在问题,在每次执行之前程序修改某些session参数,导致sql不能共性
2.可能是8.1.5的v$sqlarea记录存在问题,我们看到的结果是假象:)
3.Bug

Ok,我们的诊断不能停.
最直接的我dump内存来看:

SQL> ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level 4';

察看trace文件得到如下结果(摘录包含该段代码的片断):

BUCKET 21049:
LIBRARY OBJECT HANDLE: handle=c82af1c8
name=
insert into sms_log (MSGDATE,MSGTIME,MSGID,MSGKIND,MSGTYPE,MSGTYPE_MOMT,MSGLEN,MSGSTATUS,AREAID,IFIDDEST,IFIDSRC,ADDRSRC,ADDRDEST,ADDRFEE,ADDRUSER,SERVICECODE,PLANID,FEETYPE,FEEVALUE,DATACODING,FLAGS,SMLEN,SMCONT) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:b17,:b18,:b19,:b20,:b21,:b22)
hash=ece9cab2 timestamp=09-09-2004 12:51:29
namespace=CRSR flags=RON/TIM/PN0/LRG/[10010001]
kkkk-dddd-llll=0000-0001-0001 lock=N pin=S latch=5
lwt=c82af1e0[c82af1e0,c82af1e0] ltm=c82af1e8[c82af1e8,c82af1e8]
pwt=c82af1f8[c82af1f8,c82af1f8] ptm=c82af250[c82af250,c82af250]
ref=c82af1d0[c82af1d0,c82af1d0]
LIBRARY OBJECT: object=c1588e84
type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0
CHILDREN: size=7024
child# table reference handle
------ -------- --------- --------
0 c1589040 c1589008 c668c2bc
1 c1589040 bfd179c4 c6ec9ee8
2 c1589040 bfd179e0 c2dd9b3c
3 c1589040 bfd179fc c5a46614
4 c1589040 bfd17a18 c35f1388
5 c1589040 bfd17a34 c77401bc
6 c1589040 bfd17a50 c4092838
7 c1589040 bfddb310 c6cd5258
8 c1589040 bfddb32c c63c6650
9 c1589040 bfddb348 c7e4e3d0
10 c1589040 bfddb364 c4c4b110
11 c1589040 bfddb380 c5950348
12 c1589040 bfddb39c c6c33aa4
13 c1589040 bfddb3b8 c672b0bc
...........................................
.....ignore losts of child cursor here.....
...........................................
7001 bf595bc8 c641fba0 c6467890
7002 bf595bc8 c641fbbc c3417168
7003 bf595bc8 c641fbd8 c3417bb0
7004 bf595bc8 c641fbf4 c2fdccbc
7005 bf595bc8 c641fc10 c7f7ca50
7006 bf595bc8 c641fc2c c7f508ec
7007 bf595bc8 c641fc48 c268d8d8
7008 c641fcb8 c641fc64 bec61ed8
7009 c641fcb8 c641fc80 c4a6cc5c
7010 c641fcb8 c641fc9c c1a8aa34
7011 c641fcb8 c0ae4ea0 c0ae4ddc
7012 c641fcb8 c0ae4ebc bd55fe60
7013 c641fcb8 c0ae4ed8 c226914c
7014 c641fcb8 c0ae4ef4 c51dd2e0
7015 c641fcb8 c0ae4f10 c480c468
7016 c641fcb8 c0ae4f2c c60196d0
7017 c641fcb8 c0ae4f48 c4675d2c
7018 c641fcb8 c0ae4f64 bd5e2750
7019 c641fcb8 c0ae4f80 c09b1bb0
7020 c641fcb8 c0ae4f9c bf2d6044
7021 c641fcb8 c0ae4fb8 c332c1c4
7022 c641fcb8 c0ae4fd4 cbdde0f8
DATA BLOCKS:
data# heap pointer status pins change
----- -------- -------- ------ ---- ------
0 c3ef2c50 c1588f08 I/P/A 0 NONE


这里确实存在7023个子指针

查询v$sql得到相同的结果:

SQL> select CHILD_NUMBER,EXECUTIONS,OPTIMIZER_MODE,OPTIMIZER_COST,PARSING_USER_ID,PARSING_SCHEMA_ID,ADDRESS,HASH_VALUE
2 from v$sql where HASH_VALUE='3974744754';

CHILD_NUMBER EXECUTIONS OPTIMIZER_ OPTIMIZER_COST PARSING_USER_ID PARSING_SCHEMA_ID ADDRESS HASH_VALUE
------------ ---------- ---------- -------------- --------------- ----------------- -------- ----------
0 12966 CHOOSE 238150 36 36 C82AF1C8 3974744754
1 7111 CHOOSE 238150 36 36 C82AF1C8 3974744754
2 9160 CHOOSE 238150 36 36 C82AF1C8 3974744754
3 9127 CHOOSE 238150 36 36 C82AF1C8 3974744754
4 8109 CHOOSE 238150 36 36 C82AF1C8 3974744754
5 4386 CHOOSE 238150 36 36 C82AF1C8 3974744754
6 4913 CHOOSE 238150 36 36 C82AF1C8 3974744754
7 3764 CHOOSE 238150 36 36 C82AF1C8 3974744754
8 3287 CHOOSE 238150 36 36 C82AF1C8 3974744754
9 3156 CHOOSE 238150 36 36 C82AF1C8 3974744754
.....
7015 1 CHOOSE 238150 36 36 C82AF1C8 3974744754
7016 1 CHOOSE 238150 36 36 C82AF1C8 3974744754
7017 0 CHOOSE 238150 36 36 C82AF1C8 3974744754

CHILD_NUMBER EXECUTIONS OPTIMIZER_ OPTIMIZER_COST PARSING_USER_ID PARSING_SCHEMA_ID ADDRESS HASH_VALUE
------------ ---------- ---------- -------------- --------------- ----------------- -------- ----------
7018 9396 NONE 0 0 C82AF1C8 3974744754
7019 5008 CHOOSE 237913 36 36 C82AF1C8 3974744754
7020 625 CHOOSE 237913 36 36 C82AF1C8 3974744754
7021 10101 CHOOSE 237913 36 36 C82AF1C8 3974744754
7022 7859 CHOOSE 237913 36 36 C82AF1C8 3974744754

7023 rows selected.


这里确实存在7023个子指针,第二种猜测被否定了,同时研发发过来的代码也不存在第一种情况.
那么只能是第三种情况了,Oracle的Bug,Ok,那我们需要找到解决办法.

搜索Metalink,发现Bug:1210242
该Bug描述为:
On certain SQL statements cursors are not shared when TIMED_STATISTICS is enabled.

碰巧我这个数据库的TIMED_STATISTICS设置为True
修改TIMED_STATISTICS为False以后,观察v$sql,发现有效子指针很快下降到2个.


SQL> select CHILD_NUMBER,OPTIMIZER_COST,OPTIMIZER_MODE,EXECUTIONS,ADDRESS from v$sql where hash_value=3974744754 and OPTIMIZER_MODE='CHOOSE';

CHILD_NUMBER OPTIMIZER_COST OPTIMIZER_ EXECUTIONS ADDRESS
------------ -------------- ---------- ---------- --------
0 238167 CHOOSE 63943 C82AF1C8
1 238300 CHOOSE 28915 C82AF1C8

第二天下降到只有一个.

SQL> select CHILD_NUMBER,OPTIMIZER_COST,OPTIMIZER_MODE,EXECUTIONS,ADDRESS from v$sql where hash_value=3974744754 and OPTIMIZER_MODE='CHOOSE';

CHILD_NUMBER OPTIMIZER_COST OPTIMIZER_ EXECUTIONS ADDRESS
------------ -------------- ---------- ---------- --------
0 238702 CHOOSE 578124 C82AF1C8


短信群发从此正常.

对于这个问题,另外一个可选的方法是设置一个隐含参数:
_sqlexec_progression_cost = 0

这个参数的具体含义为:
SQL execution progression monitoring cost threshold
即:SQL执行进度监控成本阀值

这个参数根据COST来决定需要监控的SQL.执行进度监控会引入额外的函数调用和Row Sources
这可能导致SQL的执行计划或成本发生改变,从而产生不同的子指针.
_sqlexec_progression_cost 的缺省值为1000,成本大于1000的所有SQL都会被监控
如果该参数设置为0,那么SQL的执行进度将不会被跟踪.

执行进度监控信息会被记录到V$SESSION_LONGOPS视图中,如果Time_statistics参数设置为False,那么这个信息就不会被记录.

所以,Time_statistics参数和_sqlexec_progression_cost是解决问题的两个途径.

通过查询我们也可以看到,在这个数据库中,OPTIMIZER_COST >1000的SQL主要有以下五个:

SQL> select distinct(sql_text) from v$sql where OPTIMIZER_COST >1000;

SQL_TEXT
--------------------------------------------------------------------------------
insert into sms_detail_error (msgdate,addruser,msgid,areaid,reason,spnumber,msgt
ime,ifiddest,msqkey,servicecode,planid,feetype,feevalue,smcont,submittimes,submi
tdate,submittime,msgstate_resp,errorcode_resp,msgstate_rept,errorcode_rept) valu
es (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:
b17,:b18,:b19,:b20)

insert into sms_detail_success (msgdate,addruser,msgid,areaid,spnumber,msgtime,i
fiddest,servicecode,planid,feetype,feevalue,smcont,submittimes,submitdate,submit
time,respdate,resptime,reptdate,repttime,msqkey) values (:b0,:b1,:b2,:b3,:b4,:b5
,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:b17,:b18,:b19)

insert into sms_log (MSGDATE,MSGTIME,MSGID,MSGKIND,MSGTYPE,MSGTYPE_MOMT,MSGLEN,M
SGSTATUS,AREAID,IFIDDEST,IFIDSRC,ADDRSRC,ADDRDEST,ADDRFEE,ADDRUSER,SERVICECODE,P
LANID,FEETYPE,FEEVALUE,DATACODING,FLAGS,SMLEN,SMCONT) values (:b0,:b1,:b2,:b3,:b
4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:b17,:b18,:b19,:b20,:b2
1,:b22)

insert into sms_resprept_error (msgdate,areaid,addruser,msgid,submittimes,submit
date,submittime,msgid_gw,msgstate_resp,errorcode_resp,msgstate_rept,errorcode_re
pt,servicecode) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12)

insert into sms_statusrept (reptdate,addruser,msgid_gw,repttime,statustype,msgid
_stus,msgstate,errorcode) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7)


而这五个SQL中,在v$sqlarea中,有四个version_count都在10以上:

SQL> select sql_text,version_count from v$sqlarea where version_count>10;

SQL_TEXT
--------------------------------------------------------------------------------
VERSION_COUNT
-------------
insert into sms_detail_error (msgdate,addruser,msgid,areaid,reason,spnumber,msgt
ime,ifiddest,msqkey,servicecode,planid,feetype,feevalue,smcont,submittimes,submi
tdate,submittime,msgstate_resp,errorcode_resp,msgstate_rept,errorcode_rept) valu
es (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:
b17,:b18,:b19,:b20)
42

insert into sms_log (MSGDATE,MSGTIME,MSGID,MSGKIND,MSGTYPE,MSGTYPE_MOMT,MSGLEN,M
SGSTATUS,AREAID,IFIDDEST,IFIDSRC,ADDRSRC,ADDRDEST,ADDRFEE,ADDRUSER,SERVICECODE,P
LANID,FEETYPE,FEEVALUE,DATACODING,FLAGS,SMLEN,SMCONT) values (:b0,:b1,:b2,:b3,:b
4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12,:b13,:b14,:b15,:b16,:b17,:b18,:b19,:b20,:b2
1,:b22)
7026

insert into sms_resprept_error (msgdate,areaid,addruser,msgid,submittimes,submit
date,submittime,msgid_gw,msgstate_resp,errorcode_resp,msgstate_rept,errorcode_re
pt,servicecode) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10,:b11,:b12)
301


insert into sms_statusrept (reptdate,addruser,msgid_gw,repttime,statustype,msgid
_stus,msgstate,errorcode) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7)
41

具体可以参考Metalink: Note62143

分享到:
评论

相关推荐

    计算机软件及应用Sharedpool深入分析及性能调整PPT学习教案.pptx

    《计算机软件及应用:Sharedpool深入分析及性能调整》 Sharedpool是Oracle数据库管理系统中的一个重要组成部分,它负责存储和管理SQL语句、执行计划、控制信息等,以提高数据库的性能。通过缓存用户提交的SQL语句,...

    相克军 ORACLE 讲座 shared pool 笔记

    在相克军的ORACLE讲座中,这一章节详细探讨了Shared Pool的工作原理、优化策略以及相关问题的解决方法。 首先,Shared Pool由三个主要部分构成:Free(剩余空间)、Library Cache和Row Cache。Free区域是用来存储未...

    SharedPool-开源

    本文将深入探讨SharedPool的设计理念、工作原理以及如何在实际应用中使用。 一、共享对象池的概念 对象池是一种设计模式,用于预先创建并维护一组对象,当需要时从池中获取,用完后归还。这种模式可以减少因频繁...

    ITPUB电子杂志

    关于shared pool的深入探讨 32bit oracle扩展SGA原理 32bit oracle中SGA_MAX_SIZE与单个进程PGA的制约关系 bitmap索引的一点探究 关于B*tree索引(index)的中度理解 本地管理表空间 倾力大奉献--...

    oracle内存管理,深入浅出oracle内存管理,盖国强oracleppt

    在深入理解Oracle内存管理的过程中,我们可以从以下几个方面进行探讨: 1. **内部存储与外部存储**:内部存储主要指的是Oracle实例内存结构,包括SGA(System Global Area)和PGA(Program Global Area)。SGA是...

    oracle性能优化-比较全面

    本文将深入探讨Oracle性能优化的两个关键方面:SGA(System Global Area)的Shared Pool优化和Buffer Cache的优化。 首先,我们关注Shared Pool的调优。Shared Pool是SGA的一个组成部分,它存储了SQL语句、PL/SQL...

    oracle机制及内存区的优化建议

    本文将深入探讨Oracle的核心组件,给出优化建议。 首先,Oracle数据库由内存、文件和进程三大核心组件构成。系统全局区(SGA)是Oracle内存管理的关键部分,它包括了Shared Pool、Database Buffer Cache、Redo Log ...

    如何解决Oracle 常见错误 ORA-04031(PDF)

    在深入探讨如何解决ORA-04031错误之前,我们需要先了解几个与共享池(`shared pool`)密切相关的Oracle实例参数: 1. **`SHARED_POOL_SIZE`**:此参数定义了共享池的总大小。可以设置为具体数值(例如1024),也可以...

    深入浅出Oracle:DBA入门、进阶与诊断案例

    - **Shared Pool**:共享池,包含数据字典缓存和其他共享结构。 - **Large Pool**:大型池,用于大对象的存储。 #### 五、Buffer Cache与Shared Pool原理 - **Buffer Cache**: - **LRU列表**:最近最少使用...

    CSDN Oracle第一期

    - **Sharedpool深入探讨**:eygle的系列文章深入剖析了Oracle Sharedpool的内部工作原理,包括其分配机制和作用,这对于高效管理数据库内存至关重要。 通过以上知识点的总结,可以看出CSDN Oracle第一期电子杂志...

    oracle内存全面分析

    在深入探讨Oracle内存管理的复杂性之前,我们首先应当明确Oracle内存配置对于数据库性能的决定性作用。Oracle的内存管理不仅直接关联到常见的内存错误(如4030、4031错误),这些错误往往成为数据库管理员(DBA)们的...

    深入解析Oracle

    1. **Shared Pool Latch**:用于控制对共享池中的对象(如SQL语句、PL/SQL程序包等)的访问。 2. **Library Cache Latch**:主要用于管理库缓存中的共享SQL区域,包括SQL文本、解析结果和执行计划等。 3. **Row ...

    Oracle 9i 调整SGA性能

    本文将深入探讨Oracle 9i中的System Global Area(SGA)性能调整,帮助你理解如何通过优化SGA来提升数据库的整体性能。 SGA是Oracle数据库的核心组成部分,它是一个共享内存区域,用于存储数据库运行时的各种信息。...

    Oracle数据库性能优化的实践与探讨.pdf

    共享池(shared pool)的大小对数据库性能至关重要,若设置过小可能导致错误和系统不稳定。文中提到,初始配置的共享池值过小,调整后显著提升了系统性能。调整SGA的其他组成部分,如数据块缓冲区(db_block_buffers...

    Oracle内存参数调优技术详解

    本文将深入探讨Oracle内存参数的调优技术,以期帮助公司的技术团队全面理解Oracle内存结构,并在实际工作中实现最优配置,提高应用程序响应速度,合理利用内存资源。 Oracle实例由两大部分构成:内存结构和进程结构...

    oracle实例的内存(SGA和PGA)进行调整,优化数据库性

    本文将深入探讨Oracle实例的内存管理机制,重点讲解系统全局区(SGA)与程序全局区(PGA)的组成部分及其调整方法,以实现数据库性能的最大化。 #### 一、Oracle实例内存架构概览 Oracle实例的内存结构主要分为两...

    基于Linux的Oracle Data Guard数据容灾系统.pdf

    SGA是一个共享内存区域,包含Shared Pool、Database Buffer Cache、Redo Log Buffer、Large Pool、Java Pool和Streams Pool等子组件。这些子组件分别用于缓存SQL查询、存储数据块、记录重做日志信息、提供大对象I/O...

    Oracle 性能 调优

    本文将深入探讨Oracle数据库内存管理的核心概念及其调整方法。 ##### 1. SGA(共享全局区) **定义**:SGA(Shared Global Area)是Oracle实例为所有用户进程所共享的一组内存结构,主要包括数据缓冲区、重做日志...

    ORACLE 数据库优化指南

    本文将围绕课程大纲中的各个主题进行深入探讨。 首先,Oracle9i Performance Tuning的纵览介绍了数据库优化的基本概念和目标。优化不仅关乎数据库的响应速度,也涉及资源的有效利用和系统的稳定性。在这一阶段,...

Global site tag (gtag.js) - Google Analytics