I am still working on comparing performance between an HP-UX blade and a Linux virtual machine and I have a strange result. I tried to come up with a simple example that would do a lot of single block I/O. The test runs faster on my Linux system than my HP-UX system and I’m not sure why. All of the parameters are the same, except the ones that contain the system name and filesystem names. Both systems are 11.2.0.3. The dramatic difference in run times corresponds to an equally dramatic difference in db file parallel read wait times.
I created a table called TEST and populated it with data and added an index called TESTI. I ran this query to generate a lot of single block I/O:
select /*+ index(test testi) */ sum(blocks) from test;
Here is the result on HP:
SUM(BLOCKS) ----------- 1485406208 Elapsed: 00:01:28.38 Statistics ---------------------------------------------------------- 9 recursive calls 0 db block gets 3289143 consistent gets 125896 physical reads 86864 redo size 216 bytes sent via SQL*Net to client 248 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed select EVENT,TOTAL_WAITS,TIME_WAITED,AVERAGE_WAIT 2 FROM V$SESSION_EVENT a 3 WHERE a.SID= :monitored_sid 4 order by time_waited desc; EVENT TOTAL_WAITS TIME_WAITED AVERAGE_WAIT ------------------------------ ----------- ----------- ------------ db file parallel read 4096 6760 1.65 db file sequential read 14526 236 .02 events in waitclass Other 1 28 28.49 SQL*Net message from client 19 5 .28 db file scattered read 5 3 .65 SQL*Net message to client 20 0 0 Disk file operations I/O 1 0 .01
Here is the same thing on Linux:
SUM(BLOCKS) ----------- 958103552 Elapsed: 00:00:09.01 Statistics ---------------------------------------------------------- 9 recursive calls 0 db block gets 3289130 consistent gets 125872 physical reads 77244 redo size 353 bytes sent via SQL*Net to client 360 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed select EVENT,TOTAL_WAITS,TIME_WAITED,AVERAGE_WAIT 2 FROM V$SESSION_EVENT a 3 WHERE a.SID= :monitored_sid 4 order by time_waited desc; EVENT TOTAL_WAITS TIME_WAITED AVERAGE_WAIT ------------------------------ ----------- ----------- ------------ db file parallel read 4096 55 .01 events in waitclass Other 1 17 16.72 db file sequential read 14498 11 0 SQL*Net message from client 19 6 .31 db file scattered read 15 0 0 SQL*Net message to client 20 0 0 Disk file operations I/O 1 0 0
Something doesn’t seem right. Surely there is some caching somewhere. Is it really possible that the Linux version runs in 9 seconds while the HP one runs in a minute and a half? Is it really true that db file parallel read is 1 hundredth of a second on HP and .01 hundredths of a second on Linux?
I’m still working on this but thought I would share the result since it is so strange.
Here is a zip of my scripts and their logs if you want to check them out: zip
– Bobby
p.s. Here are some possibly relevant parameters, same on both system:
compatible 11.2.0.0.0 cpu_count 4 db_block_size 8192 db_cache_size 512M db_writer_processes 2 disk_asynch_io FALSE dispatchers (PROTOCOL=TCP)(DISPATCHERS=32) filesystemio_options ASYNCH large_pool_size 32M log_buffer 2097152 max_shared_servers 12 pga_aggregate_target 5871947670 sga_max_size 3G sga_target 3G shared_pool_size 1G shared_servers 12 star_transformation_enabled FALSE
Async IO?
Asynch I/O is off. It was my first thought. I’m puzzled.
Pingback: db file parallel read on Linux and HP-UX | Bobby Durrett's DBA Blog