後,我改變了貓鼬的版本號從3.5.7至3.8.4和性能了一個巨大的打擊在導入過程。此過程讀取文件中的行,並填充大約250萬行的空數據庫(無索引)。性能緩慢從3.5.7升級到3.8.4
這是我所做的唯一改變;只是升級版本。我可以來回切換並查看性能的差異。
性能命中是:1)的方法,在栓釘100%的CPU,其中,之前它跑的向上也許25%左右。 2)進入數據庫進入數據庫很慢。 3.5.7插入約10K記錄每20秒,而3.8.4似乎插入更多約1每秒。 3)nodejs似乎「消失」到CPU密集型和所有其他I/O功能被阻止(http請求等);此前該系統仍然非常有效。
很難隔離代碼,但大致這裏發生的事情:
- 從文件中讀取一行
- 解析它
- 運行查詢,看看是否記錄已經存在
- 用行中的值插入/更新記錄
- 將現有記錄寫入已打開的文件流
- Continu e爲文件
在猜測中的下一行,我會說這是關係到請求的方式無論是在貓鼬取決於或貓鼬本身的底層驅動程序節流的變化。我的第一個想法是嘗試處理請求正在排隊並在文件讀取中暫停的情況。這在編寫查詢結果時非常有效(當文件開始緩存寫入時暫停查詢流,然後在漏下恢復)。但我一直無法找到貓鼬在哪裏可能發出關於其背壓的信息。
我在第一時間升級的原因是由於內存泄漏誤差設定在貓鼬處理的事件,我已經閱讀是固定的(對不起,我失去了參照的是),當我得到的。
我想保持升級並找出問題。任何想法可能是什麼?是否有某個地方給出了一個通知我背壓的事件,以便我可以暫停/恢復輸入流?