BDE Out of Memory

TECH TIP: RB Server and the BDE

Question:  “Why do I get the following error when accessing my report server with several clients: ‘EDBEngineError, Insufficient memory for this operation’?”

Answer:  For simplicity, the RB Server demos use the BDE and paradox tables.

However, in actual use, the BDE is a poor choice for multi-thread server applications. If you search Google Groups you can find many references to this topic.

The BDE’s legacy architecture was never designed to support running many concurrent sessions on a single machine. Each BDE session requires too much memory overhead. Depending upon your machine’s resources and the configuration of the BDE you will eventually run out memory when too many client sessions are created on the server.

Recommendation from Mike Leftwich on our Server newsgroup:

Any time you run multiple simultaneous sessions of the BDE, you need to bump up the SHAREDMEMSIZE setting in the BDE Administrator.  The default is 2048 (2MB), but you should bump it up to at least 4096.  I keep mine set at 8192.  I also bump up my MAXBUFSIZE to 8192 and MEMSIZE to 16 (MB), but if you’re low on memory I don’t think these are absolutely necessary.  You can find these settings in the BDE Administrator on the Configuration tab under System/INIT.

A note about scalability:

RB Server is highly optimized on the server side, the client side, and the web tier. However, you still need strong hardware, strong database performance, etc. Any weak link can become the bottleneck. RB Server and most database server software can take advantage of multiple CPU’s. Running the database server software on a separate machine is also an option, as is building a farm of report servers that the WebTier can utilize to load balance request across several machines.