"Baker, Barbara" wrote:
> 
> Oracle 8.0.5
> Solaris 2.6
> 
> List:
> One of our users is getting this error message running a query:
> 
> ERROR:
> ORA-04031: unable to allocate 4194304 bytes of shared memory ("shared
> pool","unknown object","cursor work he","KKRH Hash Table")
> 
> The query is very simple (see below).  Happens consistently.  Error occurs
> after about 1 minute of execution.  No other problems in the database (no
> errors in alert, etc.)
> 
> I'm seeing latch wait this for the sid involved:
> 
>   SID EVENT            P1TEXT              P1 P2TEXT         P2 P3TEXT
> P3
> ----- ---------------- ---------- ----------- -------- -------- --------
> ------
>   409 latch free       address     2147519876 number         59 tries
> 0
>     1 pmon timer       duration           300                 0
> 0
>     6 smon timer       sleep time         300 failed          0
> 0
> 
> and then I see this for the same sid in v$lock (resource is type+id1+id2,
> query is from Steve Adams' site)
> 
> RESOURCE              NSID  SID HOLDING WANTING    SECONDS
> -------------------- ----- ---- ------- ------- ----------
> CU--1595636348-0       409  409       X                  0
> RT-1-0                   4 LGWR       X                  0
> TS-1-8388610             6 SMON      SX              55604
> 
> According to Anjo Kolk's description, a CU is a Bind enqueue.  Does this
> mean I'm running out of open_cursors?? (And if so, why are no other
> processes affected?)
> 
> Anyone seen this one before?
> 
> Thanks for any help!
> Barb
> 
> Here's the query:
> 
> select distinct
>     v.sales_id,
>     a.receiver,
>     a.adno,
>     a.unet,
>     a.vno,
>     a.enddate
> from advdb.ad a,
>      advdb.pub p,
>      advdb.voluntary_reps v
> where a.adno = p.adno
>     and a.vno = p.vno
>     and a.receiver = v.name
>     and p.state = 'VAR'
>     and p.vnoflag = 'Y'
> 

Barbara,

   I am always suspicious of 'very simple queries' which run for a
minute, whether they fail with a mysterious error or they don't.
Moreover, I always jump on my bazooka any time I see a SELECT DISTINCT,
especially with a join. To me, the execution plan could probably have
shed more light than V$LOCK. I guess that the poor beast is just
exhausting itself trying the impossible.
 If I were you, I would try something such as :

 select v.sales_id,
        a.receiver,
        a.adno,
        a.unet,
        a.vno,
        a.enddate
  from advdb.ad a,
       advdb.voluntary_reps v
  where a.receiver = v.name
    and exists (select null
                from advdb.pub p
                where p.adno = a.adno
                  and p.vno = a.vno
                  and p.state = 'VAR'
                  and p.vnoflag = 'Y')
 
or (probably better)

select v.sales_id,
       a.receiver,
       a.adno,
       a.unet,
       a.vno,
       a.enddate
from advdb.ad a,
     advdb.voluntary_reps v
where (a.adno, a.vno) in (select p.adno, p.vno
                          from advdb.pub p
                          where p.state = 'VAR'
                            and p.vnoflag = 'Y')
    and a.receiver = v.name

or possibly something else involving inline views. The best solution
depends of course on the volume of data returned and which columns are
indexed. You may well solve your problem with a query which will run
much faster.

-- 
Regards,

Stephane Faroult
Oriole Ltd
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Stephane Faroult
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to