We have recently switched from IBDAC to UniDAC, after which we experienced quite some slowing of the performance.
We use connection pooling. When we used IBDAC we had a maximum of 5 concurrent connections in the connection pool. After switching to UniDAC this has increased to around 12 concurrent connections.
This was the only change introduced to our server application, so it must be the reason to the decreased performance.
I have discovered that the TUniQuery.SpecificOptions.FetchAll is set to False (default). I believe this should be set to True as is the case with the IBDAC driver. However this did not improve the performance.
We have around 100 concurrent users on this particular server, and they report real slow performance compared to the IBDAC driver.
I will switch back to IBDAC to avoid this, however I guess it must be some settings that are not optimal, as I believe the codebase for UniDAC and IBDAC is the same. The speed should also be the same as mentioned on the Devart forums.
It seems that there has been no changes to the UniDAC driver since DA version 6.0.45, so I guess nothing has changed there.
We would like to use the UniDAC Professional components that we have invested in, but should there be no alternative we will order the IBDAC components again.
Solution was to upgrade UniDAC driver to it’s latest version. After that we are having significant performance increase.
Also we have noticed that server response is faster (?) when schema is shifted from DataService to DataModule.
It would be nice if someone from RemObjects would shed a bit of light on this behavior.
RODA for Delphi: 6.0.53.935
UniDAC: 4.0.2
Firebird: 2.5.1
Delphi: 2010 latest updates.
Do you have any suggestions?
Now we are testing and comparing UniDAC and IBDAC perfomance (ver 4.0).
Can you test your project with the latest trial UniDAC and IBDAC versions?
It would be nice if someone from RemObjects would shed a bit of light on this behavior.
It can be due to recreating schema object each call. Try to use another class factory in _Impl.pas file.
Read more about class factories in wiki: Documentation | RemObjects Software
We have gone back to using the IBDAC driver - will have to set up some internal load testing to compare the two drivers. Before we use it in production.
It is a project with various services, inherited from a base class.
Each service has its own schema, with different standard SQL statements.
Each service call is logged in another service, called using the THYLocalService, so two database connections gets used for each call (log data in one db; actual data in another db).
So nothing special about it, but the best test for me, would be to use the service tester maybe, on the real project, using IBDAC and UniDAC drivers. Comparing them afterwards.
But I believe that a standard template DA Server/Client project would be sufficient to test the two drivers under load. Currently we have up to 80 concurrent users on one of our projects, so this should be simulated in some way, which I guess the service tester can be used for.
I am up to date with Unidac 4, latest remobjects SDK, use connection pooling, and I do not experience any issues. I’ve only seen a max of 10 connections, but it can handle more. Delphi XE1. I have 100+ client connections to my service.