postgresql 如何支持10億級別的資料??
uj5u.com熱心網友回復:
這個單表感覺都可以支持,如果存盤量上不大(比如欄位少,欄位短)可以試一下磁區表,但是不是很好用
uj5u.com熱心網友回復:
我有考慮把postgresql換成clickhouse,但是clickhouse從來沒用過,不知道里面會有多大的坑。uj5u.com熱心網友回復:
可以支持,用磁區即可。主要是控制索引的規模。如果比較懶,可以單表,用部分索引來分割,比如按范圍做索引。
磁區參照:
https://blog.csdn.net/goldenhawking/article/category/1222775
uj5u.com熱心網友回復:
這個博客里的磁區,雖然測驗用了千萬條,但是應該和10億是類似的。因為插入10億潭訓要很久,所以沒有放上去。我在生產環境中存放過大概6億條記錄,400多GB,沒有太大問題。磁區、非關系欄位參考這個文章。磁區時,CHECK條件要寫好,可以直接根據條件避免查詢沒必要的子表。
uj5u.com熱心網友回復:
postgresql接近oracel的性能,基本上沒問題uj5u.com熱心網友回復:
這要看你怎么用這10億資料。uj5u.com熱心網友回復:
我現在是插入2億以上的資料 花了20多分鐘,希望提高寫入資料庫性能有啥提高性能的辦法
多謝
uj5u.com熱心網友回復:
寫入資料庫的性能有好多影響因素,大概幫著總結幾句。如果有錢,愿意投入10-20萬,那直接轉到最后(0)。1、如果是備份整體一波匯入(如pgRestore),那就是COPY最快。匯入完了,再建立索引和各種約束。
2、那種表單可以整體洗掉、改名的,參考1. 先建立臨時表,匯入完畢后,老的改_OLD,新的改為正確的名字。
3、大部分情況是無法如此理想的,面對的都是熱匯入(結構、約束、參照完整性、名稱都不能修改)。一般遵循4-6.
4、匯入前調整引數postgresql.conf
(1)匯入前關閉auto_vacuum選項。
(2)調節wal的性能,checkpoint 放寬,往大了整,共享、maintain記憶體設大。如果是32G的服務器,共享設為1G,maintain 1G即可。
(3)如果你的匯入中,有很多觸發警告的操作,把各種日志的級別設為fatal以上。這樣防止產生大量文本日志。
5、匯入時,一般都是一個工具完成的。比如C++Qt、python,等等。工具開發的好不好,就很關鍵。以Qt為例子
(4)對于需要查詢后按需匯入的情況,要在資料庫連接打開后,盡快設定為“前向”forwordOnly,首先降低查詢的代價。
(5)把任務囤積起來,用事務切割為10萬條一個單位,而后呼叫QSqlQuery::execBatch功能整體的執行插入。插入后commit。
6、如果做了上述作業,還是很慢,那就請進行有針對性的分析式優化:
(6)觀察網路使用率。若網路使用率>=90%, 請在資料庫本地匯入,而不是基于以太網。以太網會帶來很多開銷。
(7)觀察服務器當前匯入的行程(postgres)的CPU,如果CPU達不到單核全滿,則說明磁盤爆了。請使用固態或者萬轉盤陣. 這種情況常出現在訪問量密集,單記錄簡單的情況。
(8)觀察服務器當前匯入的行程(postgres)的CPU,如果CPU單核全滿,而磁盤不滿,說明計算力不夠。此時,插入時開N個會話一起干,直到CPU與磁盤達到均衡(一般是CPU單核會話50%,磁盤也略有擁塞)。這種情況比較少,比如你的記錄有很多陣列、JSON\GIS之類的復雜型別, 且觸發器里做計算時常見。
。。。做到這里基本就差不多了……話鋒一轉:
(0)最終,錢能夠顯著提高插入的速率。記住:有錢就可以韌性,買8~10塊SSD做成盤陣,CPU上5-6萬一塊的至強,而后多會話并行插入,1-8都不用看了。
uj5u.com熱心網友回復:
https://blog.csdn.net/goldenhawking/article/details/107583951
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/11843.html
標籤:PostgreSQL
上一篇:MySQL InnoDB Cluster把所有節點全部kill后,無法啟動
下一篇:postgresql記憶體
