VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

查询当前运行时间长的语句

问题现象

系统中部分查询语句运行时间过长。

原因分析

  • 查询语句较为复杂,需要长时间运行。
  • 查询语句阻塞。

处理办法

1、以安装Vastbase的操作系统用户登录主机。

2、使用如下命令连接数据库。

vsql -d vastbase -p 5432

vastbase为需要连接的数据库名称,5432为端口号。

3、创建并进入兼容MySQL的库db_mysql。

CREATE DATABASE db_mysql DBCOMPATIBILITY 'B';
\c db_mysql 

因本示例所用函数timestampdiff仅在兼容模式为MySQL时支持,所以需要使用兼容MySQL的库db_mysql。在db_mysql中通过本示例方法可查询全局执行中语句。

4、查看系统中长时间运行的查询语句。

SELECT timestampdiff(minutes, query_start, current_timestamp) AS runtime, datname, usename, query FROM pg_stat_activity WHERE state != 'idle' ORDER BY 1 desc;

查询会返回按执行时间长短从大到小排列的查询语句列表。第一条结果就是当前系统中执行时间长的查询语句。

如果当前系统较为繁忙,可以使用timestampdiff函数通过限制current_timestamp和query_start大于某一阈值查看执行时间超过此阈值的查询语句。timestampdiff的第一个参数为时间差单位。例如,执行超过2分钟的查询语句可以通过如下语句查询。

SELECT query FROM pg_stat_activity WHERE timestampdiff(minutes, query_start, current_timestamp) > 2;

5、分析长时间运行的查询语句状态。