[請益] 重開機才會加速的轉檔

作者: ntpuisbest (阿龍)   2025-02-21 18:10:13
我工作上有一個需求
就是要將有點大的txt檔案,大概1gb
沒有重開機常常要七八個鐘頭
重開機大概只要三個鐘頭
轉入資料庫裡面
每次轉之前我也會先刪掉舊的資料再插入
也沒有設定什麼不必要的index
但我發現每次只要重開機
轉檔案入庫的速度就會快很多
我是用java寫的
我想也有自動回收機制
不確定是不是因為內存洩漏還是滿了
才會導致重開機就ok
想問有什麼方法可以知道程式是哪裡寫不好
才會一樣的寫法
重開機就會變快
作者: jej (晃奶大馬桶)   2025-02-21 18:32:00
檔案從哪來?是隨時隨地一直寫,一天寫入一次嗎?解法很多種,但問題敘述不足例如資料庫如果是oracle,也可以考慮SQL loader或是用splunk收,在處理到資料庫
作者: ntpuisbest (阿龍)   2025-02-21 18:48:00
檔案是別人丟過來的,一天丟一次,寫好才丟過來 資料庫是MSSQL
作者: ILoveAMD (AMD)   2025-02-21 19:17:00
mysql也有直接從檔案匯入的介面
作者: MOONY135 (談無慾)   2025-02-21 19:49:00
每處理多大檔案就計時一天一個檔 一個檔1gb? 感覺請對方直接整理成csv你手動import馬上就結束了
作者: zonppp (冷涼卡好)   2025-02-21 20:10:00
txt 1gb...寫那麼大幹嘛?
作者: BlacksPig (Black Handsome s Pig)   2025-02-21 20:20:00
一筆資料就1gb?
作者: ntpuisbest (阿龍)   2025-02-21 20:44:00
一個月丟一次,為何那麼大因為是客戶基本資料
作者: ILoveAMD (AMD)   2025-02-21 20:53:00
mysqlimport 指令查一下
作者: jej (晃奶大馬桶)   2025-02-21 21:09:00
如果是已經整理好的客戶資料用load data infile或是mtsqlimport會比你與java快十倍以上
作者: ntpuisbest (阿龍)   2025-02-21 21:27:00
不是一筆資料1gb,是一個檔案1gb,一個檔案大概300w筆資料吧他們可能不願意弄成csv方式很傳統是用定義第幾個byte到第幾個byte是第一個欄位,然後第幾個到第幾個是第二個欄位這樣
作者: kkkoooiii2   2025-02-21 21:30:00
開機時間拉長其他程式吃記憶體導致執行時吃了 swap?對 memory leak 有疑慮執行時就監看一下啊
作者: superpandal   2025-02-21 22:40:00
指令寫的好都不會這麼慢
作者: B0988698088 (廢文少女小円♥)   2025-02-21 22:46:00
內存是什麼
作者: MoonCode (MoonCode)   2025-02-21 22:46:00
重開機這麼快 就寫個重開機的腳本不就好了
作者: ILoveAMD (AMD)   2025-02-21 22:46:00
固定長度更簡單 先awk 再import 去拉個屎就差不多了
作者: Apache (阿帕契)   2025-02-21 22:58:00
profiler 直接開起來看bottleneck在哪裡啊==
作者: burgess (墨紹臣)   2025-02-21 23:46:00
去瞭解jvm記憶體的部分
作者: dalensona (大仁)   2025-02-21 23:47:00
java heap dump出來看看程式在幹嘛?加上thread dump 看時間都花在甚麼程式上
作者: lchcoding   2025-02-22 05:40:00
進程式,加log,做時間分析重開機前&後,各跑個兩三分鍾來比
作者: Lipraxde (Lipraxde)   2025-02-22 07:25:00
比起重開機會變快,處理完要幾個小時是不是檢查一下算法,還是哪個環節是 bottleneck 比較好...這時間拿去 training LLM 估計模型都能學會怎麼說話了
作者: jhangyu (jhangyu)   2025-02-22 07:46:00
連怎麼找bottle neck都不會……
作者: jej (晃奶大馬桶)   2025-02-22 07:57:00
那就是用script分隔好格式後給mysqlimport用速度仍然還是會比你用java快上10倍以上
作者: ILoveAMD (AMD)   2025-02-22 09:13:00
眼殘看成mysql mssql的話查一下BULK INSERT
作者: gmoz ( This can't do that. )   2025-02-22 09:57:00
確定一下是你轉檔部分慢 還是寫SQL慢
作者: jack0204 (Jarbar王朝)   2025-02-22 12:18:00
大概是一筆一筆寫才會這樣,浪費時間在連線上
作者: abc21086999 (呵呵)   2025-02-22 14:17:00
該不會真的一筆一筆寫進去吧...
作者: tw11509 (John-117)   2025-02-22 14:44:00
300w筆不算多吧,個人覺得執行這麼久跟做法有關
作者: xuzx (peko)   2025-02-22 16:42:00
會不會是寫完檔案沒有close?
作者: cylee (Artisan)   2025-02-23 10:22:00
先轉檔成 CSV,再用 BULK INSERT 試試,才1GB 而已
作者: cancelpc (阿吉)   2025-02-24 17:19:00
一筆一筆tx,或一次tx都會很慢log也可以切到simple去問chatgpt吧,推文難教也可能java寫差了,不是循序處理,而是整個load進來console跑完結束就釋放,怕一堆人用ap server下跑,就可能
作者: nanjolno (nanjolno)   2025-02-27 06:42:00
內存
作者: qmailtw (愛八卦的主管滾遠點)   2025-03-02 08:14:00
先搞清楚是 Java code 還是 SQL. 先把 sql mark 掉,看是否還是慢

Links booklink

Contact Us: admin [ a t ] ucptt.com