Hi Stan, I hit the same problem. Below is the mail I wrote about two months ago concerning the same problem. Complete with patch, performance measurements and traces to the four different kinds of network traffic that isConnected() is causing. I thought the subject would attract at least some attention, but ... I was wrong though, it was not 400000% but only barely 40000% :-)
Ciao, Raimo. ---------------------------------------------------------------------- Subject: How to increase Slide 2.0 WebDAV-MySQL performance 400000% ... Date: Mon, 08 Jul 2002 16:37:34 +0200 From: Raimo Ihle <[EMAIL PROTECTED]> Reply-To: "Slide Developers Mailing List" <[EMAIL PROTECTED]> Organization: bit~side GmbH To: Slide Developers Mailing List <[EMAIL PROTECTED]> Hi Slide-devs, I installed a current CVS-version of Slide and connected it with WebDAV using Windows-Webfolders. Performance for a PROPFIND (hit F5) on a folder containing about 20 files and folders was not really thrilling but ok. Then I changed the database from the internal HSQL to MySQL, running on a different machine in our network. Now PROPFIND was very very timeconsuming: 08 Jul 2002 16:03:43 - org.apache.slide.webdav.WebdavServlet - INFO - PROPFIND = 207 Multi-Status (time: 212856 ms) URI = /files/cebit2002 That's more than 3 minutes for a PROPFIND on a folder, containing about 20 other folders and files ! Profiling Slide suggested, that all time was spend on networked database-calls, almost all of them originating from two functions: slidestore.reference.JDBCContentStore.isConnected() and slidestore.reference.JDBCDescriptorsStore.isConnected() Each call to isConnected(), and there seem to be quite a few, results in four networked database operations: - connection.isClosed() - connection.prepareStatement(...) - statement.executeQuery() - statement.close() If I comment out those statements (patch attached), performance increases 400000% to: 08 Jul 2002 16:24:36 - org.apache.slide.webdav.WebdavServlet - INFO - PROPF IND = 207 Multi-Status (time: 541 ms) URI = /files/cebit2002 Is isConnected() really neccessary ? If there is something wrong with the database connection, isn't Slide going to find out soon enough ? Thanks, Raimo. -- Dipl.-Inform. Raimo Ihle Tel: +49 (0)30 39 40 54 25 bit~side GmbH Fax: +49 (0)30 39 40 54 50 Salzufer 14a Aufgang D Email: [EMAIL PROTECTED] 10587 Berlin WWW: <http://www.bit-side.com> Index: JDBCContentStore.java =================================================================== RCS file: /home/cvspublic/jakarta-slide/src/stores/slidestore/reference/JDBCContentStore.java,v retrieving revision 1.18 diff -r1.18 JDBCContentStore.java 362,363c362,364 < try { < if ((connection == null) || (connection.isClosed())) { --- > // try { > // if ((connection == null) || (connection.isClosed())) { > if ((connection == null)) { 366,371c367,372 < < PreparedStatement statement = < connection.prepareStatement(getDatabaseConnectionTestStatement()); < statement.executeQuery(); < statement.close(); < --- > > // PreparedStatement statement = > // connection.prepareStatement(getDatabaseConnectionTestStatement()); > // statement.executeQuery(); > // statement.close(); > 375,377c376,378 < } catch (SQLException e) { < throw new ServiceAccessException(this, e); < } --- > // } catch (SQLException e) { > // throw new ServiceAccessException(this, e); > // } Index: JDBCDescriptorsStore.java =================================================================== RCS file: /home/cvspublic/jakarta-slide/src/stores/slidestore/reference/JDBCDescriptorsStore.java,v retrieving revision 1.32 diff -r1.32 JDBCDescriptorsStore.java 503,504c503,504 < try { < if ((connection == null) || (connection.isClosed())) { --- > // try { > if ((connection == null)) { 508,511c508,511 < PreparedStatement statement = < connection.prepareStatement(getDatabaseConnectionTestStatement()); < statement.executeQuery(); < statement.close(); --- > // PreparedStatement statement = > // connection.prepareStatement(getDatabaseConnectionTestStatement()); > // statement.executeQuery(); > // statement.close(); 516,518c516,518 < } catch (SQLException e) { < throw new ServiceAccessException(this, e); < } --- > // } catch (SQLException e) { > // throw new ServiceAccessException(this, e); > // } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
