在greenplum运行过程中,Segement很有可能因为压力大出现不可用的情况,

主备Segement发现了切换,或是主备Segement网络断开,数据不同步了。在

默认情况下,如果GreenPlum4.X版本中,有一个Segment失败了,数据库还是会

正常运行的,如果是主Segemnt失败了,则切换到备Segment上,这样必须对Segment

是否正常加以监控,一般有以下两种监控方法:

1、检查gp_segment_configuration以确定是否有Segment处于down的状态,或者查看

gp_configuration_history以观察最近数据库是否发生了切换。

select * from gp_segment_configuration where status='d' or mode <>'s';

2、Segemnt已经卡住了,但是Master没有感知到Segment失败,这时候,首先就是要监控

当前运行的SQL是有否超过很长时间的。其次就是要在Greenplum中建立一张心跳表,这张

心跳表至少要在每个Segement都有一条记录,然后不断去更新表中的所有记录,当发现

这个SQL超过一定时间都没执行完,就要发出告警。

操作步骤如下:

1)创建临时表,插入10000条数据

create table xdual_temp

as 

select generate_series(1,10000) id

distributed by (id);

2)建立心跳表,2个字段,第二个字段是timestamp类型的,每次心跳检测数据都会更新

create table xdual (id int,update_time timestamp(0))

distibuted by (id);

3)向心跳表中每个Segment中插入一条数据

insert into xdual(id,update_time)

select id,now() from 

(select id,row_number() over(partition by gp_segment_id order by id) rn 

from xdual_temp) t;

4)心跳检测

运行update xdual set update_time=now();

只要这个SQL运行正常,就代表每一个Segment都是正常的。

 posted on 2019-07-04 14:12  xibuhaohao  阅读(532)  评论(0编辑  收藏  举报