Sql-Server

應用程序負載注意事項,使用你得到的而不是一次全部

  • January 12, 2016

一般問題:

作為一個應用程序,我應該使用我可以獲得的所有資源並推動作業系統調度程序**,還是**應該已經為作業系統做一些負載考慮。如果是這樣,我應該使用什麼指標?

背景

我開發了一個應用程序/導入器,它從您的網路共享文件中載入測量數據,將它們轉換為一種通用格式,然後將其上傳到我設計的數據庫方案中。很大一部分數據已經被測量過了,隨著時間的推移,只有一小部分數據會通過測量工具被添加。因此,為了將新數據快速輸入數據庫,我同時查看大約 15 個目錄中的新文件,如果是,則使用我編寫的實際上傳器開始上傳,它還使用 5 個執行緒和 ODBC 連接池來上傳解析的數據。

裝載機

載入程序是使用普通 ODBC 編寫的 C 語言應用程序。我獲取作為參數傳遞的文件名並打開固定計數 (5) 的 odbc 數據庫連接。然後解析器開始逐行讀取數據文件,檢查是否只有盡可能多的執行緒在執行固定連接計數,然後創建一個新執行緒將行上傳到數據庫或等待一個完成。重複直到EOF。現在聽起來很愚蠢。(一年多以前做的,可能會改變)

問題是

這會導致 Windows 伺服器在最初幾分鐘內出現 100% 的負載,因為要導入 600 萬行。我的虛擬機管理員對我大喊大叫,說他從管理程序軟體收到警報,因為一個虛擬機在邊緣執行,並告訴我教我的應用程序一些自我節流,據他說,這是最佳實踐。

只需將其分批成值 (1,1), (2,2) ….

會有一個最佳點,但批次中的值從 100 到 10,000 個不等

生產者消費者在這裡很好,您有多個生產者觀看目錄,然後一個消費者寫入數據庫。

我正是這樣做的,因為我正在解析一些文件中的單詞並將它們載入到數據庫中。

引用自:https://dba.stackexchange.com/questions/126002