Shared pool fragmentation
Find below a modified version of a script retrieved from Metalink 146599.1 to check for shared pool fragmentation
I am not sure if it is possible, but is there any way to incorporate into this script a query that will show the effectiveness of using an ALTER SYSTEM FLUSH SHARED_POOL command .
select bucket, freespace,
ROUND(ratio_to_report(freespace) over () * 100, 5) AS "Percentage"
from
(select '0 (<140)' BUCKET, sum(KSMCHSIZ) freespace
from x$ksmsp
where KSMCHSIZ<140
and KSMCHCLS='free'
UNION ALL
select '1 (140-267)' BUCKET, sum(KSMCHSIZ) freespace
from x$ksmsp
where KSMCHSIZ between 140 and 267
and KSMCHCLS='free'
UNION ALL
select '2 (268-523)' BUCKET, sum(KSMCHSIZ) freespace
from x$ksmsp
where KSMCHSIZ between 268 and 523
and KSMCHCLS='free'
UNION ALL
select '3-5 (524-4107)' BUCKET, sum(KSMCHSIZ) freespace
from x$ksmsp
where KSMCHSIZ between 524 and 4107
and KSMCHCLS='free'
UNION ALL
select '6+ (4108+)' BUCKET, sum(KSMCHSIZ) freespace
from x$ksmsp
where KSMCHSIZ >= 4108
and KSMCHCLS='free');
Running this SQL, flushing the shared pool, and the re-running should show what the difference before and after is - or does this not suffice?
Flushing the shared pool is also not really addressing the root cause - which most often is non-sharable SQL.
Thus I'm not exactly sure what you're trying to achieve here. The SQL identifies the symptoms - flushing the shared pool treats those symptoms. For a while.
Surely you should rather be looking at the shared pool itself to determine what the problem is and try and fix that instead? A db logon trigger for a poorly written app can for example force cursor sharing for all sessions created by that app.
Similar Messages
-
Oracle shared pool fragmentation
We are running Identity Manager 7.0 using an Oracle database repository. We've been seeing shared pool fragmentation in the database resulting in various java.io.IOException: ORA-00600: internal error code messages when using bulk actions to create and remove accounts. Flushing the oracle shared pool is the only way we've found to clear these errors. Has anyone run into similar problems and found any solution other than increasing the size of the shared pool and issuing an 'alter system flush shared_pool' command periodically?
Scott Heaton wrote:
We have an application running WebLogic 5.1 against an Oracle 8.1.7.4 database
and are seeing very rapid fragmentation of the Oracle database shared pool, ultimately
resulting in an ORA-04031 error (unable to allocate xxxx bytes of shared memory).
I'm curious if there are are known issues with WebLogic 5.1 regarding the database
shared pool, retaining a handle to SQL statements issues (so that they cannot
be released), or anything similar? Thanks.What sp level of 5.1? We are caching prepared statements in the later versions,
so for every pooled connection there will be up to 10 (or whatever cache size
you set) prepared statements cached for re-use, and each of these will retain
a DBMS-side cursor. I am not an oracle DBA so I don't know if this relates directly
to the shared pool fragmentation...
Joe -
Hi,
does anybody know, if there is a view where i can see at which position in the shared pool there is free space and where are objects?
Reason. I would like to build a fragmentation map (like the EM Tablespace Map)
Thanks
MarcoThere is a view called X$KSMSP which you can search in metalink which would let you know the size of chunks which are free but will not tell the location..Secondly queries on this table are known to cause performance impact..I believe making a fancy map is not such a good idea. Just ensure that your hard parses are not more i.e using bind variables and child cursors are not getting generated.<br><br>
Amit<br>
www.askdba.org<br>
www.askdba.org/weblog/ -
Shared versus dedicated connections in the fragmentation of shared pool mem
Hi,
I have a old Oracle 8.1.7 database server.
I have a legacy application with no source code. This application don't use memory efficiently (no bind variables, etc.) , ie memory becomes fragmented.
I know that exists two ways to connect the database (dedicated and shared)
Based on this, I want to know which of the two options creates more fragmentation. I know that recommendation is to use dedicated connection, but I'm not sure if this is recomendation is applicable in this particular environment.
Thanks in advance.Whether you use shared or dedicated connections makes no difference for fragmentation in the shared pool. Whether your hard parse or do not hard parse does matter.
Measures you can take
- make sure often used packages like dbms_standard are pinned in the shared pool using a startup trigger
- set session_cached_cursors to 50 or 100. This will reduce parsing.
Sybrand Bakker
Senior Oracle DBA -
Keeping Large Objects in shared pool
Hi,
what is my doubt is the following mention objects
1) DBMS_Application_info
2) Trigger
3) Dbms_space_admin
4) DBMS_RCVCAT
5) DBMS_RCVMAN
6) DBMS_Shared_pool
7) dbms_standard
8) dbms_utility
9) dbms_backup_resotre
10) standard
the above mention object i keep in shared pool, IS it ok? or anythink peformance problems plz reply as soon as possiblehi,
Loading large objects is the primary source of fragmentations. Users' response time is affected because of the large number of small objects that need to be aged out from the shared pool to make room. To prevent these situations Keep these large or frequently required objects in the shared pool to make sure that they are never aged out of the shared pool.
thanking u -
The query 'select * from v$sgastat' showed that there is a shared pool free memory of 80MB. I read that a high value of free memory is a symptom of fragmentation. If that's also in my case, how can I defragment it? (I'm assuming that this has nothing to do with I/O tablespace fragmentation)
The only was to really defragment the shared pool is to bounce Oracle.
You can run a "alter system flush shared pool" command however this only makes contiguous chunks of free space available to be used. Oracle does not actually combine the chunks into one free extent like it does with dictionary managed tablespace free extents. The memory is managed by link lists and once a chunk is attached to a list it pretty much stays that way.
A large amount of free space could also indicate an over allocated shared pool.
HTH -- Mark D Powell -- -
Hi All,
DB:oracle9iR2
os:solaris
how to get the shared_pool usage,free total size and hit ratio in oracle 9i R2?,can any one help to me....
POOL BYTES MB
shared pool used :
shared pool free :
shared pool (Total):
=================
Shared_pool hit ratio:
thanks.Hi All,
thank you for all the responses..
Db:oracle 9iR2
os :solaris
Actually i am facing below problem..
prob: ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4224 bytes of shared memory ("shared pool","select obj#,type#,ctime,mtim...","sga heap(1,0)","library ca
che")
Wed Feb 8 19:33:43 2012
Errors in file /ora/admin/cddp/bdump/cddp_cjq0_2601.trc:
ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4224 bytes of shared memory ("shared pool","select obj#,type#,ctime,mtim...","sga heap(1,0)","library ca
che")
Wed Feb 8 19:33:43 2012
Errors in file /ora/admin/cddp/bdump/cddp_cjq0_2601.trc:
ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4224 bytes of shared memory ("shared pool","select obj#,type#,ctime,mtim...","sga heap(1,0)","library ca
che")
Wed Feb 8 19:33:48 2012
Errors in file /ora/admin/cddp/bdump/cddp_cjq0_2601.trc:
ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4224 bytes of shared memory ("shared pool","select obj#,type#,ctime,mtim...","sga heap(1,0)","library ca
che")
========================================
i was running with 200MB size of share pool....couple of days back un expectdly i got above error....for temparory solution i did shared pool flush...
again nexday same error got repeated....for that i increased shared pool size to 420 MB....
while monitoring db it is using shared pool memory up to 400MB with avg shared pool hit ratio of 94.5 %..(database started recently)...
Earlier shared_pool size:200MB
Now:420 MB
Avg usage:up to 400MB
my question is :
1)if we have many different sql statements in shared pool ..won't
oracle flush share pool (ie aged out based on LRU or some alogorithm) if any program need memory in shared pool?
2) Any data Fragmentation will cause@above error?
3)can any one please explain..... how to check whats going on in Shared_pool(internally)...why it is using 400MB while compare to erlier avg usage 170MB .....any idea...(how to find root cause)..?
4)will plan table cause any issue ?
can any one explain to me...
thanks..
Edited by: kk001 on Feb 11, 2012 4:54 PM
Edited by: kk001 on Feb 11, 2012 4:56 PM -
Hi,
ALTER SYSTEM FLUSH SHARED POOL;
when we issue the above command, it will fulsh the shared pool. it means, it will remove all the stored/parsed sql statements from shared pool. if any new query comes, first it has to parse and execute and show it to user.which will take time....
So, in what scenarios we do flush the shared pool...how do we know there is fragmentation is shared pool....
i am not experienced Performance Analayist..please share your experience.How can you reconcile what you wrote with the above statement from the Oracle docs?Um, because it's true?
It's realy clear to me that you don't have much job experience with Oracle (also evidence by your hiding your credentials and work history).
Back before cursor_sharing, the only way to relieve library cache stress was to make the shared_pool very small (see Metaink for the official recommendation), and the same holds true today for systems with ad-hoc query tools that can take-up 90% of the library cache with executions=1.
BTW, Mr. Morgan, I WANT MY MONEY BACK for your con-job on me.
When you told me that PSOUG was offering RAC classes, you knew that I believed that you were graciously volunteering a sevice to the community, and that's why you got all of those RAC books for your class at-cost, I wanted to help a good cause.
Of course, now we know that it was all a ruse, and that you were profiting from the PSOUG training.
When are you going to pay me back for those books that you conned me out of?
Message was edited by:
burleson -
Shared Pool Statistics - awr report -m 10.2.0.1
Hi,
I'm new to reading awr report and performance tuning.
I have the below in my statspack.
Do i need to increase my shared pool?
Any one can advise and explain "% Memory for SQL w/exec" and "% SQL with executions>1"
Shared Pool Statistics
Begin End
Memory Usage %: 95.78 97.71
% SQL with executions>1: 51.51 80.85
% Memory for SQL w/exec> 1: 67.88 82.46
thanks!user21123 wrote:
The sweet point for the shared pool Memory Usage % is at about ~70%-80% because of aging out. You are at ~90%. It would be advisable to increase the shared pool, but if you're using 10g SGA_TARGET and SGA_MAX_SIZE, then that might require increasing those parameters. It depends how your AWR report looks for the Buffer Cache.
What makes you think this ?
In an OLTP system you hope for 100% shareable SQL, and correct allocation for the other objects, which would lead to 100% usage. In realistic terms, you're likely to get a few percent (which is often the shared_pool_reserved) free because there's a constant turn-over of non-shareable SQL.
If you're always seeing 70% - 80%, then there are several scenraios that might explain the figure. One is that you've simply made shared pool a bit too big. At the opposite extreme you might be constantly flushing 20%-30% of the material from the shared pool because it has become so fragmented that you have to clear a lot of garbage to create a small amount of contiguous space.
The best guideline to follow is to check whether you appear to be losing a significant amount of time on libarary cache and shared pool latches, using up an undesirable amount of CPU on parse time, see lots of reloads (without corresponding invalidations) in v$librarycache.
Without further information, we really can't say how good or bad the situation is. In fact, it's possible that the information that +"50% of your SQL has been shared, 50% has been single use"+ is a possible indicator that the shared_pool_size is too small, and we are filling the excess space with garbage rather than keeping the garbage (and library cache search time) to a minimum.
I would be interested to hear the thinking behind your suggestion, though.
Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk
"The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge." Stephen Hawking. -
Increase Shared Pool for erorr # ORA-04031
hi,
what do i need to look at before i increase the shared pool of our database?
there is just the one database instance on the machine.
i am concerned about the repurcussions on the server.
i hope the information below is of help.
db version: 10.2.0.1.0
os: Red Hat Linux 3
SQL> select name, value from v$parameter where name like '%pool%';
name value
shared_pool_size 150994944
large_pool_size 33554432
java_pool_size 50331648
streams_pool_size 0
shared_pool_reserved_size 10066329
buffer_pool_keep
buffer_pool_recycle
global_context_pool_size
olap_page_pool_size 0
thanks,
santosh sewlalHi Santosh,
This is what i faced last two days back! Now i am monitoring the Issue! If you got any solutions please let me know how to avoid this!
ORA-04031 error can be due to either an inadequeate sizing of the SHARED POOL size or due to heavy
fragmentation leading the database to not finding large enough chuncks of memory.
You can monitor this with the two events...
alter system set events '4031 trace name errorstack level 3';
alter system set events '4031 trace name heapdump level 3';
Fragmentataion is one of the causes of ora 4031
Please refer these.
1.Article-ID: Note 146599.1
Title: Diagnosing and Resolving Error ORA-04031
2.Article-ID: Note 62143.1
Title: Understanding and Tuning the Shared Pool
3.Article-ID: Note 61623.1
This is paticular for Oracle 9i Rel 2, Hope the same for Oracle 10 G
Regards
Ravi -
Alter system flushed shared pool in RMAN backup
Hi,
I am trying to take RMAN backup of 11.2.0.1 Database in IBM AIX 6.1 server.
The RMAN is hanging .
Though the backup gets completed, The channels allocated doesnt get released and the RMAN gets hanging.
In earlier RMAN backup Scripts,
the DBA was using alter system flush shared pool in RMAN backup script and the backup was getting succesful.
Now my question is , is using ALTER SYSTEM FLUSH SHARED POOL have any performance impact on the database.
Regards,
TEJASTEJAS_DBA wrote:
Hi,
I am trying to take RMAN backup of 11.2.0.1 Database in IBM AIX 6.1 server.
The RMAN is hanging .
Though the backup gets completed, The channels allocated doesnt get released and the RMAN gets hanging.Are you setting the large pool? If you don't, then rman uses the shared pool. Read about tuning rman performance in the docs.
>
In earlier RMAN backup Scripts,
the DBA was using alter system flush shared pool in RMAN backup script and the backup was getting succesful.
Now my question is , is using ALTER SYSTEM FLUSH SHARED POOL have any performance impact on the database.Yes, you are allowing the components in there to be loaded in the random order of whatever is called first. This may have a good impact if you had some fragmentation in there, or it could be mildly bad if everything was well sorted, or it could be very bad if you are unlucky or have some pattern of invalidations or should be pinning something or who-knows-what. It generally is considered not a good thing to do as a habit. You wind up with [url http://tkyte.blogspot.com/2012/05/another-debugging-story.html]rainy Monday scenarios.
Edit: I notice there are some bugs, including very slow performance when using a catalog. When you say hang, how long are you waiting? Have you considered current patches?
Edited by: jgarry on Aug 8, 2012 11:09 AM -
Hello Team:
I ran a metalink script to report the shared pool utilization recently. I took this output when the database was on peak load.
SQL> /
Obj mem: 66435759 bytes (63.36MB)
Shared sql: 324219036 bytes (309.2MB)
Cursors: 341207073 bytes (325.4MB)
Free memory: 67228508 bytes (64.11MB)
Shared pool utilization (total): 468785754 bytes (447.07MB)
Shared pool allocation (actual): 754974720bytes (720MB)
Percentage Utilized: 91%
does this mean I have to add more space to shared pool. If so what is the threshold value?
Regards,
BalaBhawani nandan Prasad - Principal DBA -- See a to z diagnostics about Shared pool
1. Memory 2
a. Shared Pool 2
1. Introduction 2
2. Architecture 2
3. Scripts for different DBA tasks: 5
a.Measure object usage inside the shared pool and Tune shared pool 7
b.Check reload problem in library cache 12
c.Find the large queries in the shared pool library cache (using > 4mb each) 13
d.Find objects that can be considered pining into the shared pool 13
e.LRU work and objects were loaded and flushed 13
f.How much are waiting for Library Cache Latch 14
g.Queries identical but aren’t shared. 14
h.Get Biggest chunk of free memory. 14
i.Check the shared pool reserved size status 16
j.When having multiple subheaps: 16
k.Check shared pool at first glance quick diagnostics 17
l.Memory Usage - object list level view 17
m.Loads Number of times object has been loaded 17
n.Check number of times and object has been executed 18
o.Check shared pool in more details 18
p.Library Cache Statistics 18
q.Reserve Pool Settings 19
r.Pinned Objects 19
s.Finding literal SQL 19
t.Finding the Library Cache hit ratio 19
u. Row Cache Misses – Dictionary cache stats 19
v. Checking hash chain lengths 20
w. Checking for high version counts 20
x. Finding statement/s which use lots of shared pool memory 20
y. Allocations causing shared pool memory to be 'aged' out 21
z. Issues in various Oracle Releases 21
4. Terminology 22
5. Oracle 11g Caching and Pooling – SQL Result Cache 27
6. References 37
2. SQL 38
3. Statistics 38
4. Wait events 38
5. Schema 39
6. General 39
a. Scripts 39
1. accept.sql 39
1. Memory
a. Shared Pool
1. Introduction
Shared pool is used to cache different types of data such as textual and executable forms of PL/SQL blocks and SQL statements, dictionary cache data, and other data in SGA. Additional shared memory needed in the SHARED POOL if using ASM storage. Gathering schema/database stats (table/index stats) makes database query performance better and it reduce utilization of shared pool. Hence, practice to schedule job to gather stats regularly which suites your database performance. If you use shared pool effectively you can reduce resource consumption in at least four ways
1. Parse overhead is avoided if the SQL statement is already in the shared pool. This saves CPU resources on the host and elapsed time for the end user.
2. Latching resource usage is significantly reduced, which results in greater scalability.
3. Shared pool memory requirements are reduced, because all applications use the same pool of SQL statements and dictionary resources.
4. I/O resources are saved, because dictionary elements that are in the shared pool do not require disk access.
This sharable area of memory is managed as a sophisticated cache and heap manager rolled into one. It has 3 fundamental problems to overcome:
1. The unit of memory allocation is not a constant - memory allocations from the pool can be anything from a few bytes to many kilobytes
2. Not all memory can be 'freed' when a user finishes with it (as is the case in a traditional heap manager) as the aim of the shared pool is to maximize share of information. The information in the memory may be useful to another session - Oracle cannot know in advance if the items will be of any use to anyone else or not.
3. There is no disk area to page out to so this is not like a traditional cache where there is a file backing store. Only "rewriteable" information can be discarded from the cache and it has to be re-created when it is next needed.
Oracle 10g architecture of Shared pool:
Library Cache Shared SQL Area (Hash Value, SQL source, Execution plan)
Data Dictionary Cache
Enqueues Fixed Area Other
Latches
Oracle 11g architecture of Shared pool:
Library Cache Shared SQL Area (Hash Value, SQL source, Execution plan)
Data Dictionary Cache
Result Cache
Enqueues Fixed Area Other
Latches
1. Library Cache
Shared Sql Area: contains Parsed SQL and execution Plans for statements already run against the database. This area allows SQL execution plans to be reused by many users.
Private SQL Area: Private SQL areas are non-shared memory areas assigned to unique user sessions.
Pl/sql Area: contains the recently executed Procedures, Functions and Packages.
Control Structures: Common control structure information example Memory for Latches and locks, sequence cache.
2. Dictionary cache known as the row cache.
Dictionary cache stores all the metadata info of tables and views in the database, Names and data types of the columns in the database, Object and system privileges of all the Users. Oracle maintains the stats of all the objects in the shared pool, if any of the memory objects are not used from the last 3 seconds, these memory objects will be aged out and will be removed from the cache. All the Shared Pool Structures are maintained by a LRU (least recently Used) algorithm, by which Oracle removes the objects from the shared Pool, until there is enough free space in the shared Pool to keep new Object.
3. Scripts for different DBA tasks:
Dictionary Views for shared POOL:
NON-RAC
V$DB_CACHE_ADVICE
V$DB_OBJECT_CACHE
V$DLM_LATCH
V$DLM_LOCKS
V$LATCH
V$LATCHHOLDER
V$LATCHNAME
V$LATCH_CHILDREN
V$LATCH_MISSES
V$LATCH_PARENT
V$LIBRARYCACHE
V$LOCK
V$LOCKED_OBJECT
V$LOCKS_WITH_COLLISIONS
V$LOCK_ACTIVITY
V$LOCK_ELEMENT
V$OPEN_CURSOR
V$PROCESS
V$PX_PROCESS
V$PX_PROCESS_SYSSTAT
V$PX_SESSION
V$PX_SESSTAT
V$ROWCACHE
V$ROWCACHE_PARENT
V$ROWCACHE_SUBORDINATE
V$SESSION
V$SESSION_CONNECT_INFO
V$SESSION_CURSOR_CACHE
V$SESSION_EVENT
V$SESSION_LONGOPS
V$SESSION_OBJECT_CACHE
V$SESSION_WAIT
V$SESSTAT
V$SESS_IO
V$SGA
V$SGASTAT
V$SGAINFO
V$SGA_DYAMIC_COMPONENTS
V$SGA_DYNAMIC_FREE_MEMORY
V$SGA_RESIZE_OPS
V$SGA_CURRENT_RESIZE_OPS
v$shared_pool_advice
V_$SHARED_POOL_ADVICE
V$SHARED_POOL_RESERVED
V$SHARED_SERVER
V$SORT_SEGMENT
V$SORT_USAGE
V$SQL
V$SQLAREA
V$SQLTEXT
V$SQLTEXT_WITH_NEWLINES
V$SQL_BIND_DATA
V$SQL_BIND_METADATA
V$SQL_CURSOR
V$SQL_SHARED_CURSOR
V$SQL_SHARED_MEMORY
V$STATNAME
V$SUBCACHE
V$SYSSTAT
V$SYSTEM_CURSOR_CACHE
V$SYSTEM_EVENT
V$SYSTEM_PARAMETER
X$KSMSP
RAC
GV$LATCH
GV$LATCHHOLDER
GV$LATCHNAME
GV$LATCH_CHILDREN
GV$LATCH_MISSES
GV$LATCH_PARENT
GV$LIBRARYCACHE
GV$LOCK
GV$LOCKED_OBJECT
GV$LOCKS_WITH_COLLISIONS
GV$LOCK_ACTIVITY
GV$LOCK_ELEMENT
GV$PROCESS
GV$PX_PROCESS
GV$PX_PROCESS_SYSSTAT
GV$PX_SESSION
GV$PX_SESSTAT
GV$ROWCACHE
GV$ROWCACHE_PARENT
GV$ROWCACHE_SUBORDINATE
GV$SESSION
GV$SESSION_CONNECT_INFO
GV$SESSION_CURSOR_CACHE
GV$SESSION_EVENT
GV$SESSION_LONGOPS
GV$SESSION_OBJECT_CACHE
GV$SESSION_WAIT
GV$SESSTAT
GV$SESS_IO
GV$SGA
GV$SGASTAT
gv$shared_pool_advice
GV$SHARED_POOL_RESERVED
GV$SHARED_SERVER
GV$SORT_SEGMENT
GV$SORT_USAGE
GV$SQL
GV$SQLAREA
GV$SQLTEXT
GV$SQLTEXT_WITH_NEWLINES
GV$SQL_BIND_DATA
GV$SQL_BIND_METADATA
GV$SQL_CURSOR
GV$SQL_SHARED_CURSOR
GV$SQL_SHARED_MEMORY
GV$STATNAME
GV$SUBCACHE
GV$SYSSTAT
GV$SYSTEM_CURSOR_CACHE
GV$SYSTEM_EVENT
GV$SYSTEM_PARAMETER
GV$WAITSTAT
GV$_LOCK
a.Measure object usage inside the shared pool and Tune shared pool
set pagesize 132
column owner format a16
column name format a36
column sharable_mem format 999,999,999
column executions format 999,999,999
prompt
prompt Memory Usage of Shared Pool Order - Biggest First
prompt
column name format 45
select owner, name||' - '||type name, sharable_mem from v$db_object_cache
where sharable_mem > 10000
and type in ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE')
order by sharable_mem desc
prompt
prompt Loads into Shared Pool - Most Loads First
prompt
select owner, name||' - '||type name, loads , sharable_mem from v$db_object_cache
where loads > 3
and type in ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE')
order by loads desc
prompt
prompt Executions of Objects in the Shared Pool - Most Executions First
prompt
select owner, name||' - '||type name, executions from v$db_object_cache
where executions > 100
and type in ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE')
order by executions desc
select 'If the values for the EXEC and LOADS close increase SHARED_POOL_SIZE!' from dual ;
set feedback off
set linesize 80
set pagesize 52
clear columns
clear breaks
col executions HEADING EXEC
col sharable_mem heading SHAMEM
col owner format a8
col name format a30
col type format a12
set numwidth 8
ttitle center 'Data Base Objects Owned by All Users Statistics' skip 2
select name, type, sharable_mem, loads, executions, pins
from sys.v_$db_object_cache ;
b.Check reload problem in library cache
select namespace, pins, reloads from v$librarycache;
show parameters shared_pool
select bytes/1024/1024 from v$sgastat where pool='shared pool' and name='free memory';
c.Find the large queries in the shared pool library cache (using > 4mb each)
SELECT sql_text "Stmt", count(*), sum(sharable_mem) "Mem",
sum(users_opening) "Open", sum(executions) "Exec"
FROM v$sql GROUP BY sql_text HAVING sum(sharable_mem) > 4096000;
d.Find objects that can be considered pining into the shared pool
column name format a40
column owner format a15
select owner, name, executions, locks, pins, loads, kept from v$db_object_cache where loads > 10;
create temp table and insert records of candidates to be pinned.
CREATE TABLE LRU_TMP AS SELECT * FROM X$KSMLRU;
INSERT INTO LRU_TMP SELECT * FROM X$KSMLRU;
Use the LRU_TMP table for analysis.
SELECT USERNAME, KSMLRCOM, KSMLRHON, KSMLRNUM, KSMLRSIZ, SQL_TEXT
FROM V$SQLAREA A, LRU_TMP K, V$SESSION S WHERE KSMLRSIZ > 3000
AND A.ADDRESS=S.SQL_ADDRESS AND A.HASH_VALUE = S.SQL_HASH_VALUE
AND SADDR=KSMLRSES;
You can see the candidates to pin from the query below
COL STORED_OBJECT FORMAT A40;
COL SQ_EXECUTIONS FORMAT 999,999;
SELECT /*+ ORDERED USE_HASH(D) USE_HASH(C) */ O.KGLNAOWN||’.'||O.KGLNAOBJ STORED_OBJECT, SUM(C.KGLHDEXC) SQL_EXECUTIONS
FROM SYS.X$KGLOB O, SYS.X$KGLRD D, SYS.X$KGLCURSOR C
WHERE
O.INST_ID = USERENV(’INSTANCE’) AND
D.INST_ID = USERENV(’INSTANCE’) AND
C.INST_ID = USERENV(’INSTANCE’) AND
O.KGLOBTYP IN (7, 8, 9, 11, 12) AND
D.KGLHDCDR = O.KGLHDADR AND
C.KGLHDPAR = D.KGLRDHDL
GROUP BY O.KGLNAOWN, O.KGLNAOBJ
HAVING SUM(C.KGLHDEXC) > 0
ORDER BY 2 DESC;
How to pin object
EXECUTE SYS.DBMS_SHARED_POOL.SIZES(150);
EXECUTE SYS.DBMS_SHARED_POOL.KEEP('SYS.STANDARD');
EXECUTE SYS.DBMS_SHARED_POOL.UNKEEP('SYS.STANDARD');
e.LRU work and objects were loaded and flushed
LRU work in the shared pool KSMLRNUM stores the number of objects that were flushed to load the large object. KSMLRISZ stores the size of the object that was loaded (contiguous memory allocated)
column ksmlrcom format a20
column username format a5
select username,sid,KSMLRCOM,KSMLRSIZ,KSMLRNUM, KSMLRHON, KSMLROHV, KSMLRSES from x$ksmlru , v$session where KSMLRSES=SADDR and KSMLRNUM >2 ;
f.How much are waiting for Library Cache Latch
select count(*),event from v$session_wait where event not like '%SQL%' and event not like '%ipc%' and event not like '%timer%' GROUP BY EVENT;
select count(*),wait_time from v$session_wait where event='latch free' and p2=106 group by wait_time;
select sid,wait_time,seconds_in_wait from v$session_wait where event='latch free' and p2=106 and WAIT_TIME>1;
g.Queries identical but aren’t shared.
SELECT address, hash_value, version_count , users_opening , users_executing,
substr(sql_text,1,240) "SQL" FROM v$sqlarea WHERE version_count > 10;
h.Get Biggest chunk of free memory.
select sysdate, decode( sign(ksmchsiz - 812), -1, (ksmchsiz - 16) / 4,
decode(sign(ksmchsiz - 4012),-1, trunc((ksmchsiz + 11924) / 64),
decode(sign(ksmchsiz - 65548), -1, trunc(1/log(ksmchsiz - 11, 2)) + 238,254))) bucket,
sum(ksmchsiz) free_space, count(*) free_chunks, trunc(avg(ksmchsiz)) average_size,
max(ksmchsiz) biggest from x$ksmsp
where inst_id = userenv('Instance') and ksmchcls = 'free' group by
decode(sign(ksmchsiz - 812),-1, (ksmchsiz - 16) / 4,
decode(sign(ksmchsiz - 4012),-1, trunc((ksmchsiz + 11924) / 64),
decode(sign(ksmchsiz - 65548),-1, trunc(1/log(ksmchsiz - 11, 2)) + 238,254 ))) ;
SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),’999,999.00′)||’k’ “AVG SIZE”
FROM X$KSMSP GROUP BY KSMCHCLS;
CLASS NUM SIZ AVG SIZE
freeabl 19010 34519404 1.77k
recr 23581 24967956 1.03k
R-freea 68 1632 .02k
perm 22 39801268 1,766.75k
R-free 34 7238192 207.90k
free 2389 36075980 14.75k
Watch for trends using these guidelines:
a) if ‘free’ memory is low (less than 5mb or so) you may need to increase the shared_pool_size and shared_pool_reserved_size. You should expect ‘free’ memory to increase and decrease over time. Seeing trends where ‘free’ memory decreases consistently is not necessarily a problem, but seeing consistent spikes up and down could be a problem.
b) if ‘freeable’ or ‘perm’ memory continually grows then it is possible you are seeing a memory bug.
c) if ‘freeabl’ and ‘recr’ memory classes are always huge, this indicates that you have a lot of cursor info stored that is not releasing.
d) if ‘free’ memory is huge but you are still getting 4031 errors, the problem is likely reloads and invalids in the library cache causing fragmentation.
-Note says that this query can hang database on HP platforms
See the shared pool parameters
column name format a30
select name,value from v$parameter where name like '%shared_pool%' ;
select x.ksppinm, y.ksppstvl from x$ksppi x , x$ksppcv y where x.indx = y.indx and lower(x.ksppinm) like '%spin%';
SELECT count(*) FROM v$latch_children WHERE NAME = 'library cache';
Shrinking and growing operations from V$SGA_RESIZE_OPS dynamic view:
select to_char(end_time, ‘dd-Mon-yyyy hh24:mi’) end, oper_type, initial_size, target_size, final_size from V$SGA_RESIZE_OPS where component=’shared pool’ order by end;
#shared_pool_summary.sql -get an overview of chunks in the shared pool
select
ksmchcom contents,
count(*) chunks,
sum(decode(ksmchcls, 'recr', ksmchsiz)) recreatable,
sum(decode(ksmchcls, 'freeabl', ksmchsiz)) freeable,
sum(ksmchsiz) total
from
sys.x_$ksmsp
where
inst_id = userenv('Instance') and
ksmchcls not like 'R%'
group by
ksmchcom
#reserved_pool_summary.sql - get an overview of chunks in the reserved pool
select
ksmchcom contents,
count(*) chunks,
sum(decode(ksmchcls, 'R-recr', ksmchsiz)) recreatable,
sum(decode(ksmchcls, 'R-freea', ksmchsiz)) freeable,
sum(ksmchsiz) total
from
sys.x_$ksmspr
where
inst_id = userenv('Instance')
group by
ksmchcom
#save_sqlplus_settings.sql -reset sqlplus settings
set termout off
store set sqlplus_settings replace
clear breaks
clear columns
clear computes
set feedback off
set verify off
set termout on
set define "&"
#restore_sqlplus_settings.sql -reset sqlplus settings
set termout off
@sqlplus_settings
clear breaks
clear columns
clear computes
set termout on
i.Check the shared pool reserved size status
SELECT free_space, avg_free_size, used_space, avg_used_size, REQUEST_MISSES, request_failures, last_miss_size FROM v$shared_pool_reserved;
An ORA-04031 error referencing large failed requests, indicates the Reserved Area is too fragmented. The reserved pool is small when: REQUEST_FAILURES > 0 (and increasing), The DBA should Increase shared_pool_reserved_size and shared_pool_size together. It is possible that too much memory has been allocated to the reserved list. The DBA should Decrease shared_pool_reserved_size, If: REQUEST_MISS = 0 or not increasing
FREE_MEMORY = > 50% of shared_pool_reserved_size minimum
col free_space for 999,999,999,999 head “TOTAL FREE”
col avg_free_size for 999,999,999,999 head “AVERAGE|CHUNK SIZE
col free_count for 999,999,999,999 head “COUNT”
col request_misses for 999,999,999,999 head “REQUEST|MISSES
col request_failures for 999,999,999,999 head “REQUEST|FAILURES”
col max_free_size for 999,999,999,999 head “LARGEST CHUNK”
select free_space, avg_free_size, free_count, max_free_size, request_misses, request_failures from v$shared_pool_reserved;
TOTAL FREE AVERAGE
CHUNK SIZE COUNT LARGEST CHUNK REQUEST
MISSES REQUEST
FAILURES
7,238,192 212,888 34 212,888 0 0
You should also use hidden and unsupported parameter “_shared_pool_reserved_pct” to control reserved pool. This parameter controls the allocated percentage of shared pool for reserved pool. By default it is %5 of the shared pool and if you use ASMM for memory management you can set this value higher like 10 to allocate reserved pool dynamically. When you set the parameter you will see the shared_pool_reserved_size parameter will be adjusted to the new setting. The parameter can not be modified when instance is started. You can use the query below to see the current value
select a.ksppinm “Parameter”, b.ksppstvl “Session Value”, c.ksppstvl “Instance Value” from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c where a.indx = b.indx and a.indx = c.indx and a.ksppinm = ‘_shared_pool_reserved_pct’;
Parameter Session Value Instance Value
sharedpool_reserved_pct 10 10
j.When having multiple subheaps:
select KSMCHIDX, ksmchcom ChunkComment,
decode(round(ksmchsiz/1000),0,'0-1K', 1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k',6,'6-7k',7,'7-8k',8,'8-9k', 9,'9-10k', '> 10K'), count(*), ksmchcls Status, sum(ksmchsiz) Bytes
from x$ksmsp where KSMCHCOM = 'free memory' group by KSMCHIDX,ksmchcom, ksmchcls, decode(round(ksmchsiz/1000),0,'0-1K', 1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k',6,'6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10K');
SubPool SGA_HEAP CHUNKCOMMENT size COUNT(*) STATUS BYTES
1 sga heap(1,0) free memory > 10K 34 R-free 7238192
1 sga heap(1,0) free memory 3-4K 2 free 6284
1 sga heap(1,0) free memory > 10K 241 free 35707400
1 sga heap(1,0) free memory 8-9k 1 free 7712
1 sga heap(1,0) free memory 2-3K 4 free 6752
1 sga heap(1,0) free memory 0-1K 2090 free 133288
1 sga heap(1,0) free memory 9-10k 21 free 188676
1 sga heap(1,0) free memory 1-2K 30 free 25868
If you see lack of large chunks it is possible that you can face with ORA-04031 in near future.
k.Check shared pool at first glance quick diagnostics
select 'You may need to increase the SHARED_POOL_RESERVED_SIZE' Description, 'Request Failures = '||REQUEST_FAILURES Logic
from v$shared_pool_reserved where REQUEST_FAILURES > 0
and 0 != (select to_number(VALUE) from v$parameter
where NAME = 'shared_pool_reserved_size')
union
select 'You may be able to decrease the SHARED_POOL_RESERVED_SIZE' Description,'Request Failures = '||REQUEST_FAILURES Logic
from v$shared_pool_reserved where REQUEST_FAILURES < 5
and 0 != (select to_number(VALUE) from v$parameter
where NAME = 'shared_pool_reserved_size')
l.Memory Usage - object list level view
• Owner - Owner of the object
• Object - Name/namespace of the object
• Sharable Memory - Amount of sharable memory in the shared pool consumed by the object
select OWNER, NAME||' - '||TYPE object,SHARABLE_MEM
from v$db_object_cache where SHARABLE_MEM > 10000
and type in ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE')
order by owner asc ,SHARABLE_MEM desc
SELECT * FROM (SELECT ROW_NUMBER () over (PARTITION BY NAMESPACE ORDER BY SHARABLE_MEM DESC) ROW_within , NAMESPACE, SHARABLE_MEM, SUBSTR(NAME,1,40) NAME FROM V$DB_OBJECT_CACHE ORDER BY SHARABLE_MEM DESC) WHERE ROW_WITHIN <= 2 ORDER BY NAMESPACE, ROW_WITHIN;
ROW_WITHIN NAMESPACE SHARABLE_MEM NAME
1 CLUSTER 2794 C_OBJ#_INTCOL#
2 CLUSTER 1684 SMON_SCN_TO_TIME
1 RSRCPLAN 5117 SYS_GROUP -
Shared Pool _ Determine subpools & sizes
Hello guys,
as far as i know... oracle splits the shared pool into sub pools until 9i.
I can set a fix subpool count by using the hidden parameter "_kghdsidx_count".
But i want to know how oracle setup the size of the subpools if kghdsidxcount is not set. I was not able to find any document where the algorithm was described.
I have read something about bugs with the subpools (for example Metalinknote 4184298.8 or 4994956.8), because we are recieving a ORA-4031 but in the shared pool (v$sgastat) there is enough free space - i also have check ed the fragmentation - that was not the problem :)
I want to know how i can monitor the different sub pools and what is the algorithm for creating the sub pools?
Maybe someone of you knows a document .
Thanks and Regards
StefanArrrgs no need to go on with this topic..
I have found Metalinknote 396940.1 - there is anything i need.
Regards
Stefan -
Shared memory fragmentation:Duplicate cursor load in shared memory
Hi,
My database is suffering from shared memory fragmentation.
I have checked large objects loaded in shared pool by running dbms_shared_pool.sizes procedure and found duplicate cursors with different size are present there.
The statement looks like :-
MERGE INTO UII_21C_PTP PTP USING (SELECT PTP_ID, SLOT_ID, SUPPLIER_PORT_NAME, MODIFIED_SUPPLIER_PORT_NAME, PORT_LOGICAL_NAME, DIRECTION, CAPACITY, PORT_TYPE, OPERATIONAL_STATUS, MANAGED_ELEMENT_ID, MTOSI_PORT_NAME, PORT_TECHNOLOGY_TYPE, MESSAGE_ID FROM (SELECT TMP_PTP.PTP_ID PTP_ID, TMP_PTP.SLOT_ID SLOT_ID, TMP_PTP.SUPPLIER_PORT_NAME SUPPLIER_PORT_NAME, TMP_PTP.MODIFIED_SUPPLIER_PORT_NAME MODIFIED_SUPPLIER_PORT_NAME, TMP_PTP.PORT_LOGICAL_NAME PORT_LOGICAL_NAME, TMP_PTP.DIRECTION DIRECTION, TMP_PTP.CAPACITY CAPACITY, TMP_PTP.PORT_TYPE PORT_TYPE, TMP_PTP.OPERATIONAL_STATUS OPERATIONAL_STATUS, TMP_PTP.MANAGED_ELEMENT_ID MANAGED_ELEMENT_ID, TMP_PTP.MTOSI_PORT_NAME MTOSI_PORT_NAME, TMP_PTP.PORT_TECHNOLOGY_TYPE PORT_TECHNOLOGY_TYPE, TMP_PTP.MESSAGE_ID MESSAGE_ID, PTP.PTP_ID PTP_ID_1, PTP.SLOT_ID SLOT_ID_1, PTP.SUPPLIER_PORT_NAME SUPPLIER_PORT_NAME_1, PTP.MOD_SUPPLIER_PORT_NAME MODIFIED_SUPPLIER_PORT_NAME_1, PTP.PORT_LOGICAL_NAME PORT_LOGICAL_NAME_1, PTP.DIRECTION DIRECTION_1, PTP.CAPACITY C
And it has three entry with loads value 4488,4402 and 1 and sharable_mem are 250432,229720 and 6260.
Is there anything wrong with this cursor ?
The original merge statement in the procedure is:
MERGE INTO uii_21c_ptp ptp
USING (SELECT ptp_id, slot_id, supplier_port_name, modified_supplier_port_name,
port_logical_name, direction, capacity, port_type,
operational_status, managed_element_id,
mtosi_port_name, port_technology_type, message_id
FROM (SELECT tmp_ptp.ptp_id ptp_id, tmp_ptp.slot_id slot_id,
tmp_ptp.supplier_port_name supplier_port_name,
tmp_ptp.modified_supplier_port_name modified_supplier_port_name, /* Version 1.3 */
tmp_ptp.port_logical_name port_logical_name,
tmp_ptp.direction direction,
tmp_ptp.capacity capacity,
tmp_ptp.port_type port_type,
tmp_ptp.operational_status operational_status,
tmp_ptp.managed_element_id managed_element_id,
tmp_ptp.mtosi_port_name mtosi_port_name,
tmp_ptp.port_technology_type
port_technology_type,
tmp_ptp.message_id message_id,
ptp.ptp_id ptp_id_1, ptp.slot_id slot_id_1,
ptp.supplier_port_name supplier_port_name_1,
ptp.mod_supplier_port_name modified_supplier_port_name_1, /* Version 1.3 */
ptp.port_logical_name port_logical_name_1,
ptp.direction direction_1,
ptp.capacity capacity_1,
ptp.port_type port_type_1,
ptp.operational_status operational_status_1,
ptp.managed_element_id managed_element_id_1,
ptp.mtosi_port_name mtosi_port_name_1,
ptp.port_technology_type
port_technology_type_1,
ptp.xml_message_id message_id_1
FROM uii_tmp_ptp tmp_ptp, uii_21c_ptp ptp
WHERE tmp_ptp.ptp_id = ptp.ptp_id(+))
WHERE ( ptp_id IS NOT NULL
AND ( NVL (slot_id, ' ') != NVL (slot_id_1, ' ')
OR NVL (supplier_port_name, ' ') !=
NVL (supplier_port_name_1, ' ')
OR NVL(modified_supplier_port_name, ' ') != nvl(modified_supplier_port_name_1, ' ') /* Version 1.3 */
OR NVL (port_logical_name, ' ') !=
NVL (port_logical_name_1, ' ')
OR NVL (direction, ' ') != NVL (direction_1, ' ')
OR NVL (capacity, ' ') != NVL (capacity_1, ' ')
OR NVL (port_type, ' ') != NVL (port_type_1, ' ')
OR NVL (operational_status, ' ') !=
NVL (operational_status_1, ' ')
OR NVL (managed_element_id, ' ') !=
NVL (managed_element_id_1, ' ')
OR NVL (port_technology_type, ' ') !=
NVL (port_technology_type_1, ' ')
OR NVL (message_id, ' ') !=
NVL (message_id_1, ' ')
)) ptp1
ON (ptp.ptp_id = ptp1.ptp_id)
WHEN MATCHED THEN
UPDATE
SET ptp.slot_id = ptp1.slot_id,
ptp.supplier_port_name = ptp1.supplier_port_name,
ptp.mod_supplier_port_name = ptp1.modified_supplier_port_name, /* Version 1.3 */
ptp.port_logical_name = ptp1.port_logical_name,
ptp.direction = ptp1.direction,
ptp.capacity = ptp1.capacity,
ptp.port_type = ptp1.port_type,
ptp.operational_status = ptp1.operational_status,
ptp.managed_element_id = ptp1.managed_element_id,
ptp.mtosi_port_name = ptp1.mtosi_port_name,
ptp.port_technology_type = ptp1.port_technology_type,
ptp.xml_message_id = ptp1.message_id,
ptp.last_updated_by = 'PACS',
ptp.rts_last_update_date = SYSDATE,
ptp.watermark = wat_mark
WHEN NOT MATCHED THEN
INSERT (ptp_id, slot_id, supplier_port_name, mod_supplier_port_name, port_logical_name,
direction, capacity, port_type, operational_status,
managed_element_id, mtosi_port_name, port_technology_type,
created_by, rts_create_date, last_updated_by,
rts_last_update_date, watermark, xml_message_id)
VALUES (ptp1.ptp_id, ptp1.slot_id, ptp1.supplier_port_name, ptp1.modified_supplier_port_name,
ptp1.port_logical_name, ptp1.direction, ptp1.capacity,
ptp1.port_type, ptp1.operational_status,
ptp1.managed_element_id, ptp1.mtosi_port_name,
ptp1.port_technology_type, 'PACS', SYSDATE, 'PACS',
SYSDATE, wat_mark, ptp1.message_id);
I have checked that Cursor_sharing parameter is EXACT.
Please advise me.
Thanks in advance.
Azadmake sure the env var ORACLE_SID is set.
check PROCESSES in your init.ora file. if you lower this number (to say, 15) and errors go away then you need to up the semiphores kernel parameter (or leave PROCESSES set to a low number). Also, it is correct to get an error when trying to connect to a database that is shutdown. the only way to not get an error is use svrmgrl or "sqlplus /nolog" and then connect / as sysdba (or connect internal).
Andrew -
Explain one query in 256M shared pool and ORA-4031 .
Hi,
looks like Oracle 9.2.0.8 got some problems with explaining huge (1000 lines) queries, here
goes ORA-4031 dump, shared pool is about 256 M but there are no other sessions in that DB only mine .
I can reproduce that in 1GB shared pool as well .
*** 2010-09-06 09:43:24.005
*** SESSION ID:(13.24) 2010-09-06 09:43:23.997
=================================
Begin 4031 Diagnostic Information
=================================
The following information assists Oracle in diagnosing
causes of ORA-4031 errors. This trace may be disabled
by setting the init.ora parameter _4031_dump_bitvec = 0
======================================
Allocation Request Summary Information
======================================
Current information setting: 00654fff
Dump Interval=300 seconds SGA Heap Dump Interval=3600 seconds
Last Dump Time=09/06/2010 09:43:22
Allocation request for: qknAllocate : qkn
Heap: 70000002aa6f4e8, size: 640
HEAP DUMP heap name="sga heap" desc=700000000000058
extent sz=0xfe0 alt=200 het=32767 rec=9 flg=-126 opc=0
parent=0 owner=0 nex=0 xsz=0x0
HEAP DUMP heap name="sql area" desc=70000002aa6f4e8
extent sz=0x1040 alt=32767 het=32 rec=0 flg=2 opc=2
parent=700000000000058 owner=0 nex=0 xsz=0x1
Subheap has 102506016 bytes of memory allocated
====================
Process State Object
====================
SO: 7000000222fe540, type: 2, owner: 0, flag: INIT/-/-/0x00
(process) Oracle pid=12, calls cur/top: 700000021736ba0/700000021736ba0, flag: (0) -
int error: 0, call error: 0, sess error: 0, txn error 0
(post info) last post received: 199 0 4
last post received-location: kslpsr
last process to post me: 7000000222fca88 1 6
last post sent: 0 0 16
last post sent-location: ksasnd
last process posted by me: 7000000222fca88 1 6
(latch info) wait_event=0 bits=0
Process Group: DEFAULT, pseudo proc: 7000000212e7290
O/S info: user: oracle, term: UNKNOWN, ospid: 6766752
OSD pid info: Unix process pid: 6766752, image: oracle@prod3 (TNS V1-V3)
=========================
User Session State Object
=========================
SO: 7000000226ee540, type: 4, owner: 7000000222fe540, flag: INIT/-/-/0x00
(session) trans: 0, creator: 7000000222fe540, flag: (100045) USR/- BSY/-/-/-/-/-
DID: 0001-000C-00000002, short-term DID: 0000-0000-00000000
txn branch: 0
oct: 50, prv: 0, sql: 70000002aa7fbf8, psql: 0, user: 2622/INSTALL
program: sqlplus.exe
application name: SQL*Plus, hash value=3669949024
last wait for 'db file sequential read' blocking sess=0x0 seq=93 wait_time=11432
file#=1, block#=106e8, blocks=1
temporary object counter: 0
=========================
Current Parent KGL Object
=========================
LIBRARY OBJECT HANDLE: handle=70000002aa7fbf8
name=
explain plan for
select *
from salda
where saldo <> 0
and konta in ('361','362','363','371','372','373','380','381','382','383','384','385','386','387','388','389','390','391','392','393',
'394','395','396','397','398','399','400','401','402','403','404','405','406','407','408','409','410','411','412','413',
hash=ff099bfd timestamp=09-06-2010 09:41:45
namespace=CRSR flags=RON/KGHP/TIM/PN0/[10010000]
kkkk-dddd-llll=0000-0001-0001 lock=N pin=X latch#=7
lwt=70000002aa7fc28[70000002aa7fc28,70000002aa7fc28] ltm=70000002aa7fc38[70000002aa7fc38,70000002aa7fc38]
pwt=70000002aa7fc58[70000002aa7fc58,70000002aa7fc58] ptm=70000002aa7fce8[70000002aa7fce8,70000002aa7fce8]
ref=70000002aa7fc08[70000002aa7fc08, 70000002aa7fc08] lnd=70000002aa7fd00[70000002aa7fd00,70000002aa7fd00]
LIBRARY OBJECT: object=70000002aa6fc98
type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0
CHILDREN: size=16
child# table reference handle
0 70000002aa6ff08 70000002aa6fbc0 70000002aa6f7a0
==================
Current KGL Object
==================
LIBRARY OBJECT HANDLE: handle=70000002aa6f7a0
namespace=CRSR flags=RON/KGHP/PN0/[10010000]
kkkk-dddd-llll=0000-0000-0000 lock=N pin=X latch#=7
lwt=70000002aa6f7d0[70000002aa6f7d0,70000002aa6f7d0] ltm=70000002aa6f7e0[70000002aa6f7e0,70000002aa6f7e0]
pwt=70000002aa6f800[70000002aa6f800,70000002aa6f800] ptm=70000002aa6f890[70000002aa6f890,70000002aa6f890]
ref=70000002aa6f7b0[70000002aa6fbc0, 70000002aa6fbc0] lnd=70000002aa6f8a8[70000002aa6f8a8,70000002aa6f8a8]
LIBRARY OBJECT: object=70000002aa6f3b8
type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0
===========================
Current Instatiation Object
===========================
INSTANTIATION OBJECT: object=1102fa2e0
type="cursor"[2] lock=70000002865ffe0 handle=70000002aa7fbf8 body=0 level=0
flags=FST[60] executions=0
cursor name:
explain plan for
select *
from salda
where saldo <> 0
and nr_konta in ('361','362','363','371','372','373','380','381','382','383','384','385','386','387','388','389','390','391','392','393',
'394','395','396','397','398','399','400','401','402','403','404','405','406','407','408','409','410','411','412','413',
'414','432','450','453','454','455','456','457','458','459','460','461','462','463','464','465','466','467','468','469',
'470','471','472','473','474','475','476','477','478','479','480','481')
and (
(umowa = lpad('2169725150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2170639147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2170815147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2170991138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2173034150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2173821138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2174491138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2176065138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2177180150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2178183150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2178609150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2180241147',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2180252147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2180377148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2180787148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2181011148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2183314150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2187754150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189036150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189362150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189685150',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2191061124',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2194768150',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2195063150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2195568150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2196774143',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2196872143',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2196964143',10) and nr_klasy = lpad('7',3)) or
.... a lot off similar lines
child pin: 0, child lock: 70000002865fb18, parent lock: 70000002865ffe0
xscflg: 4004, parent handle: 70000002aa7fbf8, xscfl2: 0
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
ksm_4031_dump+065c bl ksedst 110006450 ?
ksmasg+0084 bl ksm_4031_dump FFFFFFFFFFF5F60 ? 10299AAF8 ?
000000000 ? 70000002A9007F8 ?
000000000 ? 000000000 ?
kghnospc+0178 bl _ptrgl
kghalp+00f0 bl kghnospc FFFFFFFFFFF6150 ?
422222247FFFFFFC ?
100107620 ? 080000000 ?
000000000 ?
kksalc+0048 bl kghalp 100107620 ? 000000000 ?
FFFFFFFFFFF62C0 ? 000000000 ?
000000080 ? 000000003 ?
qknAllocate+0040 bl kksalc 70000002AC2E1C0 ?
70000002C873DD8 ?
70000002AC2E1C0 ?
qknltAllocate+00d0 bl qknAllocate FFFFFFFFFFF65C0 ?
7000000345292A0 ? 000000000 ?
000000003 ?
qkatab+0ec8 bl qknltAllocate 000000000 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 000000000 ?
70000002C874170 ?
qkajoi+0b30 bl qkatab 000000000 ? 110378F00 ?
000000000 ? 000000042 ?
100002100050000 ? 110378530 ?
qkaqkn+08d0 bl qkajoi 000000000 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 000000000 ?
qkadrv+07a0 bl qkaqkn 000000000 ? 10299B690 ?
===============================
Memory Utilization of Subpool 1
===============================
Allocation Name Size
"free memory " 148632616
"miscellaneous " 3998104
"qmps connections " 1454200
"errors " 0
"txncallback " 246640
"PL/SQL MPCODE " 506520
"enqueue " 6054632
"KSXR pending messages que" 853952
"KQR L PO " 221192
"parameters " 1064
"Checkpoint queue " 1026560
"1M buffer " 528384
"db_block_hash_buckets " 589824
"fixed allocation callback" 1112
"sim trace entries " 196608
"KGLS heap " 374728
"KGK heap " 552
"channel handle " 780672
"MTTR advisory " 34088
"DML lock " 1022032
"trigger source " 2288
"trigger defini " 280
"dictionary cache " 2137216
"table definiti " 456
"KQR X PO " 28352
"transaction " 2747760
"constraints " 824960
"library cache " 2030512
"message pool freequeue " 213264
"sql area " 1546168
"sessions " 4467008
"replication session stats" 1004720
"event statistics per sess" 18791304
"KQR S SO " 5632
"sim memory hea " 157768
"PL/SQL DIANA " 80104
"KQR M PO " 141320
"messages " 624000
===============================
Memory Utilization of Subpool 2
===============================
Allocation Name Size
"free memory " 6285488
"miscellaneous " 8927008
"log_buffer " 1056800
"FileOpenBlock " 16270720
"sim memory hea " 162008
"KQR S SO " 9472
"transaction " 3297312
"PL/SQL DIANA " 0
"KGLS heap " 47776
"table definiti " 0
"db_handles " 3480000
"KQR L PO " 213056
"Temporary Tables State Ob" 775488
"trigger inform " 0
"message pool freequeue " 558720
"trigger defini " 0
"fixed allocation callback" 1168
"branch " 1180120
"ktlbk state objects " 1948360
"PLS non-lib hp " 2088
"KGK heap " 6448
"KQR M SO " 1024
"dictionary cache " 2137216
"parameters " 0
"Checkpoint queue " 1026560
"trigger source " 0
"enqueue resources " 768192
"library cache " 1798152
"KSXR receive buffers " 1034000
"sql area " 105380864
"processes " 4104000
"sessions " 4469712
"joxs heap init " 4240
"errors " 0
"event statistics per sess" 18779936
"PL/SQL MPCODE " 0
"KQR M PO " 173592
"UNDO INFO SEGMENTED ARRAY" 649856
LIBRARY CACHE STATISTICS:
namespace gets hit ratio pins hit ratio reloads invalids
CRSR 3184 0.874 12550 0.950 97 11
TABL/PRCD/TYPE 1917 0.871 2293 0.811 0 0
BODY/TYBD 52 0.788 52 0.788 0 0
TRGR 33 0.939 33 0.939 0 0
INDX 74 0.514 43 0.140 0 0
CLST 353 0.977 489 0.980 0 0
OBJE 0 0.000 0 0.000 0 0
PIPE 0 0.000 0 0.000 0 0
LOB 0 0.000 0 0.000 0 0
DIR 0 0.000 0 0.000 0 0
QUEU 0 0.000 0 0.000 0 0
OBJG 0 0.000 0 0.000 0 0
PROP 0 0.000 0 0.000 0 0
JVSC 0 0.000 0 0.000 0 0
JVRE 0 0.000 0 0.000 0 0
ROBJ 0 0.000 0 0.000 0 0
REIP 0 0.000 0 0.000 0 0
CPOB 0 0.000 0 0.000 0 0
EVNT 8 0.750 91 0.978 0 0
SUMM 0 0.000 0 0.000 0 0
DIMN 0 0.000 0 0.000 0 0
CTX 0 0.000 0 0.000 0 0
OUTL 0 0.000 0 0.000 0 0
RULS 0 0.000 0 0.000 0 0
RMGR 0 0.000 0 0.000 0 0
IFSD 0 0.000 0 0.000 0 0
PPLN 0 0.000 0 0.000 0 0
PCLS 0 0.000 0 0.000 0 0
SUBS 0 0.000 0 0.000 0 0
LOCS 0 0.000 0 0.000 0 0
RMOB 0 0.000 0 0.000 0 0
RSMD 0 0.000 0 0.000 0 0
JVSD 0 0.000 0 0.000 0 0
ENPR 0 0.000 0 0.000 0 0
RELC 0 0.000 0 0.000 0 0
STREAM 0 0.000 0 0.000 0 0
APPLY 0 0.000 0 0.000 0 0
APPLY SOURCE 0 0.000 0 0.000 0 0
APPLY DESTN 0 0.000 0 0.000 0 0
TEST 0 0.000 0 0.000 0 0
CUMULATIVE 5621 0.874 15551 0.928 97 11
Permanent space allocted for Load Locks
LATCH:0 TOTAL SPACE: 4248
FREELIST CHUNK COUNT:59 OBJECT SIZE:72
Permanent space allocted for KGL pins
LATCH:0 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:13 OBJECT SIZE:128
LATCH:1 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:15 OBJECT SIZE:128
LATCH:2 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:18 OBJECT SIZE:128
LATCH:3 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:19 OBJECT SIZE:128
LATCH:4 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:21 OBJECT SIZE:128
LATCH:5 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:27 OBJECT SIZE:128
LATCH:6 TOTAL SPACE: 4224
FREELIST CHUNK COUNT:16 OBJECT SIZE:128
Permanent space allocted for KGL locks
LATCH:0 TOTAL SPACE: 4216
FREELIST CHUNK COUNT:11 OBJECT SIZE:136
LATCH:1 TOTAL SPACE: 4216
FREELIST CHUNK COUNT:13 OBJECT SIZE:136
LATCH:2 TOTAL SPACE: 4216
FREELIST CHUNK COUNT:16 OBJECT SIZE:136
...<snipped>...any ideas ?GregG wrote:
Thanks,
but I'm interested in what is the particular problem. Looks like sql area is short on free chunks .I can't say if it is an oracle bug so feel free to ignore my post.
select *
from salda
where saldo 0
and nr_konta in ('361','362','363','371','372','373','380','381','382','383','384','385','386','387','388','389','390','391','392','393',
'394','395','396','397','398','399','400','401','402','403','404','405','406','407','408','409','410','411','412','413',
'414','432','450','453','454','455','456','457','458','459','460','461','462','463','464','465','466','467','468','469',
'470','471','472','473','474','475','476','477','478','479','480','481')
and (
(umowa = lpad('2169725150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2170639147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2170815147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2170991138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2173034150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2173821138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2174491138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2176065138',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2177180150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2178183150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2178609150',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2180241147',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2180252147',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2180377148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2180787148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2181011148',10) and nr_klasy = lpad('13',3)) or
(umowa = lpad('2183314150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2187754150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189036150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189362150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2189685150',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2191061124',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2194768150',10) and nr_klasy = lpad('27',3)) or
(umowa = lpad('2195063150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2195568150',10) and nr_klasy = lpad('9',3)) or
(umowa = lpad('2196774143',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2196872143',10) and nr_klasy = lpad('7',3)) or
(umowa = lpad('2196964143',10) and nr_klasy = lpad('7',3)) or
.... a lot off similar linesThis looks like an ideal candidate for using a Global Temporary table (if you can).
So if you can insert all combination of valid values for "umowa" and "nr_klasy" columns in a GTT,
you can simplify your query as
select *
from salda
where saldo 0
and nr_konta in ('361','362','363','371','372','373','380','381','382','383','384','385','386','387','388','389','390','391','392','393',
'394','395','396','397','398','399','400','401','402','403','404','405','406','407','408','409','410','411','412','413',
'414','432','450','453','454','455','456','457','458','459','460','461','462','463','464','465','466','467','468','469',
'470','471','472','473','474','475','476','477','478','479','480','481')
and (umowa, nr_klasy) in (select lpad(col1,10), lpad(col2,3) from gtt_temp)
Maybe you are looking for
-
Hi folks, I use BOXI r2 sp 4. I need to build a crosstab report with the following requirements: 1) Create a variance report structure 2) End user should select two periods to compare (i.e. 1Q08 vs 1q09), 3) The report should reflect the variance of
-
I've tried to append couple of BLOB fields from one table and then update it to a record in another table. I got the following error. Does anyone know why? CHECK POINT 1 begin ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: invalid LOB lo
-
Hi How to Clone a Dabase .. ?? When the Database is Online (Up and Running). I want to Clone the Database on the Same System. Its a testing scenario. In one of the interview I had faced this quesiton. Kindly, any one guide me in this regard, Thanks,
-
Best practice UOM changes for one master data
Hello ALL, What are the best practices must be followed while changing one master data UOM data. for eg i have two UOMs respectively, basic UOM = EA another one ia Alternative UOM CARĀ . 1 car = 10 EA. now my master data team deleting this CAR via MM
-
I got sims 3 and I brought it home. Before this I check on a website to see if I could play it on my computer. It said I could. I come home and I load it. Everything seemed to go fine... when i started it the blue screen of death popped up and my com