分析正在执行的SQL 查看连接信息 设置参数trackactivities为on。 SET trackactivities on; 当此参数为on时,数据库系统才会收集当前活动查询的运行信息。 通过以下SQL就能确认当前的连接用户、连接地址、连接应用、状态、是否等待锁、排队状态以及线程id。 SELECT usename,clientaddr,applicationname,state,waiting,enqueue,pid FROM PGSTATACTIVITY WHERE DATNAME'数据库名称'; 回显如下 usename clientaddr applicationname state waiting enqueue pid ++++++ leo 192.168.0.133 gsql idle f 139666091022080 dbadmin 192.168.0.133 gsql active f 139666212681472 joe 192.168.0.133 idle f 139665671489280 (3 rows) 中止某个会话连接(仅系统管理员有权限) SELECT PGTERMINATEBACKEND(pid); 查看SQL运行信息 获取当前用户执行SQL信息: SELECT usename,state,query FROM PGSTATACTIVITY WHERE DATNAME'数据库名称'; 回显如下,如果state为active,则query列表示当前执行的SQL语句,其他情况则表示为上一个查询语句。 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 usename state query ++ leo idle select from joe.mytable; dbadmin active SELECT usename,state,query FROM PGSTATACTIVITY WHERE DATNAME'gaussdb'; joe idle GRANT SELECT ON TABLE mytable to leo; (3 rows) 查看当前正在运行(非idle)的SQL信息: SELECT datname,usename,query FROM PGSTATACTIVITY WHERE state ! 'idle' ; 查看耗时较长的语句 查看当前运行中的耗时较长的SQL语句 SELECT currenttimestamp querystart as runtime, datname, usename, query FROM PGSTATACTIVITY WHERE state ! 'idle' order by 1 desc; 查询会返回按执行时间长短从大到小排列的查询语句列表。第一条结果就是当前系统中执行时间最长的查询语句。 runtime datname usename query +++ 00:04:47.054958 gaussdb leo insert into mytable1 select generateseries(1, 10000000); 00:00:01.72789 gaussdb dbadmin SELECT currenttimestamp querystart as runtime, datname, usename, query FROM PGSTATACTIVITY WHERE state ! 'idle' order by 1 desc; (2 rows) 若当前系统较为繁忙,可以通过限制currenttimestamp querystart大于某一阈值来查看执行时间超过此阈值的查询语句。 SELECT query from PGSTATACTIVITY WHERE currenttimestamp querystart > 2;