2012-09-13 15 views
2

我通過Python做了幾千行的批量插入到表與Postgres的:通過拷貝插入的PostgreSQL從似乎太慢

def bulk_insert_copyfrom(cursor, table_name, field_names, values): 
    if not values: return 

    #print "bulk copy from prepare..." 

    str_vals = "\n".join("\t".join(adapt_to_str(val) for val in cur_vals) for cur_vals in values) 
    strf = StringIO(str_vals) 
    #print "bulk copy from execute..." 
    cursor.copy_from(strf, table_name, columns=tuple(field_names)) 

它需要一些時間來插入16000行,因此我決定一次插入1000來查看會發生什麼情況,並在插入過程中獲得更細緻的視圖。只需要2-3秒就可以在該表格中插入1000行,每行有14列。在我看來,這應該發生得更快。事實上,1000行中的一些行比其他行更快。爲什麼這項手術不會花費更少的時間?我已經定期運行VACUUM ANALYZE,這確實加快了速度,但仍然比我想要的要慢。

+0

爲什麼downvote /票關閉?這是一個真正的問題,因爲它目前是一個問題,我想解決它。請隨時提出具體的問題或澄清,或者提供關於如何使它成爲更好的問題的提示,但這是迄今爲止我所擁有的。我明白「DB TOO SLOW ZOMG」的問題很多,而且措辭往往措辭不佳,但我想學習如何能夠自己解決這些問題。 – Claudiu

+1

你可以在插件上運行EXPLAIN ANALYZE嗎? – ataylor

+0

你有外鍵約束嗎?在2-3秒內1000行也不一定表現糟糕。你可能有一臺速度慢的計算機,CPU /磁盤IO資源問題,或者postgres可能沒有正確配置內存。如果你在2-3秒內說10行,那很糟糕。 –

回答