We have to use Oracle as the DB server for Sitefinity, and we are experiencing serious performance problems.
The software we use: Sitefinity 3.5, Windows 2003 Server 64 bit, Oracle 10g Server 10.2.0.1.0 64 bit, ODP.NET Oracle client (also includes the native client).
1. A simple page based on a template with one placeholder. The served html code is 8 KByte, and the entire communication to the Oracle server is 90 Kbyte.
2. A page with a complex layout, based on a template with about 20 placeholders. The served html code is 20 KByte, the entire communication to the Oracle server is 400 Kbyte.
We measured the communication to the Oracle server with Wireshark using the "Follow TCP stream" option. In the TCP stream we can see the html contents that are supposed to be in the placeholders, but strangely they are not only once in the downward stream, but also appear multiple times in the downward and upward stream. (The content seems to be sent back to the Oracle server).
This overhead causes slow page responses. Two load-balanced frontend web servers, each with 2x4 CPU cores and 8 GB RAM, can serve the simple page only with 10-40 req/sec, and the complex page only with 1-3 req/sec, depending on the degree of concurrency of the test requests.
If we test the same contents with the corresponding master pages and .aspx pages saved to the file system (without the CMS), the servers can do over 200 req/sec, including the rendering of non-CMS dynamic content.
Unfortunately the current caching solutions in Sitefinity are not applicable (caching the entire html output), because the html output depends on the currently logged on user and other non-cacheable dynamic controls.
My suggestion is a caching mechanism, where not the html output is cached in the server's RAM, but the data that is requested from the database. So the ASP.NET page life cycle is executed with every request, the dynamic controls can do their work, but no network IO is required to the DB.
Thanks for your answers,