Thread: db_writer_processes data sets

This question is answered. Helpful answers available: 0. Correct answers available: 1.


Permlink Replies: 19 - Pages: 2 [ 1 2 | Next ] - Last Post: Aug 19, 2009 3:08 PM Last Post By: Taral Desai
Taral Desai

Posts: 90
Registered: 08/26/07
db_writer_processes data sets
Posted: Jun 3, 2009 12:19 PM
 
Click to report abuse...   Click to reply to this thread Reply
Hi All,

Can you please educate me on below things. Also, please correct me if i am wrong

1.
db_writer_processes controls number of db writers that are been started when instance is initialized. So, once DB is up lets say we have 6 dbwriter process then your buffer cache is splitted in 6 working data sets. Can you please explain what is this datasets are ? or may be if i am wrong .

2.
If so this is true how can we find that which dataset is used by which dbwrite processes. I mean how to find one to one mapping for say 0x address- to 0y address is been worked by dbwr1 process and so on. how to find this

3.
If we have multiple buffer cache like db_16k and db_32k then how do we map this.

Reason behind this we are using 12 dbwriter process for we have 12gb of sga and 10gb of pga. Some time we are getting buffer busy waits. So, need to find that we are using multiple buffer pools. So, if it is from there then i can suggest management to use only default block size and not multiple. I already know that multiple buffer pool have overhead of managing one more memory structure so need to investigate and learn from you.

My idea is to reduce this and then start adding processes if necessary
damorgan

Posts: 8,145
Registered: 10/20/03
Re: db_writer_processes data sets
Posted: Jun 3, 2009 1:13 PM   in response to: Taral Desai in response to: Taral Desai
 
Click to report abuse...   Click to reply to this thread Reply
I can not help you reverse engineer Oracle and you are taking an extraordinarily difficult path to solving a very simple solution.

Oak Table members and experts such as Jonathan Lewis and Tom Kyte have repeatedly written about the rationale behind there being
multiple block sizes and this isn't it.

Set up a test environment and demonstrate that the problem is resolved. Personally I'd tear the thing down immediately.

12 db writers? Did anyone do testing or did they just conclude bigger numbers are better?
sb92075

Posts: 2,573
Registered: 06/27/99
Re: db_writer_processes data sets
Posted: Jun 3, 2009 1:22 PM   in response to: Taral Desai in response to: Taral Desai
 
Click to report abuse...   Click to reply to this thread Reply
Some time we are getting buffer busy waits.
Not all waits can or should be eliminated.

What percentage of overall elapsed time is be spent on buffer busy waits (BBW)?
If BBW were reduced to ZERO, by how much would application performance be improved?
Please quantify.
Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 3, 2009 2:06 PM   in response to: Taral Desai in response to: Taral Desai
Helpful
Click to report abuse...   Click to reply to this thread Reply
Taral Desai wrote:
db_writer_processes controls number of db writers that are been started when instance is initialized. So, once DB is up lets say we have 6 dbwriter process then your buffer cache is splitted in 6 working data sets. Can you please explain what is this datasets are ? or may be if i am wrong .

