从vb.net加速Postgresql插入性能

时间:2015-04-21 00:27:33

标签: vb.net postgresql bulkinsert

我有一个Vb.Net应用程序(VS2010)以及Postgres 9.3和psqlodbc版本9.3.4。我通过ODBCConnection和PostgreSQL odbc驱动程序与Postgres数据库进行交互。

将简单的事务性批量插入到数据库表中(没有索引或其他高科技的东西,只是普通的旧记录和一个串行列作为主键),即使在我的本地计算机上进行(即,app写入数据)也很慢到没有网络的本地postgres数据库)。 我已经看到每秒1000-1500行的速度。我的硬件是Win7 64位,Sata 6gbs硬盘,8GB内存。

根据Maxim Egorushkin在How to speed up insertion performance in PostgreSQL的帖子,他建议使用:

SQLSetConnectAttr(conn,SQL_ATTR_AUTOCOMMIT,reinterpret_cast(SQL_AUTOCOMMIT_OFF),0);

防止自动提交。我想知道你如何从.net调用这个子程序,因为它似乎是WIN API的一部分,因此" conn"变量可能是非.Net对象的句柄。

我确信这种方法或其他方法应该能够加快速度:显然,postgres的非自由PGNP ODBC驱动程序每秒可以执行10次10​​00次插入。

非常感谢有关如何禁用自动提交的输入。

1 个答案:

答案 0 :(得分:2)

每次交易多次插入是不够的。 使用单个多行插入语句,如下所示:

INSERT INTO films (code, title, did, date_prod, kind) 
VALUES 
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'), 
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

您可以放入1个插入的记录越多,它就越快。这有多种原因,其中一个原因是往返服务器 - 每个sql语句至少有一次往返,当你做了数千行时,这可能会导致性能下降。