2010-08-11 54 views
2

我一直在開發一個網絡應用程序,我已經在大學開始了近一年​​的時間。完成後,我對大學期間編寫的數據庫代碼進行了一些更改。我在大學時使用了簡單的JDBC,但沒有使用連接池和準備好的語句。在過去的一個月中,我意識到了這種潛力,並且需要使用連接池,並且因爲查詢和使用的數據量增加而準備好了語句。我如何知道連接池和準備好的語句正在工作?

我已經實現了連接池,但並沒有真正注意到性能的增加。如果性能有所提高,那麼我的問題就會得到解答,但我如何驗證連接池和準備好的語句是否正確使用?

+0

只是基準(stresstest)它。使用[JMeter](http://jakarta.apache.org/jmeter/)。 – BalusC 2010-08-11 16:23:48

回答

6

我認爲準備好的聲明比安全性更重要,而不是性能的觀點。如果你使用它們很酷,你應該是。只要你的SQL的100%是準備好的語句,你就「正確地使用它們......」

連接池是輕負載下你不會注意到的東西。 1或2或10個用戶,您可能會看到0或接近0的差異。您需要創建一些負載測試測試來模擬100個同時在線的用戶,然後比較有無共享的性能。

+0

應該注意的是,使用'PreparedStatement'肯定會帶來性能優勢,因爲它們在數據庫中準備,編譯和緩存一次,並且可以永久重用。然而,就像連接池一樣,如果你是唯一使用webapp的人,性能差異是完全可以忽略的:) – BalusC 2010-08-11 16:24:40

+0

@BalusC這取決於數據庫和數據庫驅動程序。有些不會編譯它們,有些會在相同的PreparedStatement實例已經被使用了X次之後。有些甚至會向數據庫進行更多往返傳輸,1個數據包用於SQL,一個用於發送實際參數。 – nos 2010-08-11 16:47:10

+0

@nos哪些DB可能是那些?當然,我並不是說完整的列表,但是我已經處理了大部分「大」數據庫,並且我甚至包含了HSQLDB,並且所有的準備好的語句都快得多。 TIA – mezmo 2010-08-11 16:58:17

1

如果打開和關閉連接不受速率限制,您不會看到性能改進。嘗試查看數據庫的分析工具以獲取打開的連接列表。如果您在表面上關閉它們時看到來自流程的打開連接,則接口層正在執行連接池。

另請參閱this other SO question強制聯合連接斷開。

(警告:我使用ADO和ADO.NET,JDBC行爲可能不同。)

1

你問的統計數據連接池,看看它是否工作。如果連接池庫不提供統計信息,請找一個更好的庫。