Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从vb.net提高Postgresql插入性能_Vb.net_Postgresql_Bulkinsert - Fatal编程技术网

从vb.net提高Postgresql插入性能

从vb.net提高Postgresql插入性能,vb.net,postgresql,bulkinsert,Vb.net,Postgresql,Bulkinsert,我有一个Vb.Net应用程序(VS2010)以及Postgres 9.3和PSQLDBC 9.3.4版。我通过ODBCConnection和PostgreSQL odbc驱动程序与我的Postgres数据库交互 在数据库表中执行简单的事务性大容量插入(没有索引或其他高科技内容,只有普通的旧记录和一个串行列作为主键)即使在我的本地机器上执行也很慢(即,应用程序将数据写入本地postgres数据库,而不涉及网络)。 我见过每秒1000-1500行的速度。我的硬件是Win7 64位,Sata 6gbs

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

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

根据Maxim Egorushkin on的帖子,他建议使用:

SQLSetConnectAttr(conn,SQL\u ATTR\u AUTOCOMMIT,reinterpret\u cast(SQL\u AUTOCOMMIT\u OFF),0)

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

我相信这种方法或其他方法应该能够加快速度:显然,用于postgres的非免费PGNP ODBC驱动程序每秒可以进行10秒或1000秒的插入


关于如何禁用自动提交的信息非常受欢迎。

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

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

您可以在一次插入中放入的记录越多,插入的速度就越快。这有多个原因,其中一个原因是到服务器的往返--每个sql语句至少有一个往返,当您执行数千行时,这可能会对性能造成很大的损失。

如果您执行1000个sql插入,然后,您将不会有到数据库的大量往返——如果它在另一台服务器上,那么速度会很慢,尤其是在tcp/ip上。现在,如果您可以使用批量插入sql,那么它会更快一些。。。你是在写SQL,还是能分辨出它是每行插入1条还是批量插入?嗨@Joe,这是批量插入,在一个事务中插入了许多记录,我使用的参数非常有用。。。我明天第一件事就是试试Mike的建议,然后发回这里。我不是指一笔交易中的一堆插入。我的意思是在一个语句中插入一堆内容。插入2行和1条语句的示例:插入电影(代码、标题、did、日期、产品、种类)值('B6717','Tampopo',110','1985-02-10','Comicle'),('HG120','The Dinner Game',140,默认值,'Comicle');完成后只需说“开始事务”和“提交”。注:“交易”一词是可选的。不过,如果使用multi-insert语句,您将获得更好的性能。或者,您可以使用复制命令Thank@Joe,我在事务中尝试了每次插入多个记录,并实现了大约x4的性能提升。你的建议起了很大的作用,消除了瓶颈,非常感谢。