当前位置:网站首页>Hologres Query管理及超时处理
Hologres Query管理及超时处理
2022-07-04 23:56:00 【胜利的曙光】
通过Hologres的Query管理可以查询SQL的运行信息,设置Query运行的超时时间,更好的管理SQL,防止发生死锁。
查询pg_stat_activity视图信息
select * from pg_stat_activity ;
pg_stat_activity视图的参数说明:
- datid:Hologres后端连接到的数据库的OID。
- datname:Hologres后端连接到的数据库的名称。
- pid:Hologres后端的进程ID。
- usesysid:登录到Hologres后端的用户OID。
- usename:当前连接的用户名。
- application_name:客户端的应用类型。
- client_addr:客户端的IP地址。显示的IP地址可能是被解析过的,不保证一定是源端IP。
- client_hostname:客户端的主机名。
- client_port:客户端的端口。
- backend_start:后台进程开始的时间。
- xact_start:该进程的当前事务被启动的时间。
- 如果没有活动事务,则为空。
- 如果当前查询是该进程的第一个事务,这一列等于query_start。
- query_start:当前活动查询开始的时间,如果当前连接状态不是active,取值为上一个查询开始的时间。
- state_change:连接的状态(state)上一次被改变的时间。
- wait_event_type:后端正在等待的事件类型,如果不存在则为NULL。可能的取值有:
- LWLock:后端正在等待一个轻量级锁。
- Lock:后端正在等待一个重量级锁。
wait_event将标识等待的锁的类型。 - BufferPin:服务器进程正在等待访问一个数据缓冲区,而此时没有其他进程正在检查该缓冲区。
- Activity:服务器进程处于闲置状态。被用于在其主处理循环中等待活动的系统进程。
- Extension:服务器进程正在一个扩展模块中等待活动。
- Client:服务器进程正在等待来自用户应用的某种查询,并且该服务器预期某种与其内部处理无关的事情发生。
- PC:服务器进程正在等待来自服务器中另一个进程的某种活动。
- Timeout:服务器进程正在等待一次超时发生。
- IO:服务器进程正在等待一次IO完成。
- wait_event:如果后端当前正在等待,则是等待事件的名称,否则为 NULL。
- state:表示连接的状态。常见的状态如下:
- active:活跃。
- idle:空闲。
- idle in transaction:长事务中的空闲状态。
- idle in transaction(Aborted):已失败事务中的空闲状态。
- \N: 状态为空,表示非用户连接的进程,一般属于系统后台的维护进程,可以忽略。
- backend_xid:Hologres后端的顶层事务标识符。
- backend_xmin:当前后端的xmin范围。
- query:后端最近执行的查询。如果state为
active,将会显示当前正在执行的查询。在所有其他状态下,显示上一个被执行的查询。 - backend_type:当前后端的类型。可能的类型为autovacuum launcher、autovacuum worker、logical replication launcher、logical replication worker、parallel worker、background writer、client backend、checkpointer、startup、walreceiver、walsender以及 walwriter。除此之外还包括后端的执行组件,例如PQE等。
HoloWeb可视化活跃Query管理
可以通过HoloWeb可视化查看活跃Query,并进行管理。
查看SQL运行信息
Superuser可以查看所有用户的SQL运行信息,RAM用户只能查看自己的SQL运行信息。
1.可以通过如下语句查看当前实例内用户的SQL运行信息。
SELECT datname::text,usename,query,pid::text,state FROM pg_stat_activity;
2.可以执行如下语句查看当前正在运行的SQL信息。
SELECT datname::text,usename,query,pid::text,state
FROM pg_stat_activity
WHERE state != 'idle' ;
3.可以执行以下语句查看当前实例正在运行且耗时较长的SQL信息。
SELECT current_timestamp - query_start as runtime, datname::text, usename, query, pid::text
FROM pg_stat_activity
WHERE state != 'idle'
order by 1 desc;
4.终止Query
如果当前存在不符合预期的Query,可以根据实际情况通过如下命令进行终止。
取消当前连接上的Query。
select pg_cancel_backend(<pid>);
批量取消Query。
SELECT pg_cancel_backend(pid)
,query
,datname::text
,usename
,application_name
,client_addr
,client_port
,backend_start
,state
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND application_name != 'hologres'
AND usename != 'holo_admin'
AND query not like '%pg_cancel_backend%';
修改活跃Query超时时间
-- session 级别修改(要修改超时时间的SQL语句一起执行方可生效)
set statement_timeout = <time>;
-- db 级别修改
alter database dbname set statement_timeout=<time>;
time超时时间取值范围为0~2147483647ms,单位默认为ms(当time后加单位时需要使用单引号,否则会报错)。当前默认超时时间为8小时。
示例如下:
设置超时时间为10min,其中具体时间带单位,10min需要整体添加单引号。
set statement_timeout = '10min' ;
select * from tablename;
设置超时时间为5000ms。
set statement_timeout = 5000 ;
select * from tablename;
设置db超时时间为10min。
alter database dbname set statement_timeout='10min';
查询设置是否生效:
show statement_timeout;
修改空闲Query超时时间
参数idle_in_transaction_session_timeout描述了事务进入idle状态后的超时行为,如果不设置参数值,默认不会做事务超时的释放,容易发生事务不释放,导致查询被锁死的情况。
当Query执行产生死锁时,需要设置超时时间。例如如下代码,未执行commit,开启了一个事务,但是没有提交,会造成事务泄漏,进而引发数据库级别的死锁,影响服务正常使用。
begin;
select * from t;
当出现这种死锁场景时,可以通过设置idle_in_transaction_session_timeout超时时间来解决。当一个带事务的空闲连接超过idle_in_transaction_session_timeout设置的时间还未提交或者回滚事务,系统将自动根据超时时间回滚事务,并关闭连接。
--session修改空闲事务超时时间
set idle_in_transaction_session_timeout=<time>;
--DB级别修改空闲事务超时时间
alter database db_name set idle_in_transaction_session_timeout=<time>;
time超时时间取值范围为0~2147483647ms,单位默认为ms(当time后加单位时需要使用单引号,否则会报错)。在Hologres V0.10及以下版本,默认值为0,即不会自动清理;在Hologres V1.1版本,默认值为10分钟,超过10分钟后将会回滚事务。
不建议超时时间设置过短,如果过短容易错误回滚正在使用中的事务。
设置超时时间为300000ms。
--session修改空闲事务超时时间
set idle_in_transaction_session_timeout=300000;
--DB级别修改空闲事务超时时间
alter database db_name set idle_in_transaction_session_timeout=300000;
查询设置是否生效:
show idle_in_transaction_session_timeout;
参考文献:https://help.aliyun.com/document_detail/263548.html
边栏推荐
- Hong Kong Jewelry tycoon, 2.2 billion "bargain hunting" Giordano
- 图解网络:什么是网关负载均衡协议GLBP?
- Solution record of jamming when using CAD to move bricks in high configuration notebook
- Robot reinforcement learning synergies between pushing and grassing with self supervised DRL (2018)
- Is the account opening link of Huatai Securities with low commission safe?
- Using fast parsing intranet penetration to realize zero cost self built website
- 打新债开户注册安全吗?有没有风险的?靠谱吗?
- Advanced template
- ECCV 2022 | 腾讯优图提出DisCo:拯救小模型在自监督学习中的效果
- 公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
猜你喜欢

