LightDB/PostgreSQL 为什么SQL执行时长是浮点数

在LightDB中可以通过 select * from pg_stat_statements查询语句的执行情况,具体可以看官网文档

lightdb@postgres=# select * from pg_stat_statements limit 1;
-[ RECORD 1 ]-------+---------------------------------------------------------------------------------
userid              | 10
dbid                | 1
queryid             | 3237419449176738941
query               | CREATE TEXT SEARCH CONFIGURATION lt_catalog.zhcfg (PARSER = lt_catalog.zhparser)
plans               | 0
total_plan_time     | 0
min_plan_time       | 0
max_plan_time       | 0
mean_plan_time      | 0
stddev_plan_time    | 0
calls               | 1
total_exec_time     | 1.640401
min_exec_time       | 1.640401
max_exec_time       | 1.640401
mean_exec_time      | 1.640401
stddev_exec_time    | 0
rows                | 0
shared_blks_hit     | 118
shared_blks_read    | 9
shared_blks_dirtied | 4
shared_blks_written | 0
local_blks_hit      | 0
local_blks_read     | 0
local_blks_dirtied  | 0
local_blks_written  | 0
temp_blks_read      | 0
temp_blks_written   | 0
blk_read_time       | 0.286
blk_write_time      | 0
wal_records         | 12
wal_fpi             | 3
wal_bytes           | 4636

从上面执行结果看到,执行时长统计字段是浮点数, 时间单位是毫秒,并且后面有六位小数。

total_exec_time     | 1.640401
min_exec_time       | 1.640401
max_exec_time       | 1.640401
mean_exec_time      | 1.640401

从代码中,我们看实现方法,LightDB中的时间类型是instr_time的实现和平台相关,在Centos7 x86下使用struct timespec实现

// timespec 
#include <time.h>
typedef struct timespec instr_time;

struct timespec
{
    time_t tv_sec;  // 秒
    long   tv_nsec; // 纳秒
};

timespec有两个字段组成,秒和纳秒,LightDB在计算时长后,通过下面方法转换成毫秒

#define INSTR_TIME_GET_MILLISEC(t) \
	(((double) (t).tv_sec * 1000.0) + ((double) (t).tv_nsec) / 1000000.0)

得到的毫秒级时长就是有6位小数,这6位小数表示纳秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值