PostgreSQL IDE pgadmin , edb postgres enterprise manager 查询慢的问题分析

PostgreSQL 的GUI客户端比较多,有开源的,也有商业的。
用得比较多的可能是PgAdmin了,有些人可能会用EDB的PEM。
但实际上这两个GUI都有一个小问题,在返回较大的结果集时,会非常的慢。
例如 :
数据库端创建一个表,插入约30MB数据。

postgres=> create table test (like pg_class);
CREATE TABLE
postgres=> insert into test select * from pg_class;
INSERT 0 301
postgres=> insert into test select * from test;
INSERT 0 301
postgres=> insert into test select * from test;
INSERT 0 602
...
postgres=> insert into test select * from test;
INSERT 0 77056
postgres=> \dt+
                          List of relations
 Schema |      Name       | Type  | Owner  |    Size    | Description
--------+-----------------+-------+--------+------------+-------------
 public | test            | table | digoal | 29 MB      |
(3 rows)

使用EDB的PEM或者pgadmin连接到数据库 :
在GUI中执行 :

select * from test;

耗时20秒。

换个执行语句:

copy (select * from test) to stdout;
或者
copy test to stdout;

3秒返回。
copy与select * 查询的数据量一样多,而且都是全表扫描,但是时间却相差10几秒。

原因排查
在pgadmin客户端的机器上,观察到一个现象 :
执行select * from test;时,网络使用率不高,持续时间长。
网络传输结束后,CPU马上飙高,估计pgadmin在处理数据,很长一段时间后,才开始展示结果。


而更换为

copy (select * from test) to stdout;
或者
copy test to stdout;

后,执行非常迅速,而且展示也非常快,可以看到网络使用率很高,出现了一个尖峰。

将GUI客户端更换为heidisql后,执行 select * from test; 执行速度很快,与COPY相当。
从网络使用率来看,也出现了一个尖峰,数据很快就传完了。

使用 PostgreSQL 客户端 psql 命令执行select * from test,速度也和heidisql一样,很快。

对比以上几种情况,说明pgadmin和pem在处理 select 时,效果并不理想,如果要返回大量的结果集,请慎用。
如果使用PEM或者pgadmin要返回大量结果集,建议使用游标来返回:
例子:

begin;
declare c1 cursor for select * from test;
fetch 100 from c1;  -- 这里不断的LOOP.

网络流量对比图 :

从左往右数
第1个尖峰,heidisql中执行select from test;
第2个尖峰,pgadmin中执行copy (select
from test) to stdout;
第3个尖峰,pgadmin中执行copy test to stdout;
第4个尖峰,psql中执行select from test;
说明 select
from test 的网络传输流量确实比copy的更大一些。
heidisql不支持 copy命令.
如果你用的是windows平台,并且遇到了与之类似的问题,建议排查一下客户端程序的代码,从程序层面来解决这个问题。
这个问题我也会反馈给pgadmin和EDB,看看他们怎么解决。

最后要给应用开发人员的一个小建议 :
查询大结果集,给用户展示数据的SQL,建议修改为用游标打开,一次FETCH少量数据, 拿到数据马上就可以向用户展示,后台可以根据策略选择是否再继续fetch剩余的数据。
这样做的好处是用户体验更好,同时有可能可以大大减少数据库的网络开销和CPU开销(因为用户并不一定要查询所有数据)如果用户关闭窗口,可以不再fetch其他数据。
大多数类似的应用场景,都是这样来设计的。

时间: 2025-01-30 18:08:22

PostgreSQL IDE pgadmin , edb postgres enterprise manager 查询慢的问题分析的相关文章

EDB Postgres MTK 使用小记

EDB Postgres Sever Migration Toolkit 是PPAS自带的一款数据迁移工具.使用MTK可以方便的把目标数据库(ORACLE/MySQL/Sybase/MS SQL Sever)的数据对象和数据内容迁移到 PPAS or PostgreSQL . 安装 MTK 软件 安装方式: 图像化 or command-line 测试案例为 text mode [root@Opython mtk]# ./edb-migrationtoolkit-51.0.0-1-linux-x

Enterprise Manager 10 g

enterprise Oracle Database 10 g 内幕 Oracle Database 10 g : 为 DBA 提供的最佳前 20 位的特性(十三) 作者 Arup Nanda 来源: OTN 第 13 周 Enterprise Manager 10 g 最后,讨论一种管理和运用 Oracle 的一站式工具 - 无论对于初学者还是专家 您在日常的 DBA 相关活动中使用什么工具?我最近在一个用户群会议中提出了这个问题. 答案依 DBA 的工作经验而有所不同.大部分高级管理员偏爱简

冷备份/还原Oracle数据库 以及 Oracle 10g的Enterprise Manager登陆问题

enterprise|oracle|备份|数据|数据库|问题 冷备份/还原Oracle数据库By kayuk 1.备份数据库 备份?oradata\DB2(数据库DB2所存储的文件夹)中的所有DBF.CTL.LOG文件. 备份?database中的initDB2.ora文件.(数据库??备份文件init??.ora) 2.恢复数据库过程 a.删除原数据库 connect sys/ora123 as sysdbastartup mount restrictdrop databaseshutdown

chapter3:Oracle Enterprise Manager 入门

enterprise|oracle 第 3 章:Oracle Enterprise Manager 入门 返回课程列表 目的 本章向您介绍 Oracle Enterprise Manager Database Control.当您安装 Oracle 软件时,Oracle Universal Installer 将安装 Oracle Enterprise Manager Database Control.Enterprise Manager Database Control 提供了一个基于 Web

浅谈 IBM Rational Quality Manager 查询

Rational Quality Manager(RQM)工作项概述 IBM Rational Quality Manager 是 IBM Rational    系列软件中非常重要的一款,使用它进行日常项目管理的项目团队遍布全球,特别被广泛应用于软件测试项目生命周期的管理.在软件测试项目生命周期的每个阶段会建立不同的测试计划(test    plan). 测试实例(test case).测试脚本(test script)以及测试记录执行(test case execution record).

探索ORACLE之11g DataGuard_04 Oracle EnterPrise Manager OEM部署

探索ORACLE之11g DataGuard_04 Oracle EnterPrise Manager OEM部署 作者:吴伟龙 我们可以看到EM这个时候无法起来,需要重新配置: emctl startup console Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name. 重新配置Oracle EnterPrise Manager [oracle@

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析   低成本的Blob存储是一个强大的,通用的Hadoop兼容Azure存储解决方案无缝集成HDInsight.通过Hadoop分布式文件系统(HDFS)接口,完整的组件集合在HDInsight可以 在Blob存储数据的直接操作.在本教程中,学习如何建立一个容器的Blob存储,然后在里面处理的数据. 在BLOB存储中存储的数据能够用于计算的HDInsight集群被安全地删除,而不会丢失用户数据. 注意: 该ASV://语法中不

sql 查询慢的原因分析_MsSql

查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询

sql 查询慢的原因分析

查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询