触发事件_从等待事件VACUUM ANALYZE tab (to prevent wraparound)看vacuum触发条件

本文探讨了PostgreSQL中autovacuum的等待事件,特别是当它因防止wraparound而运行时如何阻塞DDL操作。分析了autovacuum的触发条件,包括死元组数量和事务最大年龄,并提供了检查和调整相关配置的方法。
摘要由CSDN通过智能技术生成
阅读使人充实,讨论使人敏捷,写作使人精确。

141f71d93974908a5f8bf2c81e4545a7.png 案例场景模拟

l 版本:使用PostgreSQL-12.0

akendb=# select version();                                                version                                                 -------------------------------------------------------------------------------------------------------- PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-5), 64-bit+(1 row)akendb=#

l 现象:drop语句挂起

akendb=# drop table tab_aken;   ---被长时间挂起,truncate也会被挂起
141f71d93974908a5f8bf2c81e4545a7.png   什么原因阻塞了DDL

由于关系型数据库锁机制的实现,上述drop table操作长期挂起,基本其他的DDL同样也会被挂起,比如下面的create index、truncate table等。

l 执行truncate table,挂起

akendb=# truncate table tab_aken;   ---被长时间挂起,truncate也会被挂起^CCancel request sentERROR:  canceling statement due to user requestakendb=#

l 执行create index,挂起

akendb=# create index idx_test on public.tab_aken(id) where id=837214094;^CCancel request sentERROR:  canceling statement due to user requestakendb=#

l  等待事件查看

语句drop table由于拿不到relation lock资源,被pid=16878的会话进程阻塞,而holder之所以长期阻塞后面的ddl,是因为它正处于以下等待事件中:

autovacuum: VACUUM ANALYZE public.tab_aken (to prevent wraparound)

akendb=# select pid waiter_pid,pg_blocking_pids(pid) holder_pid,backend_type,state,wait_event_type,wait_event,query from pg_stat_activity where state <> 'idle' and pid <> pg_backend_pid(); waiter_pid | holder_pid |   backend_type    | state  | wait_event_type |  wait_event   |                
手动vacuumanalyze是用来优化数据库性能的操作。手动vacuum用于回收已删除行占用的空间,以减少数据库文件的大小。而手动analyze则用于更新数据库的统计信息,以便查询优化器能够更好地选择执行计划。 在引用\[1\]中提到了一些与手动vacuumanalyze相关的信息,比如上次手动vacuumanalyze的时间,以及它们的总计次数。这些信息可以帮助我们了解数据库的维护情况。 另外,在引用\[2\]中提到了一些与自动vacuum和自动analyze相关的参数。autovacuum_analyze_threshold参数用于设置自动分析的阈值,当表中的行数超过该阈值时,自动分析将被触发。而autovacuum_analyze_scale_factor参数用于设置自动分析的比例因子,它与表的大小成比例,用于确定自动分析的触发时机。 总的来说,手动vacuumanalyze是用来优化数据库性能的重要操作。通过合理地设置自动vacuum和自动analyze的参数,以及根据需要进行手动vacuumanalyze,可以保持数据库的健康状态,并提高查询性能。 #### 引用[.reference_title] - *1* [PostgreSQL10基础(6)AnalyzeVacuum](https://blog.csdn.net/supermancoke/article/details/104612822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [PostgreSQL VACUUMANALYZE 最佳实践技巧](https://blog.csdn.net/u012551524/article/details/120548763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值