What is orion? Well it used to be the name of the oracle java server, which eventually became ‘OC4J’, or ‘Oracle Containers for Java’. It’s a product oracle uses or bought (don’t know). It’s still available from the original vendor.
But oracle now has a new orion: ORacle IO Numbers. This is a tool to test IO with! Other than other tools, it uses the exact libraries oracle 10g uses, and issues ‘database like’ requests. In other words, this tool enables you to make a IO prediction of a database fairly easy, or enables you to calculate optimal numbers of IO slaves (for oracle’s parallel query).
Orion is available on otn for the following platforms:
-Linux AMD x86-64
If you are interested: follow this link. It also contains a document about usage, output, examples and troubleshooting.
What does it do, and how does it work?
First, you have to have raw devices, or files (both are used and written during the test, and destroy any current data in them. So generate them for this test!!!)
Next, make a file (in the same directory as where the executable out of the zip/msi appeared, that’s the most easy way), named anything you wish, with the extention “.lun”; for example: testrun.lun. In that file, put the whole path to these files or the raw devices:
For a simple testrun, execute the following:
./orion -run simple -testname testrun -num_disks 2
This runs using the ‘simple’ mode of orion (meaning ‘small’ and ‘large’ IO’s are tested in isolation (not concurrent)). ‘-num_disks’ is used for determining the number of concurrent IO’s (to my understanding; I’ve gotten 1-5 concurrent IO’s when set to ‘1’, and 1-10 concurrent IO’s when set to ‘2’)
Currently, I’ve used this tool to measure the number of IO’s possible for a performance problem.
This problem is with a 9.2 database (but I think using orion the measurement still is viable), in the nightbatch. Despite most batches, most of the waiting in on ‘db_file_sequential_read’, which means (among others) index unique scans, index range scans and table fetches by index rowid.
To simulate this type of IO, I’ve used the following commandline:
orion -run advanced -testname test -num_disks 2 -type rand -write 5 -matrix row -num_large 1
This commandline means:
-num_disks 2: I want to know throughput up to 10 concurrent processes
-type rand: most of my IO’s are not sequentially, but random (from an o/s perspective, we walk through some branch blocks, and through the leafs (if range-scanned)
-write 5: ultimate goal of the batch is to process data. So we do writing
-matrix row: the calculation is based upon small IO’s, we set the number of large IO’s using ‘num_large’
-num_large 1: we do some ‘large’ IO’s (multiblock reads; full table scans, fast full index scans)
I’ve gotten up to about 500 IOPS (IO’s per second), from windows 2003, iSCSI, 1Gb ethernet and netapp filer. The filer is massively overloaded (cpu 100% almost entire day), and results of two tests on the same files where not consistent, which is in line with an overloaded filer, of which the throughput is depended upon other IO’s being done at the same time.