我在我的服務器上運行一個腳本,每個〜2kB每分鐘插入大約3000條記錄。看起來服務器的內存被這個活動的數據堵塞了。 (在20分鐘100MB)在MySQL數據庫中插入大量記錄消耗內存
最後,我要殺死進程(httpd和mysqld的),甚至重新啓動服務器來取回記憶...
有什麼辦法將大量時節省內存的記錄?似乎MySQL以某種方式緩存插入的數據...
謝謝!
我在我的服務器上運行一個腳本,每個〜2kB每分鐘插入大約3000條記錄。看起來服務器的內存被這個活動的數據堵塞了。 (在20分鐘100MB)在MySQL數據庫中插入大量記錄消耗內存
最後,我要殺死進程(httpd和mysqld的),甚至重新啓動服務器來取回記憶...
有什麼辦法將大量時節省內存的記錄?似乎MySQL以某種方式緩存插入的數據...
謝謝!
關閉mysql緩存? 只是禁用它:(從here拍攝)
SET GLOBAL query_cache_size = 40000; # minimum as docs says
SET SESSION query_cache_type = OFF;
你可以給SHOW VARIABLES LIKE 'foo';
檢查一下這些值包含。
當前query_cache_size設置爲0,query_cache_type = ON。我覺得這很奇怪,INSERT可以從緩存中受益,但正如wallyk告訴我的,這是一個功能... –
有更好的方法來提高插入性能。
首先,您是否有可能在每10秒鐘一次查詢中插入這些插入內容?或類似的東西。這裏的想法是將更少的查詢發送到服務器。
另外,您是否使用InnoDB?該引擎對於這種類型的uf使用更好。
這是一個MyISAM數據庫...我不熟悉不同的數據庫類型(有點新手:)我會看看,然後在這些類型... 我會結合一些插入,但這隻會延遲不可避免的。我希望其他解決方案一起幫助保持記憶! –
如果您找到上述最佳解決方案,您將會驚訝於可能達到的改進。 –
開發一點點更新:我已經將數據庫引擎更改爲InnoDB。雖然這會產生更大的數據庫,但它確實支持事務處理。這導致內存使用率降低(COMMIT有助於管理內存使用情況)。禁用緩存是第二大變化。可悲的是,mysql_free_result不起作用,因爲它看起來不適用於INSERT查詢...... –
這是一個功能,而不是一個錯誤。也許偶爾嘗試'COMMIT'? – wallyk
你有沒有試過mysql_free_result? –
20分鐘100MB沒有什麼令人印象深刻的,你能詳細說明問題嗎?你如何插入行?他們從哪裏來? – Sebas