摘要:truncate执行慢,耗时长达几十到几百秒,这可怎么破?
本文分享自华为云社区《GaussDB(DWS)运维 -- truncate慢》,作者: 譡里个檔。
【现象】truncate执行慢,耗时长达几十到几百秒
【根因】truncate表被查询表的DML语句阻塞
【方案】建议truncate表和查询表动作的依赖,保证二者串行执行
【定位】假如语句 truncate dwr_tdc_dim_inv_country_reg_d 执行时间过久,且执行的truncate语句的执行开始时间是:2022-12-07 08:30:12
执行结束时间是:2022-12-07 08:40:12
那么可以使用如下SQL查询到这段时间查询到truncate的目标表的查询语句
注:这个语句要在postgres库里面执行
SELECT
start_time, -- SQL执行开始时间
finish_time, -- SQL执行结束时间
duratuin, -- SQL执行时间,单位ms
query
FROM pgxc_wlm_session_info
WHERE start_time >= '2022-12-07 08:30:12' + interval '20 min' -- 开始时间比truncate开始时间提前20min以内
AND finish_time <= '2022-12-07 08:30:12' + interval '1 min' -- 结束时间跟truncate结束时间基本一致
AND query like '%dwr_tdc_dim_inv_country_reg_d%' -- 查询到了truncate的表
输出的query就是影响到truncate语句的语句。一般finish_time比truncate语句执行时间结束时间略小的语句就是阻塞truncate的语句