http://technet.oracle.com:89/ubb/Forum7/HTML/201133.html Here's a pretty good benchmark test: http://philip.greenspun.com/wtr/oracle/acceptance-sql.txt I ran it on the same machine, an AMD 800-mz Duron with 256mb wih dual boot -Suse Linux 7.1 (2.4 kernel) , and Windows 98. The elapsed time: Suse Linux: 8 minutes, 0 seconds Win 98: 30 minutes, 18 seconds The results were so astounding I checked how each Oracle install was set up, and there were differences in the SGA size, blocksize, and other performance-related issues, so this is not a perfect comparison. So I'm now re-installing Oracle on each O.S. to make their settings identical and will re-run the test and publish the results. Also, running this test using Suse 7.1 with the 2.2 kernel took 24 minutes, 50 seconds to run, so it appears the 2.4 kernel has some major performance improvement -- acceptance-sql.txt by philg@mit.edu and jsc@arsdigita.com -- (Philip Greenspun and Jin Choi) -- SQL commands to test an Oracle installation -- for adequate privileges and capacity -- run as the same user as the Web user -- creating a table create table foo ( foo_key integer primary key, random varchar(1000) ); -- creating an index create index foo_on_random on foo ( random ); -- inserting some rows insert into foo values (1, '1'); insert into foo values (2, '2'); insert into foo values (3, '3'); insert into foo values (4, '4'); insert into foo values (5, '5'); insert into foo values (6, '6'); insert into foo values (7, '7'); insert into foo values (8, '8'); insert into foo values (9, '9'); insert into foo values (10, '10'); insert into foo values (11, null); insert into foo values (12, null); insert into foo values (13, null); insert into foo values (14, null); insert into foo values (15, null); insert into foo values (16, null); insert into foo values (17, null); insert into foo values (18, null); insert into foo values (19, null); insert into foo values (20, null); -- create another table to work with create table bar as select foo_key + 1 as bar_key, random from foo; -- joins select b.random from foo f, bar b where f.foo_key = b.bar_key and f.random like '3%'; -- update update foo set foo_key = foo_key + 100 where random is null; -- should return 10 select count(*) from foo where foo_key > 100; -- create a sequence create sequence foo_sequence start with 200; -- test whether truncate works truncate table bar; drop table bar; -- test 1) whether has privileges to create a procedure -- and 2) whether rollback segments are adequately sized -- create a pl/sql procedure create or replace procedure thrash_database(v_number_of_rows IN integer) AS i integer; BEGIN FOR i IN 1..v_number_of_rows LOOP insert into foo (foo_key, random) values (foo_sequence.nextval, 'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij'); END LOOP; END thrash_database; / show errors -- we think any Oracle installation ought to be able to handle -- 100,000 rows of 500 bytes each execute thrash_database(100000); select count(*) from foo; commit; delete from foo; commit; drop table foo; drop sequence foo_sequence; drop procedure thrash_database; -- make sure that NLS_DATE_FORMAT is correct by -- seeing that the following command returns -- YYYY-MM-DD (e.g., 1999-05-22) select sysdate from dual;