postgresql - PSQL 比 PgAdmin III 慢

标签 postgresql postgresql-9.1

我一直在分析我的应用程序的某些部分,我发现 PgAdmin3 在执行完全相同的脚本时明显快于 psql。 我正在使用 unix 套接字、Ubuntu 12.04 和 Postgresql 9.1 以及 pgadmin3 v1.14。我有一个像下面这样的简单脚本:

BEGIN
INSERT INTO key_value(section,key,value) VALUES('section','key1','value');
....
INSERT INTO key_value(section,key,value) VALUES('section','key10000','value');
COMMIT;

这是表格:

CREATE TABLE key_value
(
  key text NOT NULL,
  value text,
  CONSTRAINT key_value_pkey PRIMARY KEY (section , key )
)
WITH (
  OIDS=FALSE
);

此脚本中有 10000 个插入。在 pgadmin3 中执行它大约需要 0.5 秒,在 psql 中执行它需要 2.5~3.5 秒。两者都包含在事务中,因此应该没有区别。在重新创建表、执行完全真空等操作后结果是一致的。登录 Postgresql 服务器显示 postgres 在 psql 中执行时为每个插入语句执行日志,但在从 pgadmin3 执行时仅执行一个日志。

psql 的执行是通过以下方式完成的:

psql  -n -t -f p.sql -o/dev/null

也测试过

psql  -n -t -1 -f p.sql -o/dev/null

我的问题是为什么 psql 这么慢,为什么我们 postgresql 在一个客户端记录每条语句,而在另一个客户端只记录整个事务,并且是否有 psql 的简单修复。

编辑 澄清一下,我记录的是持续时间而不是声明:

在服务器中使用 psql 执行时我得到以下信息

2012-10-02 12:20:32 CEST LOG:  duration: 0.283 ms
....
2012-10-02 12:20:35 CEST LOG:  duration: 0.285 ms
2012-10-02 12:20:35 CEST LOG:  duration: 0.291 ms
2012-10-02 12:20:35 CEST LOG:  duration: 0.279 ms
2012-10-02 12:20:35 CEST LOG:  duration: 0.284 ms
2012-10-02 12:20:35 CEST LOG:  duration: 0.279 ms
2012-10-02 12:20:35 CEST LOG:  duration: 0.299 ms
....
2012-10-02 12:20:36 CEST LOG:  duration: 5.779 ms

使用 pgadmin3 执行时:

2012-10-02 12:23:21 CEST LOG:  duration: 532.695 ms

psql和pgadmin3中的用户和数据库是一样的

最佳答案

我的提示:pgAdmin 将脚本作为一个多语句执行 - 因此网络(协议(protocol))开销更少。

关于postgresql - PSQL 比 PgAdmin III 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687395/

相关文章:

postgresql - 从 PostgreSQL 数据库中检索评论

python - 在 Azure Web 应用程序中安装 psycopg2

postgresql - 如何让 Npgsql 与 EF4 一起工作?

java - jetty 、JNDI、PostgreSQL : Class not found

postgresql - 如何退出 PostgreSQL 命令行实用程序 : psql

python - 用于 sql 注入(inject)缓解的参数化查询 Postgres

linux - Ubuntu Linux 中内存压缩期间的 Postgres 延迟问题

postgresql - SELECT .. INTO 在 PL/pgSQL 中创建表

postgresql - Postgres 数据类型 NUMERIC 可以存储有符号值吗?

sql - postgres 中的缓慢更新脚本