Re: shared pool waits

  • From: Pap <oracle.developer35@xxxxxxxxx>
  • To: Andy Sayer <andysayer@xxxxxxxxx>
  • Date: Thu, 23 Sep 2021 16:52:15 +0530

Yes so the underlying table is partitioned table and the stats getting
gathered on this table during the issue period. And we do have
no_invalidate set as false in table level ,as we want for some queries to
use the exact stats information to be used by the
optimizer immediately after the gathering. And as the table is hash
partitioned so when it's gathered all the partitions(even its incremental)
were being gathered and it takes a bit of time for that.

But in that case ,if hard parsing is the only issue,  why are we not seeing
IN_HARD_PARSE column as 'Y' for the most number of sample counts for this
sql. Also if you see the time model statistics section which i shared here
, its showing hard parse elapsed time as .6% of the DB time. So can it/hard
parse be really the issue? But even then, what should we do to handle this
issue in such a situation?

Another question I was having was , isn't it true that the stats will be
shared or say the dependent child cursor will be invalidated only after the
final global stats rollup happens rather with individual gathering on each
partition?

On Thu, Sep 23, 2021 at 4:07 PM Andy Sayer <andysayer@xxxxxxxxx> wrote:

Rolling invalidate sounds like you’re gathering statistics on the
dependent tables with rolling cursor invalidation. The default behaviour is
that it happens within 5 hours (with some randomness so that you don’t
reparse everything at once). See

https://blog.toadworld.com/why-my-execution-plan-has-not-been-shared-part-ii


It’s an issue if your parse waits are significant enough to be an issue.

What is the stats gathering plan for the tables in this query? Anything
fun like partitioning?

Thanks,
Andy

On Thu, 23 Sep 2021 at 11:30, Pap <oracle.developer35@xxxxxxxxx> wrote:

Thank you Andy. If I check now, I am seeing ~11 entries/child cursors in
gv$sql_shared_cusor and all of those ~10 of those having
rolling_invalid_mismatch column as 'Y' and same 10 are also having
'purged_cursor' column as 'Y'. So is it an issue? Or maybe we have to see
what it looks like when the issue appears i.e. when ~84 child cursors are
created.

On Thu, Sep 23, 2021 at 3:31 PM Andy Sayer <andysayer@xxxxxxxxx> wrote:

84 children is quite a lot. Have you checked what the parse reasons were
in v$sql_shared_cursor ? Worth googling the reasons with inurl:
https://hourim.wordpress.com/

Hope that helps,
Andy

On Thu, 23 Sep 2021 at 10:31, Pap <oracle.developer35@xxxxxxxxx> wrote:

In our case , optimizer_adaptive_plans TRUE and
optimizer_adaptive_statistics as FALSE. But in any case, if this is doing
high number of soft parses and that is causing issue, wont this resulted
into high number of child cursor or version count. The max number of
version count for this sql i saw is ~84 during this ~15 minutes period for
~190K execution of this select query. But yes there is no change in plan
its keep using same plan for all the executions. Is this really pointing to
an issue related to adaptive feature or parsing?

On Thu, Sep 23, 2021 at 3:12 AM Mladen Gogala <gogala.mladen@xxxxxxxxx>
wrote:


On 9/22/21 11:01, Chris Taylor wrote:
They came back with this - which is interesting because the
application issues pretty much the same SQL all the time - so why
would the SQL be invalid/unable to parse? Odd.


The answer are adaptive plans. You get cardinality feedback and your
plan "adapts". In English, that means re-executing a soft parse.

--
Mladen Gogala
Database Consultant
Tel: (347) 321-1217
https://dbwhisperer.wordpress.com

--
//www.freelists.org/webpage/oracle-l



Other related posts: