从 vb.net 提高 Postgresql 插入性能

Speed up Postgresql insert performance from vb.net

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

在数据库中执行简单的事务性批量插入 table(没有索引或其他高科技内容,只有普通的旧记录和一个序列列作为主键)即使在我的本地计算机上执行时也很慢 (也就是说,应用程序将数据写入本地 postgres 数据库,不涉及网络)。 我见过每秒 1000-1500 行的速度。我的硬件是Win7 64位,一个Sata 6gbs硬盘,8GB内存。

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

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

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

我相信这种方法或其他一些方法应该能够加快速度:显然 postgres 的非免费 PGNP ODBC 驱动程序每秒可以执行 10 次插入操作。

非常感谢您提供有关如何禁用自动提交的意见。

对每个事务进行多次插入是不够的。 使用单个多行插入语句,如下所示:

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 语句至少有 1 次往返行程,当您处理数千行时,这可能会耗尽性能.