所以我有一點性能問題。我製作了一個構建數據庫的java程序。問題是加載數據時。我將5,000個文件加載到一個sql數據庫中。當程序啓動時,它可以在10分鐘內處理大約10%的文件,但隨着程序的進行速度會變慢。目前這一比例爲28%,按現在的速度在16小時內完成。不過,這一速度正在顯着減慢。Java和MySQL性能問題
我的問題是爲什麼程序運行時逐漸變慢,以及如何解決這個問題。
編輯:我有兩個版本。一個是螺紋(用5個螺紋蓋住),另一個不是。兩者之間的差異可以忽略不計。如果任何人喜歡,我可以再次發佈代碼,但我拿出來了,因爲我現在相當確定瓶頸是MySQL(也適當地重新標記)。我繼續使用批量插入。這確實導致了速度的初步提高,但是在處理大約30%的數據後,它又迅速下降了。
所以SQL點
- 我對所有64臺引擎是InnoDB的版本10
- 表有大約30萬行此時(〜數據的30%)
- 所有的表一個「聯合」主鍵。一個id和一個日期。
- 看着MySQL WorkBench我發現每個線程都有一個查詢(5個查詢)
- 我不確定時間單位(剛剛從MySQL管理員處讀取),但查詢是否已經插入文件正在採取`300。 (這個查詢應該很快,因爲它是一個從MyTable Limit 1到1的SELECT MyIndex,其中Date = date。)由於我一直在啓動和停止我在此檢查中構建的程序,以查看文件是否已經插入。通過這種方式,我可以在每次更改後啓動它,並查看是否有任何改進,而無需再次啓動該過程。
- 我相當肯定,性能的下降與表格的大小有關。 (我現在可以停止並啓動程序,但程序仍然很慢,只有當桌子很小時,程序才能以可接受的速度運行。)
- 請問,我會發布您需要的任何信息。
完成!那麼我只是讓它運行它需要的4天。謝謝大家的幫助。
乾杯,
--Orlan
多少條記錄在一個文件? – maasg
有20年的季度數據;所以80個時期。每個表中有64個表格。每個表格每個表格10000-8000行(也稱爲每個文件)。所以一個表應該是10,000 * 80 = 800,000行。每桌有10-150場。所有字段都是INT或BIGINT。 – Orlan