GreenPlum 执行缓慢排查过程

一、排查过程

1、查看服务器负载

free -m

top

2、查看连接数

SELECT COUNT(*) FROM pg_stat_activity WHERE STATE NOT LIKE '%idle';

3、慢 SQL

SELECT 
  datname, 
  usename, 
  client_addr, 
  application_name, 
  state, 
  backend_start, 
  xact_start, 
  xact_stay, 
  query_start, 
  query_stay, 
  REPLACE(
    QUERY, 
    chr(10), 
    ' '
  ) AS QUERY 
FROM 
  (
    SELECT 
      pgsa.datname AS datname, 
      pgsa.usename AS usename, 
      pgsa.client_addr client_addr, 
      pgsa.application_name AS application_name, 
      pgsa.state AS state, 
      pgsa.backend_start AS backend_start, 
      pgsa.xact_start AS xact_start, 
      EXTRACT(
        epoch 
        FROM 
          (NOW() - pgsa.xact_start)
      ) AS xact_stay, 
      pgsa.query_start AS query_start, 
      EXTRACT(
        epoch 
        FROM 
          (NOW() - pgsa.query_start)
      ) AS query_stay, 
      pgsa.query AS QUERY 
    FROM 
      pg_stat_activity AS pgsa 
    WHERE 
      pgsa.state != 'idle' 
      AND pgsa.state != 'idle in transaction' 
      AND pgsa.state != 'idle in transaction (aborted)'
  ) idleconnections 
ORDER BY 
  query_stay DESC 
LIMIT 
  5;

二、解决办法

1、Kill 慢SQL

SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE  QUERY LIKE '%<query text>%' AND pid != pg_backend_pid();
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE  QUERY LIKE '%<query text>%' AND pid != pg_backend_pid();

2、更新表的统计信息,使查询计划更准确

ANALYZE <table> 或    VACUUM ANZLYZE <table>

3、查看执行计划

explain [sql statement]

4、SQL调优

重新编写SQL,去除掉不必要的子查询、改写UNION ALL、使用JOIN CLAUSE固定连接顺序等。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

magic_kid_2010

你的支持将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值