Re: Question on gathering System Statistics

  • From: Jonathan Lewis <jlewisoracle@xxxxxxxxx>
  • To: "Hameed, Amir" <Amir.Hameed@xxxxxxxxx>
  • Date: Fri, 29 Jan 2021 09:35:18 +0000

Your original note says "our application" - but now you're citing the
E-Business suite. So which is it?
If "your" application is E-Business suite why did you ask the question?

The reason why you see the figures you do is because that's what
"NOWORKLOAD" does.  It deletes any existing system stats, sets the seek
time and transfer rates to their (1970's) defaults and measures the CPU
speed (of a single CPU) by running some baseline non-database CPU load.
There's likely to be a small variation in this captured CPU speed over a
series of calls because there's always likely to be some activity going on
and a little scheduling time lost.  (See also this note for running with
the 'EXADATA' option, which explains something of how the arithmetic works:
https://jonathanlewis.wordpress.com/2019/08/14/gather_system_stats/

In your case, with the E-Business directive, one of two things will happen
when Oracle calculates the cost of a tablescan:

a) by default Oracle will assume that a multiblock read count will be
"_db_file_optimizer_read_count" blocks (default 8) and use the ioseektim
and iotfrspeed to calculate the size and time for a multiblock read -
though it will try to use the largest possible size for a multiblock read
at run-time.

b) if you've set the db_file_multiblock_read_count Oracle will copy that to
"_db_file_optimizer_read_count" and use it in the calculation, and limit
the run-time multiblock read size to that value.

Note - the default value for db_file_multiblock_read_count depends on
several installation details but typically equates to 1MB / db_block_size,
which usually means 128.



In terms of SSD a "seek time" means nothing. But the parameters are just
numbers that go into a calculation.

If you wanted to create a meaningful pair of values for the two I/O times
you could run up a simple C program that did thousands of 8KB direct I/O
reads from a very large file, and then did thousands 1MB reads, and checked
the average times for the two sizes of read.  Then you could work out your
own seek and transfer rates based on the simultaneous equations:
seek + 1 transfer = time1
seek + 128 transfer = time2

transfer = (time2 - time1)/127  -- that's the time to transfer 8KB, from
which you need to derive bytes per millisecond
seek = time1 - transfer

Then use dbms_stats.set_system_stats to set the MBRC to 128, the ioseektim
to seek, and the iotfrspeed to the derived bytes per millisecond.

Regards
Jonathan Lewis









On Fri, 29 Jan 2021 at 02:43, Hameed, Amir <Amir.Hameed@xxxxxxxxx> wrote:

Thanks Jonathan.

System statistics were collected in the past and also recently with the
NOWROKLOAD option, which is what Oracle suggests for Oracle E-Business
Suite R12 databases. The MRBC value was not set. What I find interesting is
that the IO statistics numbers on both storage frames (VMAX250F versus
PowerMax) are identical. I would also like to understand what the value of
IOSEEKTIM represents in the world of SSDs or All Flash Array storage.



SaveTime                  Stat Name       Value

------------------------- --------------- ------------------------------

26-JAN-2021 23:07:15      CPUSPEED

26-JAN-2021 23:07:15      CPUSPEEDNW      3,528

26-JAN-2021 23:07:15      IOSEEKTIM       10

26-JAN-2021 23:07:15      IOTFRSPEED      4,096

26-JAN-2021 23:07:15      MAXTHR

26-JAN-2021 23:07:15      MBRC

26-JAN-2021 23:07:15      MREADTIM

26-JAN-2021 23:07:15      SLAVETHR

26-JAN-2021 23:07:15      SREADTIM

Current                   CPUSPEED

Current                   CPUSPEEDNW      3,518

Current                   IOSEEKTIM       10

Current                   IOTFRSPEED      4,096

Current                   MAXTHR

Current                   MBRC

Current                   MREADTIM

Current                   SLAVETHR

Current                   SREADTIM



Thank you,

Amir



*From:* oracle-l-bounce@xxxxxxxxxxxxx <oracle-l-bounce@xxxxxxxxxxxxx> *On
Behalf Of *Jonathan Lewis
*Sent:* Thursday, January 28, 2021 6:08 AM
*To:* oracle-l@xxxxxxxxxxxxx
*Subject:* Re: Question on gathering System Statistics



CAUTION:   This email originated from outside the organization. Do not
click links or open attachments unless you recognize the sender and know
the content is safe.



A key question to ask first is whether you had system stats set/collected
on the vmax250 and whether this was done in combination with setting the
db_file_multiblock read count or leaving it to default, and had you done
anything with the calibrate_io option?

Ideally you probably want to believe that if you get the same plans with
the Powermax you'll get the same, or better, performance. But if you do
something that changes the optimizer's arithmetic you may get plan changes
that result in random variations in performance.



If you don't know what you've done about system stats in the past there's
a script at the end of this blog note that will report them for you:

https://jonathanlewis.wordpress.com/2019/08/14/gather_system_stats/





Regards

Jonathan Lewis







On Tue, 26 Jan 2021 at 19:30, Hameed, Amir <Amir.Hameed@xxxxxxxxx> wrote:

Hi,

We are in the process of moving our applications from current storage
array (VMAX250) to a new array (Powermax). From best practices standpoint,
should we collect System Stats after moving to the new storage? If we
should then is there a recommended way of gathering System Stats?



Thanks,

Amir


Other related posts: