Re: IORM Setup for Oracle Exadata

  • From: "Shane Borden" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "sborden76" for DMARC)
  • To: Lok P <loknath.73@xxxxxxxxx>
  • Date: Fri, 20 Nov 2020 07:54:08 -0500

In my opinion, you are overthinking this for the first change.  All of the 
things you mention would be evaluated after you initially change the IORM plan 
to auto.  If within AUTO, you need to set limits or tweak based on cell 
metrics, you would do individual “dbplans”. 

Try to keep things as simple as possible for your first iteration. Something 
like this might work:

dcli -g ~/cell_grp -l root cellcli -e "list iormplan detail”
dcli -g ~/cell_grp -l root cellcli -e "ALTER IORMPLAN OBJECTIVE = AUTO”
dcli -g ~/cell_grp -l root cellcli -e "list iormplan detail”

On MOS, Oracle has a great script to confirm how things are working after you 
change the IORM plan called “metric_iorm.pl”.  I forget which note its attached 
to, but you can certainly search for it.

Of course you should do this in your test environment first before moving it to 
any other environment, because your experience may not match mine.  Hopefully 
that goes without saying.


---

Thanks,


Shane Borden
sborden76@xxxxxxxxx

On Nov 20, 2020, at 5:04 AM, Lok P <loknath.73@xxxxxxxxx> wrote:


Additionally I see, In the book "Expert Oracle Exadata" , I see below 
definitions for the IORM objective. For "AUTO", its saying, "If 75% or more 
of the I/O operations from a consumer group are small I/O (less than 128K), 
it is considered to be a latency-oriented consumer group and is managed 
accordingly." , So , in the first method i.e. just with the Alter command 
("alter iormplan objective=auto") without defining "consumer group" , will 
the algorithm work in the same way or will it have to have "consumer group" 
defined for "AUTO" to work?

IORM Objective:-

low_latency: This setting provides optimization for applications that are 
extremely sensitive to I/O latency. It provides the lowest possible I/O 
latencies by significantly limiting disk utilization. In other words, 
throughput-hungry applications will be significantly (negatively) impacted by 
this optimization objective.

high_throughput: This setting provides the best possible throughput for 
DWtransactions by attempting to fully utilize the I/O capacity of the storage 
cells. It is the opposite of low_latency and, as such, it will significantly 
(negatively) impactdisk I/O latency.

Balanced: This setting attempts to strike a balance between low latency and 
high throughput. This is done by limiting disk utilization for large I/O 
operations to a lesser degree than the low_latency objective described above. 
Use this objective when workloads are mixed and you have no applications that 
require extremely low latency.

Auto: This setting allows IORM to determine the best optimization objective 
for your workload. Cellsrv continuously monitors the large/small I/O requests 
and applies the optimization method on a best-fit basis. If 75% or more of 
the I/O operations from a consumer group are small I/O (less than 128K), it 
is considered to be a latency-oriented consumer group and is managed 
accordingly.

Basic: This setting is the default after installation. This objective means 
the storage server does limited optimization for low latency, but does not 
throttle, which the other objectives do.




On Fri, Nov 20, 2020 at 1:35 PM Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:

Hi Shane, I have one doubt here, As I see while defining the IORM we have two 
inputs , either "catPlan" or "dbPlan". In cases where we have multiple 
databases , we have to define the "dbPlan '' something as below. But as in 
our case we have only one database, so we don't need the "dbPlan" to be 
defined. So as you mentioned should we only do the online alter like "alter 
iormplan objective=auto" in all the ~7 cell server, 

OR

We should define DBRM without any plan/plan directive, which means we are not 
capping any CPU resources at DB level, but providing just a name to the IORM 
to work based on these resource manager categories using catPlan parameter.

What should be the correct strategy here? Should we first try "alter iormplan 
objective=auto" and let Oracle manage its own? If that doesn't work then we 
should go for "catPlan '' method ?  or "catplan" method is the way AUTO 
objective works and by simply making it AUTO(using oneline ALTER command) 
will not work? 



*******************Using "dbPlan" *******************************



alter iormplan dbplan=((name=database1, level=1, allocation=60), -> 
(name=database2, level=2, allocation=80), -> (name=other, level=3, 
allocation=100))

list iormplan detail
name: enkcel04_IORMPLAN
catPlan:
dbPlan: name=database1,level=1,allocation=60
       name=database2,level=2,allocation=80
        name=other,level=3,allocation=100
objective: auto
status: active




********************* Using "catPlan" ********************************** 

And in our scenario, like we have only one database, so "Dbplan" is not 
required, so we can opt for "catPlan", something as below using Db resource 
manager, without creating any plan/plan directives in DB level.



BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
-- Create Categories --
dbms_resource_manager.create_category(
category => 'OLTP_CATEGORY',
comment => 'Category for low latency queries mostly small reads or index 
access');

dbms_resource_manager.create_category(
category => 'BATCH_CATEGORY',
comment => 'Category for low latency queries mostly large reads or full table 
scan');

-- Assign Consumer Groups to Categories --
dbms_resource_manager.update_consumer_group(
consumer_group => 'OLTP',
new_category => 'OLTP_CATEGORY');

dbms_resource_manager.update_consumer_group(
consumer_group => 'BATCH',
new_category => 'BATCH_CATEGORY');

dbms_resource_manager.update_consumer_group(
consumer_group => 'MAINTENANCE',
new_category => 'BATCH_CATEGORY');

dbms_resource_manager.submit_pending_area();
END;
/


alter iormplan catplan=((name=OLTP_CATEGORY, level=1, allocation=70), -> 
(name=BATCH_CATEGORY, level=1, allocation=30), -> (name=OTHER, level=2, 
allocation=100))

list iormplan detail
name: enkcel04_IORMPLAN
catPlan: name=OLTP_CATEGORY,level=1,allocation=70
        name=BATCH_CATEGORY,level=1,allocation=30
        name=OTHER,level=2,allocation=100
dbPlan:
objective: auto
status: active

On Fri, Nov 20, 2020 at 2:48 AM Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:
Thank you so much. We will try to switch from Basic to Auto objective and 
monitor the behaviour.
 I hope this alter iorm (from Basic to Auto)can be done online without 
downtime in each storage cell level,  so we can change it on the fly and 
revert back in case things goes bad. 

On Fri, 20 Nov 2020, 2:40 am Shane Borden, <sborden76@xxxxxxxxx 
<mailto:sborden76@xxxxxxxxx>> wrote:
AUTO is supposed to take a balanced approach to all databases on the rack., 
whether there is 1 or 100. 

---

Thanks,


Shane Borden
sborden76@xxxxxxxxx <mailto:sborden76@xxxxxxxxx>
407-963-4883

On Nov 19, 2020, at 3:53 PM, Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:

Yes, we have this one on exadata - X5 and image version 19.2 and thus having 
rightback flash cache enabled too.

I am not seeing any documents clearly stating this. So my question was if 
AUTO iorm objective works on single database(i.e intra database) or it only 
works when multiple databases hosted on the same exadata machine(i.e. inter 
database Io load)?


On Fri, 20 Nov 2020, 2:08 am Shane Borden, <sborden76@xxxxxxxxx 
<mailto:sborden76@xxxxxxxxx>> wrote:
I dont know your workload, but AUTO did what we needed it to on a few Exas 
now…..

Also depending on how old the Exa is, make sure you have WriteBack 
FlashCache turned on.  Default is on now, but for older versions, it didn’t 
get turned on by default.

---

Thanks,


Shane Borden
sborden76@xxxxxxxxx <mailto:sborden76@xxxxxxxxx>
407-963-4883

On Nov 19, 2020, at 3:34 PM, Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:

Thank You Shane.

Currently we have a default IORM objective set as "BASIC". In our case it's 
one database in that exadata half rack box and it has a mixed workload 
running in it. We suffered mainly when , a large smart scan was running , 
scanning thousands of partitions and thus doing lot of large reads, and at 
same time we have OLTP workload came to picture and they were started 
slowing down(mostly because they were getting served from hard disk rather 
flash as flash was occupied by the large reads smart scan query).  And, I 
read in a few blogs and also our DBA's suggesting AUTO will only work or 
manage the IO in case multiple databases are hosted on the exadata machine.

So my doubt was, will AUTO objective help us here giving priorities to low 
latency queries in the intra database workload? In other words, How "AUTO" 
objective decides which workload it will give priorities to? 
Or 
Should we dynamically switch between two different objective "Low latency" 
VS "BASIC" each day. And is it possible to do online through automated 
script ,without impacting anything else?

On Fri, Nov 20, 2020 at 1:53 AM Shane Borden <sborden76@xxxxxxxxx 
<mailto:sborden76@xxxxxxxxx>> wrote:
I use AUTO all the time and it is my go to IORM plan if I want to manage 
I/O and allow the system to try to do it first.  If that doesn’t produce 
the desired result, then I will start to make my own plans, but it becomes 
very difficult to get it right.
---

Thanks,


Shane Borden
sborden76@xxxxxxxxx <mailto:sborden76@xxxxxxxxx>
407-963-4883

On Nov 19, 2020, at 2:58 PM, Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:

It looks to me as if DB resource managers are purely made for CPU 
management, and with that respect , I doubt it will be effective in 
managing the storage cell I/O, and that is why IORM(IO resource manager) 
has come into picture. But sadly it's not documented properly. And in most 
of the cases it says it manages  inter database workload only. But we are 
facing issues with intra database workload management. I got below blog 
stating how AUTO objectives for IORM fixed the issue of IO management. So 
has anybody used AUTO objective for managing INTRA databases workload?

https://weidongzhou.wordpress.com/2013/08/23/awr-is-not-enough-to-track-down-io-problem-on-exadata/
 
<https://weidongzhou.wordpress.com/2013/08/23/awr-is-not-enough-to-track-down-io-problem-on-exadata/>


On Thu, Nov 19, 2020 at 2:29 AM Lok P <loknath.73@xxxxxxxxx 
<mailto:loknath.73@xxxxxxxxx>> wrote:

We have one database with version 11.2.0.4 Exadata-X5 machine. We have 
IORM objective kept as BASIC(which is default) and it's only one database 
in that half RACK(~7 cell server) exadata cluster. We encountered 
performance issue twice , where a ETL query doing FULL table/partition 
scan repetitively for longer duration, causing the flash cache to be 
flooded with large reads and the other low latency work load or small 
reads/index reads getting suffered because of that, and so we had to kill 
the ETL query to let the low latency workload perform in its normal speed.

I saw in a few blogs stating the IORM should be kept as AUTO and is 
recommended. Wanted to understand from experts, if AUTO IORM setup is 
going to help in such a situation, where we have only one database 
residing in the exadata machine having multiple types of workloads(both 
OLTP and BATCH types at same time) running in the same database? I am not 
seeing a clear difference , how different is IORM objective AUTO from the 
BASIC incase of single database IORM management?





Other related posts: