当前位置:   article > 正文

postgresql/openGauss单表查询缓慢_posgresql select慢

posgresql select慢

        公司的产品之前是用的mysql,然后由于现在很多客户要求国产化,所以将产品从centOs+mysql调整为了Euler+opengauss,这里记录一个遇到的问题

        系统跑了一段时间后,发现有一张表,单表查询特别缓慢,总数据量5万左右,select Count(*)时间能达到10秒以上,排查问题开始

        首先怀疑是由于dead tuples过多导致的表卡顿(一张5w数据的表空间占用9个G)

        参考文章
POstgreSql清理死亡元组

        执行VACUUM清理后,空间占用降低,表查询速度快了,但是只维持了很短时间,很快就继续卡,所以接下来就继续分析。

        通过pg_stat_user_tables表查询,发现n_tup_upd (表总更新行数)达到1亿多次(仅仅跑了半个月),马上去查看pg_log日志,发现该表有一直执行更新语句,一小时200-300次,在我们系统方面来说,这是一个正常的数据。

 

最后定位到原因,执行的更新语句格式如下:
update xxxx set status = 0 where parent_id = '' and id <> '' ;

这里有一个很关键的点,在mysql中,执行的语句会被自动替换为

 update xxxx set status = 0 where parent_id = '' and id <> '' and status<>0;

但是opengauss中没有这个补全(按照标准sql没毛病),所以导致每次执行,会满足条件的整个更新,一次更新一千条左右,导致该表更新次数极高,手动将代码中sql补全后,问题解决,查询正常

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/135380
推荐阅读
相关标签
  

闽ICP备14008679号