PostgreSQL 的GUI客户端比较多,有开源的,也有商业的。用得比较多的可能是PgAdmin了,有些人可能会用EDB的PEM。但实际上这两个GUI都有一个小问题,在返回较大的结果集时,会非常的慢。例如 :
数据库端创建一个表,插入约30MB数据。
postgres=> create
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其他数据。
大多数类似的应用场景,都是这样来设计的。
【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作
SQLServer 虽然是微软开发的,但是目前已经支持 Windows、Linux、MACOS等。本文详细介绍在 Linux 环境下,如何对 SQL Server 进行安装、升级、回滚、卸载等操作。
数据库深度剖析:Oracle、Microsoft SQL Server、MySQL 三者有何区别?
数据库深度剖析:Oracle、Microsoft SQL Server、MySQL 三者有何区别?
PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
Oracle Database
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
1. Oracle 能在所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持。
2. Oracle 并行服务器通过使组结点共享同簇工作来扩展wi
给大家介绍一款在线ER模型生成的工具,可以针对多种数据库的DDL文件在线生成ER模型图表,支持MySQL、SQLServer、Oracle、PostgreSQL等数据库。主要功能如下:
支持表的创建,同时可以根据数据库的类型不同编辑表结构、字段类型、主键、默认值、索引、备注信息等等
支持视图,触发器,sequence,存储过程,函数的查看及编辑
同步生成SQL供用户操作
访问地址:
数据库ER模型图。
使用EDB的MTK工具,可以完成异构迁移,同构迁移,异平台迁移,版本升级等动作例如:
1、PG, PPAS, oracle, mysql, ms sql, sybase 迁移到 PG, PPAS。
原创C#多数据库组件(SQL+Oracle+MySQL)及用户操作手册|CSFramework.DB.dll
C/S框架网为广大用户原创定制基于C#语言的多数据库组件包及用户操作手册。
PL/SQL Developer工具包和InstantClient连接Oracle 11g数据库
原文:PL/SQL Developer工具包和InstantClient连接Oracle 11g数据库
PLSQL Developer是Oracle数据库开发工具,很牛也很好用,PLSQL Developer功能很强大,可以做为集成调试器,有SQL窗口,命令窗口,对象浏览器和性能优化等功能。
PostgreSQL压测工具之pgbench-tools使用指南
最近一直在思考,到底贡献些什么给PG社区呢? 作为一名初学者,该给大家展现一些什么样的内容呢?曾经想过写一些入门指南,但是google一下发现已经有不少资料,并且好书也不少,那有什么是比较难找到的,没错,那就是实战经验,今天给大家介绍一个利器:pgbench-tools,有此利器,登上人生巅峰,当上CEO,迎娶白富美就不是梦了,废话不多说,请跟我一起来进入这神圣殿堂,享受这个美好的过程。