GaussDB SQL执行很慢,性能低,有时长时间运行未结束

1、问题现象

SQL执行很慢,性能低,有时长时间运行未结束。

2、原因分析

SQL运行慢,主要可以从以下几方面进行分析:

1、使用EXPLAIN命令查看SQL执行计划,根据执行计划判断是否需要进行SQL调优。

2、分析查询是否被阻塞,导致语句运行时间过长,可以强制结束有问题的会话。

3、审视和修改表定义。选择合适的分布列,避免数据倾斜。

4、分析SQL语句是否使用了不下推的函数,建议更换为支持下推的语法或函数。

5、对表定期做vacuum full和analyze,可回收已更新或已删除的数据所占据的磁盘空间。

6、检查表有无索引支撑,建议例行重建索引。数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。

7、对业务进行优化,分析能否将大表进行分表设计。

3、处理方法

GaussDB(DWS) 提供了分析查询和改进查询的方法,并且为用户提供了一些常见案例以及错误处理办法。您可以参考优化查询性能章节对SQL进行性能调优。常见问题也可以优先参考以下两种方法进行分析:
方法一:对表定期做统计优化查询

变化的表,如果经常insert语句到表中,需要做analyze 表,具体语句为:

Analyze tablename;

经常变化的表,如果经常删除delete数据,需要做vacuum full1,具体语句为:

Vacuum full tablename;

查询表大小,如果表非常大,而实际只有很少数据,那么应该执行vacuum full 对表进行磁盘碎片整理。

select *
  from pg_size_pretty(pg_table_size('tablename'));

方法二:通过pgxc_stat_activity查询正在运行的sql相关信息
查询后台活跃sql

SELECT pid
    , datname
    , usename
    , state,waiting
    , query
 FROM pgxc_stat_activity
WHERE  state <> 'idle';

查询后台业务有锁的sql

SELECT pid
     , datname
     , usename
     , state
     , waiting
     , query 
  FROM pgxc_stat_activity 
 WHERE state <> 'idle' 
   AND waiting=true;

判断是否被锁
如果没有锁,查找相关业务sql,按照方法一中的判断方法进行处理。
如果有锁,则查找出pid字段,使用如下函数,结束任务,释放锁。

SELECT pg_terminate_backend(pid);

  1. 执行vacuum full 语句时注意不能有其他任务在跑。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D2cOneluo

万一有大佬给个打赏呢,对不对。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值