WELCOME TO THE DBGONZALES SQLiteBench BENCHMARK !

dbGonzales Copyright (C) 1987 - 2004 by VEITH SYSTEM GmbH and Adrian Veith.
SQLiteBench Copyright (C) 2004 by VEITH SYSTEM GmbH.

This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. 

Without any written permission, you may use this software only for testing purposes. You may redistribute it freely under the following restrictions:

1. The origin of this software must not be misrepresented. You must not claim that you wrote the original software. 

2. This notice may not be removed or altered from any distribution.

--------------------------------------------------------------------------------
INSTALLATION HINTS

Copy the SQLiteBench.exe to a temporary folder and start it. 

You can run the benchmark with bigger data volumes if you start it like:
SQLiteBench.exe 5 
(for five times the data).

If you increase this factor (and such the size of the database), you will realize, that it is important how many cache memory the dbGonzales database has for its use. The amount can be controlled with the "InitialCache=" Parameter in the [INIT] Section of the gonzales.ini (See below). Unlike most other databases, dbGonzales is optimized for cache-memory usage. Therfore, there will be no instant decrease in performance, if the processed data is bigger, than the available cache-memory (but you will realize the difference, if you play with the InitialCache value). 

The user must have rights to write to the C:\WINDOWS (%SystemRoot%) directory.

dbGonzales is configured by the gonzales.ini in this directory. 

THE APPLICATION MANAGES THE GONZALES.INI BY ITSELF. YOU CAN CHANGE IT MANUALLY IF YOU WANT TO TUNE THE APPLICATION.

The gonzales.ini has the following layout:

[INIT]
; This section is for the client aplications
InitialCache=512 
; InitialCache= number of pages (8kb) a client should use as a maximum
server=0
; server= [0 | 1] 
; 0 = don't look for a local server - faster startup if none is running
; 1 = look for a local server 

[ALIAS]
; Alias entries are only required for servers or if you access a database
; standalone.
;Syntax:
;AliasName=LocalPathToAlias
;Example: 
;GDemo=C:\Demo\GDemo.gdf

[SHARED]
; SHARED entries are only required for servers. 
; SHARED entries can improve the speed for data access from clients
; !! if you are not shure leave it blank !!
;Syntax:
;AliasName=SharedPathToAlias
;Path C:\Demo must be a shared ressource with name DEMO on Server SERVER
;Example: 
;GDemo=\\SERVER\DEMO\GDemo.gdf
;or
;GDemo=P:\GDemo.gdf if P is a remote drive to \\SERVER\DEMO

[SERVER]
InitialCache=1024
; InitialCache= number of pages (8kb) a server should use as maximum at start
AddCachePerClient=64
; AddCachePerClient= number of pages a server should add to its cache / client
BACKUP_DIRECTORY=C:\GonzalesBack\
BACKUP_INTERVALL=60
; if you have the AutoBackup-Service running the above entries say where
; and how often the server should make a backup of the database
; BACKUP_DIRECTORY= Path to Backup Directory
; BACKUP_INTERVALL= Intervall of backup in minutes
MAX_SERVER=1
Server1=SERVER
; This entry is used by clients to locate the servers on the net.
; Syntax:
; MAX_SERVER=N (= number of servers)
; Server1=ServerName (name or IP-Address of the server with name ServerName)
; ...
; ServerN=SERVER-N
;
; How a client connects to an Alias:
; If a client connects to an Alias with Name AliasName it first looks at the
; [ALIAS] entries. If an entry with AliasName exists it opens this alias eigther
; standalone (no local server running) or in client/server mode (local server
; running).
; If the client cannot find a matching entry in the [ALIAS] section, it looks 
; through the list of servers and asks each server if it has this Alias. 
; If yes it connects to it.
; ==> For a normal setup, you don't need any [ALIAS] entries for a client !!!
; To change the location of an alias, you just have to change [ALIAS] section of
; the server(s).

--------------------------------------------------------------------------------
INSTALLATION HINTS

Copy the SQLiteBench.exe to a temporary folder and start it. 

You can run the benchmark with bigger data volumes if you start it like:
SQLiteBench.exe 5 
(for five times the data).

If you increase this factor (and such the size of the database), you will realize, that it is important how many cache memory the dbGonzales database has for its use. The amount can be controlled with the "InitialCache=" Parameter in the [INIT] Section of the gonzales.ini (See below). Unlike most other databases, dbGonzales is optimized for cache-memory usage. Therfore, there will be no instant decrease in performance, if the processed data is bigger, than the available cache-memory (but you will realize the difference, if you play with the InitialCache value). 

The user must have rights to write to the C:\WINDOWS (%SystemRoot%) directory.

dbGonzales is configured by the gonzales.ini in this directory. 

THE APPLICATION MANAGES THE GONZALES.INI BY ITSELF. YOU CAN CHANGE IT MANUALLY IF YOU WANT TO TUNE THE APPLICATION.

The gonzales.ini has the following layout:

[INIT]
; This section is for the client aplications
InitialCache=512 
; InitialCache= number of pages (8kb) a client should use as a maximum
server=0
; server= [0 | 1] 
; 0 = don't look for a local server - faster startup if none is running
; 1 = look for a local server 

