Measure oracle real-time I/O performance

Did you already need to measure real-time I/O performance of an oracle database ?

AWR could provide an answer for historical period of time but what’s about:  what is going on on my database right now ?

To measure real-time I/O performance I use one of my perl script (system_event.pl) based on the gv$system_event cumulative view.

As this view is a cumulative one (values are gathered since the instance started up), to extract real-time information the script takes a snapshot each second (default interval) and computes the differences with the previous snapshot.

Let’s see an example: as this post deals with IO performance, we can focus on this particular wait class that way:

./system_event.pl waitclass="User I/O"

 18:27:36 INST_NAME 	EVENT				NB_WAITS	TIME_WAITED 	ms/Wait
 18:27:36 BDTO_2 	Disk file operations I/O	1 		77 		0.077
 18:27:36 BDTO_2 	db file scattered read 		241 		1423749 	5.908
 18:27:36 BDTO_2 	db file sequential read 	260 		1168489 	4.494
 18:27:36 BDTO_2 	db file parallel read 		626 		10447664 	16.690
 --------------------------------------> NEW
 18:27:37 INST_NAME 	EVENT 				NB_WAITS 	TIME_WAITED 	ms/Wait
 18:27:37 BDTO_2 	Disk file operations I/O 	1 		84 		0.084
 18:27:37 BDTO_2 	db file scattered read 		205 		1128732		5.506
 18:27:37 BDTO_2 	db file sequential read 	261 		1196085 	4.583
 18:27:37 BDTO_2 	db file parallel read 		592 		9224011 	15.581

So, during the last second we got 261 “db file sequential read” events for an average of 4.583 ms per wait.

You could get more detailed information thanks to the gv$event_histogram view (benefit of this view is described in this post).

As this view is a cumulative one, to extract real-time information, I wrote the event_histogram.pl perl script.

./event_histogram.pl event='db file sequential read'

18:32:52 INST_NAME 	EVENT 				WAIT_TIME_MS            COUNT
18:32:52 BDTO_1 	db file sequential read 	1 			0
18:32:52 BDTO_2 	db file sequential read 	2 			0
18:32:52 BDTO_2 	db file sequential read 	256 			0
18:32:52 BDTO_1 	db file sequential read 	4 			0
18:32:52 BDTO_2 	db file sequential read 	8 			0
18:32:52 BDTO_1 	db file sequential read 	8 			0
18:32:52 BDTO_1 	db file sequential read 	512 			0
18:32:52 BDTO_1 	db file sequential read 	16 			0
18:32:52 BDTO_2 	db file sequential read 	4 			2
18:32:52 BDTO_2 	db file sequential read 	1 			5

In this example we can see that 5 “df file sequential read” took less than 1ms to complete during the last second.

Of course those two perl scripts deal with all oracle wait events and not only the ones related to the User I/O wait class:  then you can extend their usage area following your needs on system events.

See the help for more details:

./system_event.pl help

Usage: ./system_event.pl [Interval [Count]] [inst] [top=] [waitclass=Concurrency|User I/O|System I/O|Administrative|Configuration|Other|Cluster|Application|Idle|Commit|Network] [event=]
Default Interval : 1 second.

Default Count : Unlimited
Parameter 				Comment 					Default

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

INST= 					ALL - Show all Instance(s)                      ALL
	
 CURRENT	 			- Show Current Instance
	
 INSTANCE_NAME,... 	                - choose Instance(s) to display
<< Instances are only displayed in a RAC DB >>
TOP= 					Number of rows to display                       10

WAITCLASS=Concurrency|User I/O|System I/O|Administrative|Configuration|Other|Cluster|Application|Idle|Commit|Network ALL

EVENT= 					ALL - Show all EVENTS 		                ALL

As usual :

  • You can choose the number of snapshots to display and the time to wait between snapshots.
  • You can choose to filter on wait_class and on a particular event (by default no filter is applied).
  • This script is oracle RAC aware : you can work on all the instances, a subset or the local one.
  • You have to set oraenv on one instance of the database you want to diagnose first.
  • The script has been tested on Linux, Unix and Windows.
About these ads

, , ,

  1. #1 by C FAKHRY on 20/11/2012 - 11:53 pm

    great post bertrand very interesting stuff

    • #2 by bdrouvot on 21/11/2012 - 8:06 am

      Thanks ! Happy to hear from you here.

  2. #3 by Christian Bilien on 22/11/2012 - 11:36 pm

    Hi Bertrand

    Interesting stuff, and happy blogging !

    Christian

    • #4 by bdrouvot on 23/11/2012 - 8:02 am

      Hello Christian,

      Thanks for your visit and comment ! I am happy to hear from you here.

      Thx
      Bertrand

  3. #5 by Max on 30/11/2012 - 5:26 pm

    Hey Bertrand. Great job!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 657 other followers

%d bloggers like this: