我的服務器出現性能問題。使用Java寫入MySQL數據庫的性能低下
現在這裏是設置:
我已經租了一個虛擬服務器(4 GB,2個vCores /線程)。在這臺服務器上運行一個Java程序,通過TCP連接到另一臺服務器。一旦服務器1連接到服務器2,服務器2開始連續發送數據(每分鐘約250,000行,每行約50字節的數據)。服務器1然後拆分每一行,並通過向服務器1上運行的MySQL數據庫的表中添加一行來存儲數據。好吧,所以這裏是問題:我的服務器1不能跟上。
這些是相關的Java部分。
接收數據:
InputStream in = socket.getInputStream();
BufferedInputStream bin = new BufferedInputStream(in);
InputStreamReader inReader = new InputStreamReader(bin, "UTF-8");
BufferedReader reader = new BufferedReader(inReader);
String line;
... something...
while((line = reader.readLine())!=null) {
mySqlConn.WriteReferenceData(line);
}
}
一切只是直線前進。並寫入數據:
public void WriteReferenceData(String line) {
String[] data = line.split(";");
String query = " insert into reference (field1, field2, field3, field4, field5, field6, field7, field8)"
+ " values (?, ?, ?, ?, ?, ?, ?, ?)";
try {
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, data[0]);
preparedStmt.setString (2, data[1]);
preparedStmt.setString (3, data[2]);
preparedStmt.setString (4, data[3]);
preparedStmt.setString (5, data[4]);
preparedStmt.setString (6, data[5]);
preparedStmt.setString (7, data[6]);
preparedStmt.setString (8, data[7]);
preparedStmt.execute();
}
catch (Exception e) {
... something...
}
}
那麼我該如何提高性能?
1.)一點都沒有,因爲服務器太慢了?
2.)會使用不同的語言(例如沒有解釋器)有幫助嗎?
3.)它只是馬虎的編程嗎?
感謝您的幫助! Raphael
如此多的因素可以影響:連接池缺失,未關閉的語句,每個語句的單個事務等等等等 – Andremoniy
我已經回答了類似的問題,您可以在這裏查看http://stackoverflow.com/a/ 43778950/5558072您可以使用批處理語句代替 –
我同意;這是(幾乎)不可能從遠程調試;基於單個SO問題。請記住:這是一個我們免費提供幫助的社區(當然,我們中的某些人的聲譽也會受益)。但是,如果您的商業產品存在這樣的問題,那麼您可能不得不硬着頭皮聘請一些知道如何快速解決此類問題的單槍打飛服務。 – GhostCat