簡體   English   中英

Java MySQL JDBC慢/慢

[英]Java MySQL JDBC Slow/Taking turns

我們目前正在嘗試使我們的服務器軟件使用連接池來大大減少延遲,但是,與其減少查詢運行時間,不如將其加倍,甚至比連接池之前還慢。

有什么原因嗎? JDBC一次只允許一個查詢還是有另一個問題?

而且,沒有人有任何多線程連接池的示例來減少數百次查詢所花費的時間,因為我們發現這些示例只會使情況變得更糟。

我們已經嘗試過使用BoneCP和Apache DBCP獲得類似的結果...

那是使用Apache的DBCP。 我們還嘗試了使用BoneCP的結果相同...

通過重新使用現有連接池,連接池有助於減輕創建數據庫新連接的開銷/成本。 如果您的工作負載需要許多短至中等的實時連接(例如,通過查詢數據庫處理並發用戶請求的應用程序),則這一點很重要。 不幸的是,您的示例基准代碼沒有這樣的配置文件。 您僅並行使用4個連接,並且不涉及重用。

連接池無法實現的是,神奇地加快了執行時間或提高了並發級別,這超出了數據庫所提供的水平。 如果基准代碼代表預期的工作量,我建議您研究批處理語句而不是線程。 這將大大提高INSERT / UPDATE操作的性能。

更新

並行使用多個連接可以提高性能。 請記住,Java應用程序和數據庫中的多個線程之間不一定存在關系。 JDBC只是數據庫驅動程序的包裝,使用多個連接會導致將多個查詢並行提交到數據庫服務器。 如果這些查詢適合它,那么每個現代RDBMS都將能夠並行處理它們。 但是,如果這些查詢的工作量很大,或者更糟糕的是包括表鎖或沖突的更新,則數據庫可能無法這樣做。 如果您的性能不佳,請檢查哪些查詢滯后並對其進行優化(它們是否有效?是否有適當的索引?對模式進行非規范化可能在更極端的情況下有所幫助。對更大的更新使用准備好的語句和批處理模式等)。 如果您的數據庫過載了許多類似的小型查詢,請考慮緩存常用數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM