a bit more clarification required
Brian Davies, January 11, 2002 - 9:23 am UTC
At our sight, we're not using MTS or RMAN, nor are we using Oracle Parallel Server . We have several independent servers, each with varying numbers of CPUs (some have 1; some have 3; some have 6) and varying numbers of disks for storage.
Our objective is to enable and use parallel execution. We're trying to figure out whether Oracle will use the large pool, and how big we should make the pool.
In your book (pg 83), you state that the large pool is used by:
MTS;
Parallel Execution to coordinate parallel query servers;
RMAN Disk I/O buffers.
I interpret this to mean the Oracle will use the large pool for parallel execution query servers, even though we are not using MTS, RMAN, or parallel server (i.e. multiple machines).
Is my interpretation correct?
What views/tables should we look at to monitor Large Pool usage?
January 11, 2002 - 1:27 pm UTC
Correct.
v$sgastat is the view that shows you large pool utilization.
Large Pool Sizing
Andre, June 18, 2002 - 12:36 pm UTC
I've read as a quirk that setting PARALLEL_AUTOMATIC_TUNING=TRUE has a very useful side-effect of automatically and dynamically sizing the large pool, not only for parallel operations, but for the other cases as well (rman, mts, etc), preventing it from getting crowded -- so we don't have to worry about sizing it manually. What do you think of it ?
June 18, 2002 - 2:24 pm UTC
Well, as for having it be set for MTS (shared server), I'm not sure I'd let it do that. It'll look at the mts_dispatchers to figure out what to allocate for that -- so unless your sessions is set dead on and you use the "right" amount of uga memory in your sessions, you'll be wanting to set this yourself (as the parameter definition suggests you might).
Where are parallel query messages buffered
Dale Ware, March 06, 2003 - 9:23 am UTC
Tom,
I am curious about where the PQ messages are buffered when the parameters LARGE_POOL, DBWn_IO_SLAVES and PARALLEL_AUTOMATIC_TUNING are not set.
Would the shared pool be used under these circumstances?
March 06, 2003 - 9:50 am UTC
large_pool_size will be set for you if you have pq configured.
....
Otherwise, derived from the values of PARALLEL_MAX_ SERVERS, PARALLEL_THREADS_PER_CPU, CLUSTER_ DATABASE_INSTANCES, DISPATCHERS, and DBWR_IO_ SLAVES.
.........
and each of those has defaults as well.
answer = large pool
Parallel Query/execution
A reader, May 17, 2003 - 12:47 pm UTC
Tom,
The production system we have is a busy OLTP, a few hundred concurrent users and we will have more users coming. Someone has been recommending to set:
PARALLEL-AUTOMATIC_TUNING = TRUE for the Database. Do you think it right?
Thanks so much
May 17, 2003 - 3:18 pm UTC
nope.
not at all.
OLTP queries are characterized by
o small
o fast
parallel query is used to execute
o big, huge
o long running
queries.
If you have big huge long running queries, you do not have an oltp system.
Monitoring large pool memory consumption.
Jay Nelson, January 13, 2004 - 10:09 am UTC
The answers were very concise (and made sense). Very nice.
parallel_automatic_tuning=TRUE?
Vinnie, February 05, 2004 - 12:57 pm UTC
Tom,
I have a table that is dynamically created at run time. This table is loaded with data via a JAVA app & speed is essential. The developers are considering multithreading the app. IN your opinion would it help to set parallel_automatic_tuning=TRUE & create the table with the parallel clause?
If so, do we need to do anything else in the INSERT or SELECT statements against this table to utilize the parallelizm?
THanks
February 06, 2004 - 8:13 am UTC
you want to do it fast, do SQL stuff in plsql and use external tables and BULK operations (like insert /*+ append */ and maybe parallel query)
if you have a program doing "insert into tables values...." -- parallel = "no-op" for you. the client would have to do all of the parallelization.
if you want the least code that runs the fastest -- that'll be plsql with external tables using bulk operations.
Good
Gururaj, March 03, 2004 - 1:04 am UTC
Hi Tom,
When we use a parallel hint,what can be the maximium no.of
processes that can be started in parallel by the system and
also what is the max.number of instances that an Oracle database can have?
Thanks in advance.
March 03, 2004 - 9:45 am UTC
No Need to set parallel_automatic_tuning=true
nn, May 13, 2004 - 2:32 am UTC
enviroment 1
show parameter parallel
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_parallel_rollback string LOW
log_parallelism integer 1
parallel_adaptive_multi_user boolean TRUE
parallel_automatic_tuning boolean TRUE
parallel_execution_message_size integer 4096
parallel_instance_group string
parallel_max_servers integer 160
parallel_min_percent integer 0
parallel_min_servers integer 0
parallel_server boolean FALSE
parallel_server_instances integer 1
parallel_threads_per_cpu integer 2
recovery_parallelism integer 0
Execute DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =>'GCA_USER',TABNAME => 'GCA_BOOKING_DETAIL',ESTIMATE_PERCENT =>20,degree => 3);
STATUS PROGRAM MODULE LOGON_TIME LAST_CALL_ET PDM PDDL_STA CURRENT_QUEUE_DURATION
-------- ----------------------- -------- -------------- ----- --- ------ ----------------------
ACTIVE oracle@ned (P000) SQL*Plus 13-MAY-2004 05:24:01 2464 NO ENABLED 0
ACTIVE oracle@ned (P002) SQL*Plus 13-MAY-2004 05:24:01 2464 NO ENABLED 0
ACTIVE oracle@ned (P001) SQL*Plus 13-MAY-2004 05:24:01 2464 NO ENABLED 0
ACTIVE oracle@ned (P005) SQL*Plus 13-MAY-2004 05:24:01 2466 NO ENABLED 0
ACTIVE oracle@ned (P004) SQL*Plus 13-MAY-2004 05:24:01 2466 NO ENABLED 0
ACTIVE sqlplus@ned (TNS V1-V3) SQL*Plus 13-MAY-2004 05:23:10 2470 YES ENABLED 0
ACTIVE oracle@ned (P003) SQL*Plus 13-MAY-2004 05:24:01 2466 NO ENABLED 0
enviroment 2
fast_start_parallel_rollback string LOW
log_parallelism integer 1
parallel_adaptive_multi_user boolean FALSE
parallel_automatic_tuning boolean FALSE
parallel_execution_message_size integer 2152
parallel_instance_group string
parallel_max_servers integer 5
parallel_min_percent integer 0
parallel_min_servers integer 0
parallel_server boolean FALSE
parallel_server_instances integer 1
parallel_threads_per_cpu integer 2
recovery_parallelism integer 0
Execute DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =>'GCA_USER',TABNAME => 'GCA_BOOKING_DETAIL',ESTIMATE_PERCENT =>20,degree => 3);
STATUS PROGRAM MODULE LOGON_TIME LAST_CALL_ET PDM PDDL_STA CURRENT_QUEUE_DURATION
-------- ------------------------------------------------ ------------------------------------------------ -------- ------------ ------------
ACTIVE oracle@tosk (P001) SQL*Plus 13-MAY-2004 06:15:34 35 NO ENABLED 0
ACTIVE oracle@tosk (P000) SQL*Plus 13-MAY-2004 06:15:34 35 NO ENABLED 0
ACTIVE oracle@tosk (P003) SQL*Plus 13-MAY-2004 06:15:34 35 NO ENABLED 0
ACTIVE oracle@tosk (P004) SQL*Plus 13-MAY-2004 06:15:34 35 NO ENABLED 0
ACTIVE sqlplus@tosk (TNS V1-V3) SQL*Plus 13-MAY-2004 06:02:01 35 YES ENABLED 0
May 13, 2004 - 10:20 am UTC
care to share what you are trying to say here?
Shared server config
reader, May 14, 2004 - 12:46 pm UTC
(1) Is memory for "Response Queue" and "Request Queue" for Dispatchers in Shared Server Configuration allocated in Large Pool or somewhere in the SGA?
(2) Is there a view that would tell me this much memory was used for Response and Request Queue in the SGA?Thanks.
May 15, 2004 - 11:09 am UTC
it is in the SGA variable size. I do not know of a documented way to view the current sizes.
Oracle Documentation on PARALLEL_AUTOMATIC_TUNING
Vivek Sharma, May 21, 2004 - 3:38 pm UTC
Dear Tom,
Chapter 7 of Oracle 9i Documentation states about the Shared Pool as
"The shared pool portion of the SGA contains three major areas: library cache, dictionary cache, buffers for parallel execution messages, and control structures."
Then it gives a note as
"If the initialization parameter PARALLEL_AUTOMATIC_TUNING is set to true, these buffers are allocated from the large pool."
This is a bit confusing. I recollect, once an Oracle Support Executive visited our organization for RAC Implementation and wanted this parameter to be set to true. In RAC, I can understand that the locking details are maintained in Shared Pool thus to reduce the load on the shared pool, this parameter needs to be set so that Large Pool can be used.
My Question is :
1. If this parameter is set to TRUE, irrespective of RAC and Non RAC, will Large Pool behave like Shared Pool. i.e.will parsing of SQL Statements is done in Large Pool.
2. Can this be set on Non -RAC Databases ? If yes, then what is the advantage ?
3. What are other benefits of this parameter ?
I apologize for the amount of question I have asked but will appreciate this knowledge sharing from you.
Thanks and Regards
Vivek
May 22, 2004 - 11:17 am UTC
the large pool is used if configured, else the shared pool is used.
the large pool is used for "non-lru" type of memory allocations, of which UGA, RMAN, PQ are. If you are using those features (regardless of automatic or not), you would want to configure a large pool period.
1) large pool will not hold SQL, it'll hold UGA for shared server, rman buffers and PQ message buffers
Large Pool and Direct path insert
Wolfgang, January 08, 2006 - 12:30 pm UTC
January 09, 2006 - 7:52 am UTC
I commented in the thread.
Thanks
Wolfgang, January 10, 2006 - 3:41 am UTC
Thanks a lot Tom :-)
parallel execution and RAC
Karmit, February 07, 2006 - 3:16 am UTC
Hi Tom,
Trying to find an answer to this within Metalink and asktom, but not able to do so (yet!), so stealing your CPU cycles as a last resort.
We have just implemented 2 node 10g RAC. Now, if I execute a parallel operation while logged on to instance 1, the parallel slaves start up on instance 2 (nothing else is running on the boxes, I mean apart from essential OS services). I understand it tries to balance stuff and therefore the parallel slaves start up on whichever node it thinks best. My question is:
Is there a way to control this behaviour? Reason is - I
want to perform loading on a huge tables, which are
range-list partitioned by a certain code, and I "know"
that certain partitions are bigger than the rest and
hence want to divide the work up between the instances
manually. My "logic" being that since the instances
will be working on different partitions of the same
table - there should be less pressure on the
interconnect. However, if I cannot control the parallel
slaves then I cannot guarantee exclusive work on the
partitions within the instances.
I could be thinking in a completely wrong direction! any suggestions appreciated.
Thanks,
karmit
February 07, 2006 - 5:38 am UTC
you can prevent queries from
a) going parallel in a single instance
b) going parallel across instances
but you cannot control who does which bit of work where (unless you implement "do it yourself parallelism" - eg: not using the built in parallel stuff, but starting your own set of processes)
so you can stop it from starting parallel execution servers on the other node, keeping them all on the node you are on.
you can stop it from going parallel on the node you are on.
but you cannot say "node a, you do this, node b, you do that"
parallel execution and RAC
karmit, February 07, 2006 - 6:57 am UTC
Hi,
Did some more digging around and it seems that there's a
parameter called "PARALLEL_INSTANCE_GROUP" which works in
conjunction with "INSTANCE_GROUPS". This seems to address
my issue(?!).
So, will be testing this out:
a) Setting up instance 1 as Group 1
b) Setting up instance 2 as Group 2
c) SQL> alter session parallel_instance_group='GROUP1';
SQL> <<run load 1 - meant to run only on instance 1>>
d) SQL> alter session parallel_instance_group='GROUP2';
SQL> <<run load 2 - meant to run only on instance 2>>
(will be setting all tables/indexes to default degree+instance)
Would this work - as intended?
Regards,
Karmit
February 08, 2006 - 12:45 am UTC
that is the equivalent of "do it yourself parallelism", yes.
parallel execution and RAC
karmit, February 07, 2006 - 4:05 pm UTC
Tested this today and it does seem to work!!!
Basically, could control the exection of pq slaves per
instance using the parallel_instance_group parameter
in conjunction with instance_groups.
parallel_max_servers
Ian, February 19, 2007 - 11:16 am UTC
Tom
Is there a reason that parallel_max_servers cannot be changed on the fly? We have a situation whereby we want parallel_max_servers=72 at night but equal to zero during the day. Reason being that during the day we are heavily OLTP so we don't want PX - but at night we have huge snapshots to refresh so we need PX.
Is there anyway we can make it impossible to run PX during the day?
Obvioulsy we can just not run anything with a PX hint in it during the day - but that is not foolproof. The DOP on all our tables and Indexes is zero so PX should not kick in unless hinted - but statspack indicates that PX slaves are being used during the day.
Any advise gratefully received.
Regards
Ian
February 19, 2007 - 11:56 am UTC
well, you should have 72 set always in your case?!?
the OLTP queries would never use PQ and the batches would specifically ask for it.
Just do not parallel enable your segments (and PQ won't be used during OLTP) and ask for it during your batch.
but in any case
ops$tkyte%ORA10GR2> alter system set parallel_max_servers = 10;
System altered.
ops$tkyte%ORA10GR2> alter system set parallel_max_servers = 20
2 ;
System altered.
ops$tkyte%ORA10GR2> alter system set parallel_max_servers = 0;
System altered.
10g does permit it.
parallel_max_servers
Ian, February 20, 2007 - 4:43 am UTC
Sadly we are on 9.2.0.7
That's basically the route we are probably going to go - but it does leave us open to someone running a (homegrown) snapshot refresh during the day. I was just wondering if there was anyway of disabling it during te day. Guess not.
Cheers
Ian
Perfect
Ian, February 20, 2007 - 12:11 pm UTC
Thanks Tom - that's exactly what I was looking for.
Thanks and Regards
Ian