TSO 时间戳转换为自然时间

【是否原创】是
【首发渠道】TiDB 社区
【目录】
【正文】

今天分析一个慢查询 SQL,发现 SQL 实际执行时间是 TSO 时间,为了查看这些 SQL 是否是短时间内调用产生,需要知晓实际执行时间。于是去论坛搜索了下,并未找到能够解决问题的文档。于是写篇短文,分享下。

如下,是慢查询示例:

可以看到 txn_start_ts 字段是 TSO 时间戳。如何转换为自然时间呢?

如上,使用 pd-ctl 这个工具,在交互式命令行下使用 tso 子命令就可以解决。

命令: pd-ctl -i -u <PD_ADDR>
-u 指定 PD 的地址
可以参考: https://docs.pingcap.com/zh/tidb/v4.0/pd-control#tso

如果大家还有更优的方法,欢迎指出,共同学习,感谢!

:+1:如果能吧慢查询语句示例贴出来就更完美了

写的很 low,而且适用性不强,勉强发出来吧。

SELECT
	time '执行完成时间', txn_start_ts '执行开始时间', `user` '执行用户', conn_id '连接ID', query_time '执行自然耗时', db '执行数据库', `query` '执行SQL'
	-- DISTINCT txn_start_ts
FROM
	information_schema.slow_query 
WHERE
	time >= '2021-06-04 08:55:00' 
	AND time <= '2021-06-04 09:10:00' 
	AND is_internal = FALSE 
	AND db = 'xxxxxx' 
	AND query_time > 10
	AND ( query LIKE 'select \* from ( SELECT  i.actual_execute_provider_name%' or query LIKE '\"select * from (\\nSELECT a.actual_execute_provider_name%')
	ORDER BY txn_start_ts
	;

因为我从 dashboard 上查到这个 SQL 短时间内执行了数十次,而且耗费资源很大,于是想知道是正常操作导致,还是其他情况,因此直接上了 like 子句。

我还以为用的大佬的语句呢,嘻嘻~

果断收藏了:smiley::pray:

:handshake:独乐乐不如众乐乐~嘻嘻~