各位資料庫優化高手們:
目前開發中遇到如下一個性能問題,無法提高性能,請高手指點多謝.
現在有對應四個表的csv檔案,對應每個表的有7個csv檔案,一共28個檔案,
28個csv檔案大小是16G。其中一個表的匯入資料大概是2億行記錄。
采用posgresql 的 copy 命令將資料匯入到posgresql 資料庫中。
現在用java 寫了一個程式,用執行緒池管理執行緒,同時起了28個執行緒,執行copy 命令。
運行上述程式的環境是 centos 記憶體16G cpu 12kenel 24執行緒,
硬碟的寫速度是200M/秒
現在完成 上述匯入任務的平均時間是1400秒,將近23分鐘以上。
用iostat 命令發現io 使用率基本上都是100%,感覺性能瓶頸在io 上。
CPU的使用率也就20%.
客戶實際的資料量應該是上述資料量的70 倍,那要將近27個小時
客戶肯定不會接受的。
以前沒有處理過這么大量的資料匯入資料庫,因為采用posgresql 的 copy 命令
已經是批量匯入了,還有啥方法提高性能,希望高手指點。
uj5u.com熱心網友回復:
上固態SSD盤陣。IO這一塊,機械的對多會話而言性能下降很快。磁頭抖動太耗時。另外,如此多的記錄,即使匯入了,查詢也是麻煩。做磁區了嗎? 感覺是很麻煩的事情。
uj5u.com熱心網友回復:
非常感謝樓主。除了上固態SSD盤陣。有沒有其它方面能優化的。
調整postgresql的引數有幫助嗎。有沒有好的調整引數方法能否分享一下。
其它資料庫大拿們,
能否分享一下這么大資料量的資料匯入postgresql的實戰經驗。
想從代碼層面或引數調整方面入手,看看能不能進一步優化。
多謝大家了。
uj5u.com熱心網友回復:
請教版主用同一個資料庫連接,采用多執行緒使用PostgreSQL 的copy方法讀大資料csv檔案寫入多個表,能實作并發
寫入資料庫嗎
請高手指點
多謝
uj5u.com熱心網友回復:
各位高手為了保證資料一致性,出現插入錯誤,能全部回滾,
因此想多執行緒使用一個連接,呼叫PostgreSQL 的copy 方法讀取多個表csv檔案
不知道使用相同連接,采用多執行緒,PostgreSQL 會實作并發處理嗎
請問PostgreSQL 是否會采用并發處理
多謝各位高手指點
uj5u.com熱心網友回復:
PG服務端一個連接一個行程,在這個連接上都是串行執行命令的,不能一條命令執行一半再執行另一條命令。所以在客戶端上多執行緒共同使用一個連接,也要加鎖做好排隊,所以用多執行緒沒有多大意義.轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7090.html
標籤:PostgreSQL
上一篇:大量客戶端連接mysql執行insert,客戶端運行一段時間后崩潰是什么原因?
下一篇:HBase資料遷移
