2014-01-30 250 views
1

這樣慢嗎? 我有4列 ID姓教練市postgresql數據庫插入時間太長

我有一個附加數據按鈕時,增加了300行,每列中的每個含有數據的表,所以總共1200個記錄。

物理添加數據只需要4分鐘左右(即從我點擊按鈕到顯示消息框完成時)。

我是ADSL2 +在澳大利亞,速度測試緊接在該完成的,並得到 28ms平 14.12Mbps下載 0.49Mbps上傳

我知道澳大利亞的互聯網是一個笑話,但是這似乎很慢!

這是因爲我的網絡上傳速度?

+1

你是在交易中做這些插入嗎? (設置自動提交關閉) – nurettin

+0

不,我不是,只是一個簡單的重複插入 –

+0

會對速度有很大的影響嗎? –

回答

1

它可能有你插入到表索引。請記住,執行插入操作時,每個索引都需要更新。

你可以試試:

select * from pg_indexes where tablename = 'your_table'; 

列出所有索引。

此外,打開/關閉每個插件的連接會降低性能。你考慮過單插入SQL查詢嗎?

INSERT INTO "table" (col1, col2, col3) 
    VALUES (1, 2, 3) , (3, 4, 5) , (6, 7, 8); 
1

在單個交易中進行單獨插入是您將要獲得的最糟糕的表現。每插入一行你至少會發生一次網絡往返行程,而在300行將會非常顯着 - 這大約只花費了10秒的時間,如果你只做一次往返行程,並且如果您的28毫秒延遲適用於較大的數據包。這也沒有考慮到COMMIT的時間。

如果你的數據庫驅動程序發送單獨BEGINCOMMIT命令,這是花費在單獨的網絡延遲的另一個20S,300 BEGIN秒和300 COMMIT秒。

在單個事務中以塊爲單位執行多值插入。或者更好的是,使用COPY來傳輸數據。這樣可以減少往返次數,減少網絡延遲的影響,並減少提交成本的影響。

有關更多信息和有用的鏈接,請參閱How to speed up insertion performance in PostgreSQL

你應該可以在幾百毫秒內完成這樣的批處理。