[ALIAS]
; Alias entries are only required for servers or if you access a database
; standalone.
;Syntax:
;AliasName=LocalPathToAlias
;Example: 
;GDemo=C:\Demo\GDemo.gdf

[SHARED]
; SHARED entries are only required for servers. 
; SHARED entries can improve the speed for data access from clients
; !! if you are not shure leave it blank !!
;Syntax:
;AliasName=SharedPathToAlias
;Path C:\Demo must be a shared ressource with name DEMO on Server SERVER
;Example: 
;GDemo=\\SERVER\DEMO\GDemo.gdf
;or
;GDemo=P:\GDemo.gdf if P is a remote drive to \\SERVER\DEMO

[SERVER]
InitialCache=1024
; InitialCache= number of pages (8kb) a server should use as maximum at start
AddCachePerClient=64
; AddCachePerClient= number of pages a server should add to its cache / client
BACKUP_DIRECTORY=C:\GonzalesBack\
BACKUP_INTERVALL=60
; if you have the AutoBackup-Service running the above entries say where
; and how often the server should make a backup of the database
; BACKUP_DIRECTORY= Path to Backup Directory
; BACKUP_INTERVALL= Intervall of backup in minutes
MAX_SERVER=1
Server1=SERVER
; This entry is used by clients to locate the servers on the net.
; Syntax:
; MAX_SERVER=N (= number of servers)
; Server1=ServerName (name or IP-Address of the server with name ServerName)
; ...
; ServerN=SERVER-N
;
; How a client connects to an Alias:
; If a client connects to an Alias with Name AliasName it first looks at the
; [ALIAS] entries. If an entry with AliasName exists it opens this alias eigther
; standalone (no local server running) or in client/server mode (local server
; running).
; If the client cannot find a matching entry in the [ALIAS] section, it looks 
; through the list of servers and asks each server if it has this Alias. 
; If yes it connects to it.
; ==> For a normal setup, you don't need any [ALIAS] entries for a client !!!
; To change the location of an alias, you just have to change [ALIAS] section of
; the server(s).
--------------------------------------------------------------------------------
Here is what the SQLiteBench does with factor 100:

Test 1: 100 * 1,000 = 100,000 INSERTs into table t1(each insert in one Transaction committed)
Test 2: 100 * 25,000 = 2,500,000 INSERTs into table t2 in a transaction
Test 3: 100 * 25,000 = 2,500,000 INSERTs into table t3 which is indexed (one index)
Test 4: 100 SELECTs without an index over t2 (100 times a full table
scan over 2,500,000 rec)
Test 5: 100 SELECTs on a string comparison (like Test 4 but with
operator LIKE).
Test 6: Creating an index (2 indexes over 2,500,000 records).
Test 7: 5000 SELECTs with an indexed field. 
Test 8: 1000 UPDATEs without an index (search 1000 times 10 records out
of table t1 with 100,000 records and update those values).
Test 9: 100 * 25,000 = 2,500,000 UPDATEs with an index (search 2,500,000 times one record out of table t2 and update its value. The field changed is also in an index! Therefore the index must reorganized 2,500,000 times - takes some time).
Test 10: 100 * 25,000 = 2,500,000 text UPDATEs with an index (like Test 9 but the field changed is not in an index.).
Test 11: INSERTs from a SELECT (copies 2,500,000 records from t2 to t1,
then copies these 2,600,000 records to t2).
Test 12: DELETE without an index (searches the 5,100,000 records of t2 
and deletes matching records - one full table scan with many deletes. ) 
Test 13: DELETE with an index (searches the records of t2 by an indexed field and deletes them). 
Test 14: A big INSERT after a big DELETE (inserts the content of t1
2,600,000 records again into t2).
Test 15: A big DELETE followed by many small 100 * 12,000 INSERTs (delete the 2,600,000 records of t1 and insert 1,200,000 records).
Test 16: DROP TABLE (drop t1 t2 and t3).

Here are my results with factor 1 (comparable to the SQLite results), 10, 20, 50 and 100 (SQliteBench 100) and 125MB Database-Cache Memory. The logical size of the database for factor 100 is about 1.4 GB.
=> The database engine has less than 1/10th of the data size available 
for its internal cache.

Results for factors 1, 10, 20, 50 and 100:
Machine: Athlon 1.8Ghz
RAM: 512MB
Database Cache: 16000 Pages = 125 MB
Harddisk: IDE
OS: WIN2000

factor:		1	10	20	50	100
timing in sec.
test 1:		0.48	5.3	10	28	59
test 2:		0.17	1.7	3.6	9	18
test 3:		0.58	7.5	16	45	96
test 4:		1.17	11	23	58	124
test 5:		2.63	26	51	129	293
test 6:		0.17	1.8	3.8	9	20
test 7:		0.42	0.6	0.9	2	4
test 8:		0.55	8.4	16	41	69
test 9:		2.0	21	43	123	1369
test 10:	2.4	22	46	111	272
test 11:	0.89	9.5	20	68	411
test 12:	0.46	3.8	8.0	136	848
test 13:	0.61	1.8	2.6	13	49
test 14:	0.71	9.4	37	121	607
test 15:	0.16	1.6	5.3	20	47
test 16:	0.01	0.06	3.7	261	762
