I am always fascinated by performance, so I was curious to do some testing.
*Disclaimer benchmarks can be misleading!
Please read on if you are interesting in the details, but here is a short summary.
- BR 4.30 perform CPU transactions FASTER than BR 3.83s
BR 3.83s performs Screen IO FASTER than BR 4.30
BR 4.30 is slightly faster at network IO (Shared OUTIN)
BR 4.30 Client Server (BrClient.exe) is 30-100 times faster (or more) than Distributed (WB32.exe)
OUTIN will LOCK a Record when it is read. This has a very big impact on performance.
Windows Network uses Opportunistic Locking:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
In a nutshell, only 1 person opens a file at a given time, the network will CACHE the file, most of the data does not need to go over the network. This provides roughly a 25 times performance boost. This benefit is lost the moment another workstation opens the same data file. This feature is particularly helpful during indexing or maintenance processing.
There is no question that BR 4.3 was designed to be run in Client Server. Best practices suggest that any database driver application be written this way. The language has also been tuned to provide the BEST performance when opening the file as INPUT. It can be a challenge going to Client Server.
===================================================
Testing Results:
First thing I discovered BR 3.67f won't run on a Windows 7 Machine (Even 32 bit). I then found that networking didn't work right either!
I moved on to 3.83s
The DOS 3.67f version performed abysmally.
The real comparison is 3.83s to 4.30 (Both 32bit Native clients).
- Test 1 (Internal Count). 4.30 is quit a bit faster.
Test 2-5 (Screen IO). 3.83s is faster in every case. Quite a bit in some cases.
Test 6 (Assign Random Arrays) Exactly the Same (I think they both hit a max performance level for the program).
Test 7 (Assign Array Elements) BR 4.3 is somewhat faster.
Test 8 (Sort Array) Exactly the Same (I think they both hit a max performance level for the program).
Test 9 (Index) Exactly the Same (I think they both hit a max performance level for the program).
Test 10 (Move Array) 4.30 is quit a bit faster.
Test 11 (Write Array) 4.30 is twice as fast.
Conclusion, internal CPU processing is Faster in 4.3, Screen IO is faster in 3.83
** As 4.3 is optimized for Client Server and Windows GUI, this does not surprise me. 3.83 had very low Screen IO overhead.
Second Benchmark. CPU & OPEN OUTIN,SHR
BR 3.83S
Single User
CPU: 14,842.28
IO_READ: 1,160,485
IO_READ_WRITE: 603,400
Two Users (Using Network)
CPU: 14,980.28
IO_READ: 20,880
IO_READ_WRITE: 12,361
Conclusion, Network IO is MUCH FASTER when only 1 user is opening a data file
BR 4.30 (WB32.EXE)
Single User
CPU: 20,250.10
IO_READ: 1,127,568
IO_READ_WRITE: 564,123
Two Users (Using Network)
CPU: 20,575.41
IO_READ: 21,235
IO_READ_WRITE: 15,812
Conclusions:
Network IO is MUCH FASTER when only 1 user is opening a data file
BR 4.3 is 25% faster at CPU processing
BR 3.83S is marginally faster when a single user opens a file.
BR 4.30 is marginally faster when a multiple users open a file.
BR 4.30 (WB32.EXE)
Single User
CPU: 20,250.10
IO_READ: 1,127,568
IO_READ_WRITE: 564,123
Two Users (Using Network)
CPU: 20,575.41
IO_READ: 21,235
IO_READ_WRITE: 15,812
Conclusions:
Network IO is MUCH FASTER when only 1 user is opening a data file
BR 4.3 is 25% faster at CPU processing
BR 3.83S is marginally faster when a single user opens a file.
BR 4.30 is marginally faster when a multiple users open a file.
BR 4.30 (BRCLIENT.EXE) Client Server
** Note: The Server is MUCH BETTER than the workstation used for testing **
Single User
CPU: 28,186.14
IO_READ: 1,897,328
IO_READ_WRITE: 979,394
Two Users (Using Network)
CPU: 28,404.48
IO_READ: 1,672,202
IO_READ_WRITE: 955,164
** Note: Client Server varied much more in performance as the server load affects performance. CPU ranged from 22K to 50K IO is much more consistent for this test, but.
Conclusions:
Network IO is marginally faster when only 1 user is opening a data file
CPU Processing is faster (Because the server is a faster machine)
Client Server was faster when single user opens a file.
Client Server is MUCH FASTER when multiple users open a file. (83 times faster!)
Our own experience is that Client Server can be 30-100 times faster than distributed processing.
It is important to note that Screen IO is slower in BR 4.3, and even slower in Client Server.
GUI TEST (1) (Smaller is better)
Distributed (Wb32.exe)
GUI OFF THAW - 4
GUI OF Freeze - 1
GUI ON Thaw - 11
GUI on Freeze - 2
Client Server (BRClient.exe)
GUI OFF THAW - 4
GUI OF Freeze - 1
GUI ON Thaw - 14
GUI on Freeze - 2
GUI TEST (2)
Distributed (Wb32.exe) (Bigger is better)
Gui off 23.6 Screens per Second
Gui on 11.8 Screens per Second
Client Server (BRClient.exe)
Gui off 28.9 Screens per Second
Gui on 14.4 Screens per Second
Conclusions:
GUI ON is Much Slower than GUI OFF.
Client Server actually outperforms WB32.exe
** I question this benchmark, but two separate benchmarks confirm it!
** We have Gigabit Network, I ran the same test over a VPN, and GUi test was much slower!
I finally decided to write a program that reads through 279,324 entries SHR, Outin & Indexed
BR 3.83S - SHR, OUTIN, LOCKING (No RELEASE)
** Smaller is Better
Single User Pass : 23,19,11,19
Two Sessions (Same Machine) : 29,32,31,33
Multi User (Two Machines) : 621,621 (00:10:21).
BR 3.83S - SHR, OUTIN, LOCKING (READ RELEASE)
** Smaller is Better
Single User Pass : 15,15,8,15
Two Sessions (Same Machine) : 9,16,15,16
Multi User (Two Machines) : 416 (00:06:56).
BR 3.83S - SHR, INPUT, NO LOCKING
** Smaller is Better
Single User Pass : 15,8,8,8
Two Sessions (Same Machine) : 7,16,20,24
Multi User (Two Machines) : 434 (00:07:14).
** Note: File was actually opened twice for INPUT testing
First Open - OUTIN
2nd Open - INPUT
** There does not appear to be a any overhead in opening OUTIN & THEN INPUT
** BR will allow the program / libraries to open as OUTIN AFTER INPUT if you FIRST open as OUTIN.
** Note: To make sure of the results, USING only INPUT was also tested.
Conclusions:
Performance varies a fair amount (I believe the Server Cache is responsible for this).
Two Sessions on one computer is consistently slower, but faster than Multi-User
Multi-User (Different Machines) is MUCH SLOWER
** Note: Network performance is a BIG Factor. Faster networks read faster.
** Read Release OR INPUT both provide similar performance advantages.
** Note: Because the file is opened OUTIN, the records are being locked.
** This has an Impact on performance.
** Locking the record during a report may lead to error 61 during run time!
** Use Read Release to improve performance
** Open INPUT did not really improver performance.
BR 4.30 - SHR, OUTIN, LOCKING (No RELEASE)
** Smaller is Better
Single User Pass : 19,13,13,18
Two Sessions (Same Machine) : 36,37,26,25
Multi User (Two Machines) : 521 (00:08:41).
BR 4.30 - SHR, OUTIN, LOCKING (READ RELEASE)
** Smaller is Better
Single User Pass : 15,15,8,9
Two Sessions (Same Machine) : 25,24,25,24
Multi User (Two Machines) : 475 (00:07:55).
BR 4.30 - SHR, INPUT, NO LOCKING
** Smaller is Better
Single User Pass : 11,17,11,16
Two Sessions (Same Machine) : 15,18,19,8
Multi User (Two Machines) : 442 (00:07:22).
** Note: File was actually opened twice for INPUT testing
First Open - OUTIN
2nd Open - INPUT
** There does not appear to be a any overhead in opening OUTIN & THEN INPUT
** Opening INPUT only provided similar results.
** BR will allow the program / libraries to open as OUTIN AFTER INPUT if you FIRST open as OUTIN.
Conclusions:
BR 4.3 is slightly slower than 3.83 reading OUTIN. (with and without release)
Read Release is still faster in BR 4.3, but again Slightly slower than 3.83
Locking the Record should be avoided for performance reasons.
BR 4.30 - SHR, OUTIN, LOCKING (No RELEASE) (Client Server)
** Smaller is Better
** In Client Server, the tests reflect the location of the Sessions.
Single User Pass : 4,4,4,3
Two Sessions (Same Machine) : 6,8,5,10
Multi User (Two Machines) : 6/10 (00:00:06/00:00:10).
BR 4.30 - SHR, OUTIN, LOCKING (READ RELEASE) (Client Server)
** Smaller is Better
Single User Pass : 5,6,6,5
Two Sessions (Same Machine) : 11,13,9,12
Multi User (Two Machines) : 9,13 (00:00:09/00:00:13).
BR 4.30 - SHR, INPUT, NO LOCKING (Client Server)
** Smaller is Better
Single User Pass : 4,4,4,3
Two Sessions (Same Machine) : 9,10,4,9
Multi User (Two Machines) : 5,9 (00:00:05/00:00:09).
Conclusions:
Performance is not 100% consistent, and depends on other server factors.
Client Server performs 83 to 124 times faster than distributed.
All Tests are MUCH faster than any other test
Single User is MUCH faster than any other test.
Two Sessions on 1 computer has a minimal performance impact.
Two Sessions on 2 computer also has a minimal performance impact.
OPEN INPUT is faster than READ OUTIN, RELEASE