【kotlin】第三天

基于三维gis平台的消防系统运用

What is the difference between port mapping and port forwarding

Illustrated network: what is gateway load balancing protocol GLBP?

微服务(Microservice)那点事儿

「运维有小邓」域密码策略强化器

JS how to realize array to tree

取得PMP證書需要多長時間?

Power operation and maintenance cloud platform: open the new mode of "unattended and few people on duty" of power system

MIT-6.824-lab4B-2022(万字思路讲解-代码构建)
随机推荐
用快解析内网穿透实现零成本自建网站
高配笔记本使用CAD搬砖时卡死解决记录
After Microsoft disables the IE browser, open the IE browser to flash back the solution
Why does infographic help your SEO
Advanced template
ICML 2022 | 3dlinker: e (3) equal variation self encoder for molecular link design
【kotlin】第三天
js如何实现数组转树
Ap8022 switching power supply small household appliances ACDC chip offline switching power supply IC
快解析——好用的内网安全软件
[ODX studio edit PDX] -0.3- how to delete / modify inherited elements in variant variants
How long does it take to obtain a PMP certificate?
香港珠宝大亨,22亿“抄底”佐丹奴
青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区
Mysql database backup and recovery -- mysqldump command
实战模拟│JWT 登录认证
他做国外LEAD,用了一年时间,把所有房贷都还清了
Actual combat simulation │ JWT login authentication
业务场景功能的继续修改
[JS] - [sort related] - Notes