我被困在一塊岩石和一個硬的地方,正在製作一個應用程序。基本上,該程序會生成一個非常大的數據集(它超過10個演出並超過服務器上的內存,並且很難在稍後將該數據集從字典傳送到其他服務器)。我決定使用數據庫來存儲數據,但遇到了一個問題,在我產生更多進程時,他們不會使用超過10%的可用內核,但mysql服務總是在60-100%左右。有沒有辦法讓mysql處理大量的併發寫入?
使用mysql的核心運行在60-100%之間。我已經學習了基本的mysql課程,但絕不是專家,我真的只是用它來存儲/分發程序的局部變量。有關如何排除故障或甚至解決此問題的任何建議?我的一個想法是儘管我的內存不能存儲我打算編寫的整個數據庫,但我希望服務器使用一些內存來處理一些請求,然後可能會在內存變滿時編寫它們(現在,mysql正在使用小於1服務器內存的百分比)。
正如你所知道的我的目標,我沒有忠於任何特定類型的系統,所以如果mysql不是一個好的解決方案,我很樂意嘗試另一種工具(我打算使用hbase,但沿着mysql的道路第一)。如果還有什麼更好的,請告訴我。
我生成8個過程,所以我認爲8寫一秒。該表目前只有一列(它必須是唯一的)。它沒有索引(認爲有助於讀取不寫,所以沒有做任何事情)。它真的有兩個操作,它是一個讀取,如果它不存在寫入數據庫。版本是5.1.61。我不確定配置,它是默認的centos 6,我使用Innodb。當我查看鎖定的過程時,有11行結果,其中2個未鎖定(一個是檢查權限,另一個是寫入網絡)。 – Lostsoul 2012-02-20 08:13:52
我應該添加,該應用程序運行在與數據庫相同的服務器上。如果需要,我可以移動。服務器有8個內核,但SQL最多隻有1個,而且應用程序佔用的內存少於10%,所以每個內核對於MySQL而言都有90個。 – Lostsoul 2012-02-20 08:34:24
這對於音量而言確實不算什麼--MySQL可以在簡單的筆記本電腦上處理它的睡眠。沒有索引不是一件好事,尤其是如果你在寫入之前進行讀取 - 沒有該索引,mysql將爲每個插入(在該掃描期間具有關聯的鎖)執行完整的表掃描 - 對於大數據集每秒x6可以真正咀嚼你的過程。我會建議在首先搜索的字段中添加索引,看看是否有助於減少爭用。 – AlexGad 2012-02-20 15:12:36