There have been some significant variations in the way working data sets work since 8i - and you haven't said which version of Oracle you're running (although we can guess it's 9i or later). In 10g the number of database writers does NOT affect the number of working data sets (x$kcbwds).

The following notes are based on my most recent observations in 10g:

The number of CPUs controls the number of working data sets. Each buffer pool (and there are 8 of them) will be split into N working data sets where N is cpu_count / 2 (but I haven't tried checking what happens with an odd number of CPUs). Edit: a quick check suggests that the value is rounded down when cpu_count is odd

The number of database writer processes is cpu_count / 8 (possibly rounded up when the number of CPUs is not a multiple of 8). Edit: A quick test suggests that this assumotion about rounding up is correct.

If so this is true how can we find that which dataset is used by which dbwrite processes. I mean how to find one to one mapping for say 0x address- to 0y address is been worked by dbwr1 process and so on. how to find this

Since the number of working data sets per buffer pool is larger than (possibly 4 x) the number of database writers, I think we can assume one of two strategies - each database writer is responsible for M working data sets, or a database writer just uses a round-robin algorithm to pick the next working data set (or rather its checkpoint queue) to clear - using a nowait latch, perhaps, to bypass a working data set that is being cleared by another writer.


3.
If we have multiple buffer cache like db_16k and db_32k then how do we map this.

Question pre-empted by notes above.

Reason behind this we are using 12 dbwriter process for we have 12gb of sga and 10gb of pga. Some time we are getting buffer busy waits. So, need to find that we are using multiple buffer pools. So, if it is from there then i can suggest management to use only default block size and not multiple. I already know that multiple buffer pool have overhead of managing one more memory structure so need to investigate and learn from you.

Go and search at Kevin Closson's blog for comments on multiple DB writers - but unless you have 96 CPUs you probably don't need 12 database writers.

Buffer busy waits aren't an indicator of problems with database writers - although if you've got 12 of them competing for CPU then any buffer busy waits that have appeared may get exaggerated because of the extra competition for CPU.

If you look at v$buffer_pool_statistics you can break down the buffer busy wait by cache - and most of them are in the 16KB and 32KB cache it may be an indication that you've put data into a larger block size when an alternative solution would have been better. Nevertheless you need to work out why you're getting buffer busy waits before you expend any significant efforts to restructure the database.

Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"Science is more than a body of knowledge; it is a way of thinking"
Carl Sagan

Edited by: Jonathan Lewis on Jun 4, 2009 6:48 AM
Added checks on rounding.

Taral Desai

Posts: 90
Registered: 08/26/07
Re: db_writer_processes data sets
Posted: Jun 3, 2009 3:18 PM   in response to: Jonathan Lewis in response to: Jonathan Lewis
 
Click to report abuse...   Click to reply to this thread Reply
My bad We are using 10.2.0.3 and solaris 10 sparc 64 bit environment

Thanks Dan & Jonathan For helping me out understanding things. Because i want to present it to my management and some DBA's disagree with this things so i am planning to have some test setup to show that 12 dbwriter is not so necessary.

Also, I don't know what kind of test to provide can you please make light on this.

I tried to explain some DBA's saying that we have default 16k block size and there is no need to 32k cache for faster things. It could have been worse but they disagree and here are the proof
SQL> 
SQL> select
  2    block_size, free_buffer_wait, buffer_busy_wait, dirty_buffers_inspected,
  3    physical_reads, physical_writes
  4  from
  5    v$buffer_pool_statistics
  6  ;
 
BLOCK_SIZE FREE_BUFFER_WAIT BUFFER_BUSY_WAIT DIRTY_BUFFERS_INSPECTED PHYSICAL_READS PHYSICAL_WRITES
---------- ---------------- ---------------- ----------------------- -------------- ---------------
     16384           102982            58474                  296163        5986981        11116073
     32768        107978876        137272925               109161143      319435124       144205406


Also one more thing does cpu_count parameter affect dbwriter processes. As it seems from your reply in that formula if so then in our environment previous dba might had made change to this parameter as we have 4 CPU development box but value for cpu_count is set to 8.

Management want me to provide some test case for reducing dbwriter process and also blocksize to default will make performance benifit and i don't know where to start.
Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 3, 2009 10:31 PM   in response to: Taral Desai in response to: Taral Desai
Helpful
Click to report abuse...   Click to reply to this thread Reply
Taral Desai wrote:
SQL> 
SQL> select
  2    block_size, free_buffer_wait, buffer_busy_wait, dirty_buffers_inspected,
  3    physical_reads, physical_writes
  4  from
  5    v$buffer_pool_statistics
  6  ;
 
BLOCK_SIZE FREE_BUFFER_WAIT BUFFER_BUSY_WAIT DIRTY_BUFFERS_INSPECTED PHYSICAL_READS PHYSICAL_WRITES
---------- ---------------- ---------------- ----------------------- -------------- ---------------
     16384           102982            58474                  296163        5986981        11116073
     32768        107978876        137272925               109161143      319435124       144205406

Is that the whole of the output ?
If so, do you have a default size of 16KB with an alternate of 32KB, or is your default block size 32KB ?

The output of statspack or AWR during a busy period would be more useful that this query, since the view shows statistics since database startup, so the numbers (without a time scale) don't really tell us anything.

Load profile, Top 5, Time model, OS stats (basically the first couple of pages) plus Instance Statistics, and in your case the buffer cache section (whatever it's called) would be a good start.

Addendum:
In answer to your question, the cpu_count does affect the number of working data sets and database writers directly - your development box will have 2 working data sets per cache size and your production box will have 4 working data sets per cache size if my comments are correct. And if you have only the two cache areas you've got more database writers (you said 12) than working data sets (total 8) - which is counter-productive.

Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"Science is more than a body of knowledge; it is a way of thinking"
Carl Sagan

John Brady

Posts: 186
Registered: 12/19/07
Re: db_writer_processes data sets
Posted: Jun 4, 2009 1:59 AM   in response to: Taral Desai in response to: Taral Desai
 
Click to report abuse...   Click to reply to this thread Reply
Also one more thing does cpu_count parameter affect dbwriter processes?

I think what Jonathan was referring to was how db_writer_processes gets set by default when you do not explicitly assign it a value in your parameter file. So by default it would be cpu_count / 8 rounded up, as documented in the Reference Manual. If you set db_writer_processes explicitly, then the cpu_count calculation is no longer relevant - the value of db_writer_processes is whatever you have set it to.

At least, I think that's what Jonathan meant. I hope I haven't got it wrong.

Oracle now uses asynchronous I/O by default. So a single Database Writer is able to schedule many I/O writes one after the other, with no delay, and later deal with the acknowledgements that they have completed. So one Database Writer is only really limited by the speed of the CPU and the internal I/O scheduling mechanism of the operating system - it is not limited by the actual disk speed at all. Faster CPUs should have no affect on how many Database Writer processes you need.

Which means that rather than explicitly setting the db_writer_processes value, you can let it default on both systems to the lower value. You could always test it on your test system - does setting db_writer_processes to 1 on the test system have any impact on your application performance or on these buffer busy waits you are seeing? If there is no difference, then your problem is nothing to do with the number of database writers.

The only major circumstance I can think of for having multiple Database Writer processes is when you do not have asynchronous I/O, and so it is using synchronous I/O instead. In this case the Database Writer has to wait for each I/O to complete, and can only issue one I/O at a time. But most systems now fully support asynchronous I/O.

Sometimes this happens when storing the data files as ordinary files in a file system. But Solaris does have asynchronous I/O by default, and does support it on its file systems (using threads inside light weight processes). Of course if you are using a different file system, such as Veritas, then this is not necessarily true. Either way you should have disk_asynch_io as true (which it is by default) and filesystemio_options as "setall", which supports both async I/O and Direct I/O on Solaris.

John

chris_c

Posts: 340
Registered: 10/17/06
Re: db_writer_processes data sets
Posted: Jun 4, 2009 5:35 AM   in response to: John Brady in response to: John Brady
 
Click to report abuse...   Click to reply to this thread Reply
The only major circumstance I can think of for having multiple Database Writer processes is when you do not have asynchronous I/O, and so it is using synchronous I/O instead. In this case the Database Writer has to wait for each I/O to complete, and can only issue one I/O at a time. But most systems now fully support asynchronous I/O.

If this is the case then setting DBWR_IO_SLAVES may be a better option, although most systems do support async IO I still come accross the odd one or two that doesn't have the capability.
Taral Desai

Posts: 90
Registered: 08/26/07
Re: db_writer_processes data sets
Posted: Jun 4, 2009 6:59 AM   in response to: Jonathan Lewis in response to: Jonathan Lewis
 
Click to report abuse...   Click to reply to this thread Reply
Hi Jonathan,

Thank you so very much for the reply and explanination.

16k block size is our default blocksize and 32k is alternative.

"Addendum:
In answer to your question, the cpu_count does affect the number of working data sets and database writers directly - your development box will have 2 working data sets per cache size and your production box will have 4 working data sets per cache size if my comments are correct. And if you have only the two cache areas you've got more database writers (you said 12) than working data sets (total 8) - which is counter-productive.
"

Can you please explain above in detail. Like lets say we have 4 cpu box with exact same cpu_count=4 and we have 12 dbwriter processes.

Edited by: Taral Desai on Jun 4, 2009 7:08 AM

Edited by: Taral Desai on Jun 4, 2009 7:09 AM
Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 4, 2009 9:43 AM   in response to: Taral Desai in response to: Taral Desai
Helpful
Click to report abuse...   Click to reply to this thread Reply
Taral Desai wrote:

Can you please explain above in detail. Like lets say we have 4 cpu box with exact same cpu_count=4 and we have 12 dbwriter processes.


I've just engineered a system into this state - and I'm wrong about the effect of db_writer_processes.

My assumption was that if you have 4 CPUs (cpu_count = 4) then Oracle will allow 2 working data sets per cache - for a possible maximum of 16 working data sets. But you've only got 2 caches active, the 16KB and the 32KB, so you would have 4 working data sets, and with db_writer_processes = 12 you would have 8 database writers with "nothing to do".

What I actually see when I start a database with cpu_count = 4, db_writer_processes = 12, and two caches is:

    Each cache gets split into 12 working data sets,
    each database writer acquires one working data set from each cache

I wrote a quick script to show this - joining x$kcbwds (working data sets) with x$kcbwbpd (buffer pools) - but you have to be connected as SYS to run it:

break	on bp_blksz skip 1 -
	on bp_name  skip 1 -
	on bp_size
 
select
	bfp.bp_blksz,
	bfp.bp_name,
	bfp.bp_size,
	wds.indx	wds_index,
	wds.dbwr_num,
	wds.set_latch
from
	x$kcbwbpd	bfp,
	x$kcbwds	wds
where
	bfp.bp_size != 0
and	wds.set_id between bfp.bp_lo_sid and bfp.bp_hi_sid
order by
	bfp.bp_blksz,
	bfp.bp_name,
	wds.indx
;


Here's a sample of the output when I set up a small keep cache:

BP_BLKSZ BP_NAME                 BP_SIZE  WDS_INDEX   DBWR_NUM SET_LATC
---------- -------------------- ---------- ---------- ---------- --------
      8192 DEFAULT                    7984         24          0 1CB8CF20
                                                   25          1 1CB8D2D0
                                                   26          2 1CB8D680
                                                   27          3 1CB8DA30
                                                   28          4 1CB8DDE0
                                                   29          5 1CB8E190
                                                   30          6 1CB8E540
                                                   31          7 1CB8E8F0
                                                   32          8 1CB8ECA0
                                                   33          9 1CB8F050
                                                   34         10 1CB8F400
                                                   35         11 1CB8F7B0
 
           KEEP                       1996          0          0 1CB876A0
                                                    1          1 1CB87A50
                                                    2          2 1CB87E00
                                                    3          3 1CB881B0
                                                    4          4 1CB88560
                                                    5          5 1CB88910
                                                    6          6 1CB88CC0
                                                    7          7 1CB89070
                                                    8          8 1CB89420
                                                    9          9 1CB897D0
                                                   10         10 1CB89B80
                                                   11         11 1CB89F30


The set_latch is the addr column from v$latch_children for the "cache buffers lru chains" latch for that working data set. There are lots more columns you could report from x$kcbwds - including the breakdown by working data set of free buffer waits (FBWAIT) and buffer busy waits (BBWAIT) were appearing.
Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"Science is more than a body of knowledge; it is a way of thinking"
Carl Sagan

Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 4, 2009 9:53 AM   in response to: chris_c in response to: chris_c
Helpful
Click to report abuse...   Click to reply to this thread Reply
chris_c wrote:

If this is the case then setting DBWR_IO_SLAVES may be a better option, although most systems do support async IO I still come accross the odd one or two that doesn't have the capability.

Chris,

In the absence of asynch_io I think there's an argument to favour multiple db writer processes over IO slaves: if you have multiple dbwN processes you have multiple processes clearing blocks from multiple checkpoint chains, and spread the contention on the LRU and CKPT latches.

On the other hand, if you have a problem clearing the log buffer down to the redo log (assuming multiplexed files) then enabling I/O slaves automatically allows the log writer to hand off to I/O slaves as well - and this may allow "log file parallel writes" to operate more quickly.

Of course, Oracle does not allow multiple db writer processes AND I/O slaves at the same time. (But there are separate parameters for different I/O slaves for different functions, although I've never tried to play silly games with them).

So, as ever, it's swings and roundabouts and you try to address the most important bottleneck.

Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"For every expert there is an equal and opposite expert."
Arthur C. Clarke

Taral Desai

Posts: 90
Registered: 08/26/07
Re: db_writer_processes data sets
Posted: Jun 4, 2009 11:39 AM   in response to: Jonathan Lewis in response to: Jonathan Lewis
 
Click to report abuse...   Click to reply to this thread Reply
Hi Jonathan,

Thank you very much so here are the things which we can conclude from this. Please correct me if i am wrong as i am new to this whole thing.

1.
Excessive db writer processes can be overhead due to each working set requires it's own db lru latches.

2.
Excessive db writer processes can slow down I/O due to they need to acquire CPU and then run. But one question here is does all db writer process simultinouses compete for cpu or it waits for one to complete and then go to other cpu. As, i can understand cpu uses serialize mechanism but lets say we have 12 dbwriter among one is writing using one cpu and other cpu is free. So, other process can move to that or db writer process is also serial ?

3.
Also, this can lead to wrong buffer waits situation as we can have free buffer in other sets and in one set it won't and process acquire that dbwriter so that it will post this wait event but actually we have other free buffers available. How to find this as how many buffers are available, dirty or in other state for each working set ?

4.
NAME TYPE VALUE


-----------
db_32k_cache_size big integer 32M

So, it means that for 32MB scanning of memory we need 12 data working sets or this 32k block size dbwriter data sets can be used by 16k also ?

And here is the output from our environment

SQL> select bfp.bp_blksz,
       bfp.bp_name,
       bfp.bp_size,
       wds.indx wds_index,
       wds.dbwr_num,
       wds.FBWAIT,
       wds.BBWAIT,
       wds.set_latch,
       l.gets,
       l.MISSES,
       l.SLEEPS
    from x$kcbwbpd bfp, x$kcbwds wds, v$latch_children l
 where bfp.bp_size != 0
   and wds.set_id between bfp.bp_lo_sid and bfp.bp_hi_sid
   and l.ADDR = wds.set_latch
 order by bfp.bp_blksz, bfp.bp_name, wds.indx;
 
  BP_BLKSZ BP_NAME                 BP_SIZE  WDS_INDEX   DBWR_NUM     FBWAIT     BBWAIT SET_LATCH              GETS     MISSES     SLEEPS
---------- -------------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ----------
     16384 DEFAULT                  370845         24          0       8753       6822 000000053D44E478    2088984        724         39
     16384 DEFAULT                  370845         25          1       8721       7027 000000053D44E9D0    2093594        962         29
     16384 DEFAULT                  370845         26          2       8543       4382 000000053D44EF28    2491595        962         29
     16384 DEFAULT                  370845         27          3       7907       4836 000000053D44F480    2155756       1042         43
     16384 DEFAULT                  370845         28          4       7655       5722 000000053D44F9D8    2131806        978         30
     16384 DEFAULT                  370845         29          5       7270       4440 000000053D44FF30    2117001       1074         34
     16384 DEFAULT                  370845         30          6       8350       2804 000000053D450488    2087645        930         35
     16384 DEFAULT                  370845         31          7       7841       6987 000000053D4509E0    2145802        908         37
     16384 DEFAULT                  370845         32          8       8699       4890 000000053D450F38    2119788        928         35
     16384 DEFAULT                  370845         33          9       8074       4679 000000053D451490    2167632        925         29
     16384 DEFAULT                  370845         34         10       8666       5068 000000053D4519E8    2103990        902         27
     16384 DEFAULT                  370845         35         11      12503       7753 000000053D451F40    2150953        991         38
 
  BP_BLKSZ BP_NAME                 BP_SIZE  WDS_INDEX   DBWR_NUM     FBWAIT     BBWAIT SET_LATCH              GETS     MISSES     SLEEPS
---------- -------------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ----------
     32768 DEFAULT                    1012         84          0   11205160   11401610 000000053D462518   37611275     129971       1188
     32768 DEFAULT                    1012         85          1    9643066   11547834 000000053D462A70   36582915     106640       1157
     32768 DEFAULT                    1012         86          2   10446003   11583563 000000053D462FC8   37427372     102028       1088
     32768 DEFAULT                    1012         87          3   10573808   11563144 000000053D463520   37295902     104804       1058
     32768 DEFAULT                    1012         88          4   10408529   11452657 000000053D463A78   37088311     102178       1169
     32768 DEFAULT                    1012         89          5   10339793   11544617 000000053D463FD0   37020968     102712       1097
     32768 DEFAULT                    1012         90          6   10385856   11522059 000000053D464528   37197322     101601       1084
     32768 DEFAULT                    1012         91          7   10379007   11495563 000000053D464A80   37131610      99125        982
     32768 DEFAULT                    1012         92          8   10388032   11491618 000000053D464FD8   37119317     100206       1081
     32768 DEFAULT                    1012         93          9   10437875   11557976 000000053D465530   37188171     100933       1108
     32768 DEFAULT                    1012         94         10   10004858   11523490 000000053D465A88   36865058      89088       1075
     32768 DEFAULT                    1012         95         11   11481299   11509310 000000053D465FE0   38390757     127075       1088
 
24 rows selected.


Edited by: Taral Desai on Jun 4, 2009 1:25 PM
Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 5, 2009 1:23 AM   in response to: Taral Desai in response to: Taral Desai
Helpful
Click to report abuse...   Click to reply to this thread Reply
Taral,

I like what you've done with the query I posted.

Before answering your specific questions, I'd like to point out that the more important problem is the sizing (for its use) of the 32KB cache. It's too small - and as a simple, low impact change, it looks as if you could safely reduce the size of the 16KB cache to increase the size of the 32KB cache.

This is just taking the short term "urgent" response, based on minimal information. The fact that you have time lost on the 16KB cache is something you may need to address eventually, but I'm taking the view point that we should be able to add a small amount of contention in the 16KB cache to remove a large amount of contention in the 32KB cache. We still need to see some basic statspack/AWR information before we can offer any strategic advice.

I'd start by subtracting 32MB from the 16KB cache and adding it to the 32KB cache, and monitoring for a while, and repeat a few times. Use statspack to take snapshots to see how much impact you have each time you change the settings.

Addressing the free buffer waits - it is commonly the case that free buffer waits appear because the database writer is unable to write fast enough, but there are other reasons, and in your case because the buffer is small it is possible that one session can't get a free buffer because all the blocks in the buffer are still pinned by other users and therefore can't be written (or even discarded if they are clean). At a minimum, if you make a lot of use a the cache the size of the cache should be "a few" blocks per concurrent session - where "a few" means something in the range 4 to 12 blocks.

Coming back to your questions:
1) Yes, excess db writers can be the cause of overhead because of (a) the extra latch activity and (b) the concurrency running - the db writers don't know about each other, it's perfectly possible for all 12 of them to want to run at once and (c) they introduce comptetiion on the cache buffers chains latches as well ... (d) probably other but I can't think of them off the top of my head.

2) Answered in (1) I think

3) INtersting question - I may have seen (or written) some notes somewhere about how a process picks an LRU list when it wants a free buffer, but I don't remember how it's done. (Also, my memory is likely to be out of date given the mistake I made earlier on). I think there's likely to be an element of wasted work/time relating to the type of thing you're thinking of - but I'd guess that a process picks an LRU, finds no free buffers on it, posts the relevant DBWn and then jumps to another LRU and repeats.

Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"For every expert there is an equal and opposite expert."
Arthur C. Clarke

Taral Desai

Posts: 90
Registered: 08/26/07
Re: db_writer_processes data sets
Posted: Jun 8, 2009 1:34 PM   in response to: Jonathan Lewis in response to: Jonathan Lewis
 
Click to report abuse...   Click to reply to this thread Reply
Hi Jonathan,

Correct me if i am wrong. In our case for 32MB of scanning for 32k block cache it had split to 12 working data sets. So, for 32MB cache we had many overheads for managing this 12 sets and also latchs.

Can't we instruct oracle to use only one working dataset here.
Jonathan Lewis

Posts: 1,781
Registered: 01/23/07
Re: db_writer_processes data sets
Posted: Jun 9, 2009 3:48 PM   in response to: Taral Desai in response to: Taral Desai
 
Click to report abuse...   Click to reply to this thread Reply
Taral Desai wrote:
Hi Jonathan,

Correct me if i am wrong. In our case for 32MB of scanning for 32k block cache it had split to 12 working data sets. So, for 32MB cache we had many overheads for managing this 12 sets and also latchs.

Can't we instruct oracle to use only one working dataset here.


Not that I know of.
But I pointed out in my last response that the more important issue is the size of the 32KB buffer - you need to make it larger, even if it means shrinking the 16KB buffer. The number of db writer processes is a minor detail relative to this.

Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk

"Science is more than a body of knowledge; it is a way of thinking"
Carl Sagan

Legend
Guru Guru : 2500 - 1000000 pts
Expert Expert : 1000 - 2499 pts
Pro Pro : 500 - 999 pts
Journeyman Journeyman : 200 - 499 pts
Newbie Newbie : 0 - 199 pts
Oracle ACE Director
Oracle ACE Member
Oracle Employee ACE
Helpful Answer (5 pts)
Correct Answer (10 pts)

Point your RSS reader here for a feed of the latest messages in all forums