客户端服务端两方面分析PostgreSQL的SQL执行时间

本文探讨了从客户端角度看SQL执行时间的构成,分为无结果集或小结果集,以及大量结果集两种情况。通过示例代码解释了SQL在客户端的执行过程,并与SQL Server进行了对比分析。
摘要由CSDN通过智能技术生成

一般我们谈SQL执行时间都有意无意地把它认为是服务端执行SQL的时间。但是,有时候我们更关心从客户端看到的SQL执行总时间。比如客户在和其它数据库做性能对比的时候。

那么这个SQL执行总时间是如何构成的呢?这要分两种情况说明。

1. 无结果集返回或返回小结果集的SQL

    SQL执行总时间 = 客户端驱动处理时间 + 数据库执行SQL时间 + 通信时间

对于慢SQL,数据库执行SQL的时间占了大头,其他两项可以忽略不计。这种情况的优化也就是通常的SQL调优。

对于快SQL,并且客户端和服务端不是同一台机器的情况下,通信时间往往占了大头,其他两项可以忽略不计。而且执行这样的SQL时驱动(pgjdbc,Npgsql,libpq)和数据库间只需要发生一次通信,所以这个通信时间实际上等于两台机器上的通信延迟,也即是从客户端往服务端ping得到的延迟。普通的局域网里,通信延迟在1ms左右,对于异地系统,这个延迟可能是几十毫秒甚至更多。

对于通信延迟占了大头的情况,有一种优化措施,就是把多个SQL用";"拼到一起发给服务端。但是PostgreSQL的扩展查询协议是不支持多语句的,所以在pgjdbc(使用扩展查询协议)里,会把应用传入的多语句再拆开,依次发给服务端。
如果使用的是Npgsql驱动就可以使用这招了,下面是例子
http://user.qzone.qq.com/1842490564
测试程序:

点击(此处)折叠或打开

  1. DbCommand cmd = con.CreateCommand();
  2. cmd.CommandText = "select 1;select 2";
  3. DbDataReader reader = cmd.ExecuteReader();
  4. if(reader.Read())
  5. {
  6.    System.Console.WriteLine(reader.GetValue(0));
  7. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值