作者ntpuisbest (阿龍)
看板Soft_Job
標題[請益] 重開機才會加速的轉檔
時間Fri Feb 21 18:10:13 2025
我工作上有一個需求
就是要將有點大的txt檔案,大概1gb
沒有重開機常常要七八個鐘頭
重開機大概只要三個鐘頭
轉入資料庫裡面
每次轉之前我也會先刪掉舊的資料再插入
也沒有設定什麼不必要的index
但我發現每次只要重開機
轉檔案入庫的速度就會快很多
我是用java寫的
我想也有自動回收機制
不確定是不是因為內存洩漏還是滿了
才會導致重開機就ok
想問有什麼方法可以知道程式是哪裡寫不好
才會一樣的寫法
重開機就會變快
-----
Sent from MeowPtt on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.163.89 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1740132615.A.413.html
1F:推 jej: 檔案從哪來?是隨時隨地一直寫,一天寫入一次嗎? 02/21 18:32
2F:→ jej: 解法很多種,但問題敘述不足 02/21 18:32
3F:→ jej: 例如資料庫如果是oracle,也可以考慮SQL loader 02/21 18:32
4F:→ jej: 或是用splunk收,在處理到資料庫 02/21 18:32
5F:→ ntpuisbest: 檔案是別人丟過來的,一天丟一次,寫好才丟過來 資 02/21 18:48
6F:→ ntpuisbest: 料庫是MSSQL 02/21 18:48
7F:推 ILoveAMD: mysql也有直接從檔案匯入的介面 02/21 19:17
8F:→ MOONY135: 每處理多大檔案就計時 02/21 19:49
9F:→ MOONY135: 一天一個檔 一個檔1gb? 感覺請對方直接整理成csv你手動 02/21 19:51
10F:→ MOONY135: import馬上就結束了 02/21 19:51
11F:推 zonppp: txt 1gb...寫那麼大幹嘛? 02/21 20:10
12F:→ BlacksPig: 一筆資料就1gb? 02/21 20:20
13F:→ ntpuisbest: 一個月丟一次,為何那麼大因為是客戶基本資料 02/21 20:44
14F:推 ILoveAMD: mysqlimport 指令查一下 02/21 20:53
15F:推 jej: 如果是已經整理好的客戶資料 02/21 21:09
16F:→ jej: 用load data infile或是mtsqlimport 02/21 21:09
17F:→ jej: 會比你與java快十倍以上 02/21 21:09
18F:→ ntpuisbest: 不是一筆資料1gb,是一個檔案1gb,一個檔案大概300w 02/21 21:27
19F:→ ntpuisbest: 筆資料吧 02/21 21:27
20F:→ ntpuisbest: 他們可能不願意弄成csv方式很傳統是用定義第幾個by 02/21 21:28
21F:→ ntpuisbest: te到第幾個byte是第一個欄位,然後第幾個到第幾個 02/21 21:28
22F:→ ntpuisbest: 是第二個欄位這樣 02/21 21:28
23F:→ kkkoooiii2: 開機時間拉長其他程式吃記憶體導致執行時吃了 swap? 02/21 21:30
24F:→ kkkoooiii2: 對 memory leak 有疑慮執行時就監看一下啊 02/21 21:32
25F:→ superpandal: 指令寫的好都不會這麼慢 02/21 22:40
26F:噓 B0988698088: 內存是什麼 02/21 22:46
27F:→ MoonCode: 重開機這麼快 就寫個重開機的腳本不就好了 02/21 22:46
28F:推 ILoveAMD: 固定長度更簡單 先awk 再import 去拉個屎就差不多了 02/21 22:46
29F:→ Apache: profiler 直接開起來看bottleneck在哪裡啊== 02/21 22:58
30F:→ burgess: 去瞭解jvm記憶體的部分 02/21 23:46
31F:→ dalensona: java heap dump出來看看程式在幹嘛? 02/21 23:47
32F:→ dalensona: 加上thread dump 看時間都花在甚麼程式上 02/21 23:48
33F:推 lchcoding: 進程式,加log,做時間分析 02/22 05:40
34F:→ lchcoding: 重開機前&後,各跑個兩三分鍾來比 02/22 06:01
35F:推 Lipraxde: 比起重開機會變快,處理完要幾個小時是不是檢查一下算 02/22 07:25
36F:→ Lipraxde: 法,還是哪個環節是 bottleneck 比較好...這時間拿去 t 02/22 07:25
37F:→ Lipraxde: raining LLM 估計模型都能學會怎麼說話了 02/22 07:25
38F:→ jhangyu: 連怎麼找bottle neck都不會…… 02/22 07:46
39F:推 jej: 那就是用script分隔好格式後給mysqlimport用 02/22 07:57
40F:→ jej: 速度仍然還是會比你用java快上10倍以上 02/22 07:57
41F:→ jej: 如果你們公司有個資考量因素,就更不應該讓他成為檔案 02/22 08:36
42F:→ jej: 可以的話,和對方系統直接資料庫對傳比較適合 02/22 08:36
43F:→ jej: 這個解決方案的解決方式又更多了 02/22 08:36
44F:推 ILoveAMD: 眼殘看成mysql mssql的話查一下BULK INSERT 02/22 09:13
45F:推 gmoz: 確定一下是你轉檔部分慢 還是寫SQL慢 02/22 09:57
46F:推 jack0204: 大概是一筆一筆寫才會這樣,浪費時間在連線上 02/22 12:18
47F:推 abc21086999: 該不會真的一筆一筆寫進去吧... 02/22 14:17
48F:推 tw11509: 300w筆不算多吧,個人覺得執行這麼久跟做法有關 02/22 14:44
49F:推 xuzx: 會不會是寫完檔案沒有close? 02/22 16:42
50F:→ cylee: 先轉檔成 CSV,再用 BULK INSERT 試試,才1GB 而已 02/23 10:22
51F:推 cancelpc: 一筆一筆tx,或一次tx都會很慢 02/24 17:19
52F:→ cancelpc: log也可以切到simple 02/24 17:20
53F:→ cancelpc: 去問chatgpt吧,推文難教 02/24 17:21
54F:→ cancelpc: 也可能java寫差了,不是循序處理,而是整個load進來 02/24 17:22
55F:→ cancelpc: console跑完結束就釋放,怕一堆人用ap server下跑,就可 02/24 17:24
56F:→ cancelpc: 能 02/24 17:24
57F:噓 nanjolno: 內存 02/27 06:42
58F:推 qmailtw: 先搞清楚是 Java code 還是 SQL. 先把 sql mark 掉,看是 03/02 08:14
59F:→ qmailtw: 否還是慢 03/02 08:14