数据仓库服务 GaussDB(DWS)-执行SQL时出现表死锁,提示LOCK_WAIT_TIMEOUT锁等待超时:处理方法

时间:2025-02-12 15:02:21

处理方法

  1. 8.1.x及以上集群版本,通过pgxc_lock_conflicts视图查看锁冲突情况。
    1
    SELECT * FROM pgxc_lock_conflicts;
    8.0.x及之前集群版本,执行以下SQL查询查看是否有阻塞的SQL语句。
     1 2 3 4 5 6 7 8 91011
    SELECT w.query as waiting_query,w.pid as w_pid,w.usename as w_user,l.query as locking_query,l.pid as l_pid,l.usename as l_user,n.nspname || '.' || c.relname as tablenamefrom pg_stat_activity w join pg_locks l1 on w.pid = l1.pidand not l1.granted join pg_locks l2 on l1.relation = l2.relationand l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_class c on c.oid = l1.relation join pg_namespace n on n.oid=c.relnamespacewhere w.waiting;
  2. 查询到阻塞的表及模式信息后,请根据实际查询语句ID结束会话:
    1
    SELECT pgxc_terminate_query(7233906901463861);

    1
    EXECUTE DIRECT ON(cn_5002) 'SELECT pg_terminate_backend(139666091022080)';
  3. 这种情况一般是因为业务调度不太合理,建议合理安排各个业务的调度时间。
  4. 还可以通过设置GUC参数lockwait_timeout,控制单个锁的最长等待时间,即单个锁的等待超时时间。

    lockwait_timeout单位为毫秒(ms),默认值为20分钟。

    lockwait_timeout参数属于SUSET类型参数,请参考设置GUC参数中对应的设置方法进行设置。

support.huaweicloud.com/trouble-dws/dws_09_0018.html