我工作上有一個需求
就是要將有點大的txt檔案,大概1gb
沒有重開機常常要七八個鐘頭
重開機大概只要三個鐘頭
轉入資料庫裡面
每次轉之前我也會先刪掉舊的資料再插入
也沒有設定什麼不必要的index
但我發現每次只要重開機
轉檔案入庫的速度就會快很多
我是用java寫的
我想也有自動回收機制
不確定是不是因為內存洩漏還是滿了
才會導致重開機就ok
想問有什麼方法可以知道程式是哪裡寫不好
才會一樣的寫法
重開機就會變快
作者:
jej (晃奶大馬桶)
2025-02-21 18:32:00檔案從哪來?是隨時隨地一直寫,一天寫入一次嗎?解法很多種,但問題敘述不足例如資料庫如果是oracle,也可以考慮SQL loader或是用splunk收,在處理到資料庫
檔案是別人丟過來的,一天丟一次,寫好才丟過來 資料庫是MSSQL
每處理多大檔案就計時一天一個檔 一個檔1gb? 感覺請對方直接整理成csv你手動import馬上就結束了
作者: zonppp (冷涼卡好) 2025-02-21 20:10:00
txt 1gb...寫那麼大幹嘛?
作者:
BlacksPig (Black Handsome s Pig)
2025-02-21 20:20:00一筆資料就1gb?
作者:
jej (晃奶大馬桶)
2025-02-21 21:09:00如果是已經整理好的客戶資料用load data infile或是mtsqlimport會比你與java快十倍以上
不是一筆資料1gb,是一個檔案1gb,一個檔案大概300w筆資料吧他們可能不願意弄成csv方式很傳統是用定義第幾個byte到第幾個byte是第一個欄位,然後第幾個到第幾個是第二個欄位這樣
作者: kkkoooiii2 2025-02-21 21:30:00
開機時間拉長其他程式吃記憶體導致執行時吃了 swap?對 memory leak 有疑慮執行時就監看一下啊
作者: superpandal 2025-02-21 22:40:00
指令寫的好都不會這麼慢
作者:
MoonCode (MoonCode)
2025-02-21 22:46:00重開機這麼快 就寫個重開機的腳本不就好了
固定長度更簡單 先awk 再import 去拉個屎就差不多了
作者:
Apache (阿帕契)
2025-02-21 22:58:00profiler 直接開起來看bottleneck在哪裡啊==
作者: burgess (墨紹臣) 2025-02-21 23:46:00
去瞭解jvm記憶體的部分
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倍以上
眼殘看成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大概是一筆一筆寫才會這樣,浪費時間在連線上
作者:
tw11509 (John-117)
2025-02-22 14:44:00300w筆不算多吧,個人覺得執行這麼久跟做法有關
作者:
xuzx (peko)
2025-02-22 16:42:00會不會是寫完檔案沒有close?
作者:
cylee (Artisan)
2025-02-23 10:22:00先轉檔成 CSV,再用 BULK INSERT 試試,才1GB 而已
一筆一筆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 掉,看是否還是慢