gpt4 book ai didi

vb.net - 从 vb.net 加速 Postgresql 插入性能

转载 作者:行者123 更新时间:2023-11-29 13:01:08 27 4
gpt4 key购买 nike

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

即使在我的本地机器上执行,向数据库表中执行简单的事务性批量插入(没有索引或其他高科技内容,只有普通的旧记录和一个序列列作为主键)也很慢(也就是说,应用程序写入数据到不涉及网络的本地 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 到 1000 次插入。

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

最佳答案

对每个事务进行多次插入是不够的。像这样使用单个多行插入语句:

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 次往返,当您处理数千行时,这可能会极大地消耗性能。

关于vb.net - 从 vb.net 加速 Postgresql 插入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com