這樣慢嗎? 我有4列 ID姓教練市postgresql數據庫插入時間太長
我有一個附加數據按鈕時,增加了300行,每列中的每個含有數據的表,所以總共1200個記錄。
物理添加數據只需要4分鐘左右(即從我點擊按鈕到顯示消息框完成時)。
我是ADSL2 +在澳大利亞,速度測試緊接在該完成的,並得到 28ms平 14.12Mbps下載 0.49Mbps上傳
我知道澳大利亞的互聯網是一個笑話,但是這似乎很慢!
這是因爲我的網絡上傳速度?
這樣慢嗎? 我有4列 ID姓教練市postgresql數據庫插入時間太長
我有一個附加數據按鈕時,增加了300行,每列中的每個含有數據的表,所以總共1200個記錄。
物理添加數據只需要4分鐘左右(即從我點擊按鈕到顯示消息框完成時)。
我是ADSL2 +在澳大利亞,速度測試緊接在該完成的,並得到 28ms平 14.12Mbps下載 0.49Mbps上傳
我知道澳大利亞的互聯網是一個笑話,但是這似乎很慢!
這是因爲我的網絡上傳速度?
通過減少您正在使用的插入語句的數量,您可能會受益最多,因爲當您減少請求和響應的次數時,ping時間變得不太重要。
在這裏看到的例子:http://www.postgresql.org/docs/9.0/static/dml-insert.html
它可能有你插入到表索引。請記住,執行插入操作時,每個索引都需要更新。
你可以試試:
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);
在單個交易中進行單獨插入是您將要獲得的最糟糕的表現。每插入一行你至少會發生一次網絡往返行程,而在300行將會非常顯着 - 這大約只花費了10秒的時間,如果你只做一次往返行程,並且如果您的28毫秒延遲適用於較大的數據包。這也沒有考慮到COMMIT
的時間。
如果你的數據庫驅動程序發送單獨BEGIN
和COMMIT
命令,這是花費在單獨的網絡延遲的另一個20S,300 BEGIN
秒和300 COMMIT
秒。
在單個事務中以塊爲單位執行多值插入。或者更好的是,使用COPY
來傳輸數據。這樣可以減少往返次數,減少網絡延遲的影響,並減少提交成本的影響。
有關更多信息和有用的鏈接,請參閱How to speed up insertion performance in PostgreSQL。
你應該可以在幾百毫秒內完成這樣的批處理。
你是在交易中做這些插入嗎? (設置自動提交關閉) – nurettin
不,我不是,只是一個簡單的重複插入 –
會對速度有很大的影響嗎? –