greenplum集群常用运维排障命令汇总

greenplum集群常用运维排障命令汇总

1. 管理命令

1-1. 查看greenplum集群状态-gpstate

  • gpstate
命令 参数 作用
gpstate -b 显示简要状态信息
gpstate -c 显示主镜像映射
gpstate -e 显示具有镜像状态问题的片段,例如查看gprecovery进度
gpstate -f 显示备用主机standby master的详细信息
gpstate -i 显示GRIPLUM数据库版本
gpstate -m 只列出mirror 实例的状态和配置信息,显示镜像实例同步状态
gpstate -p 显示使用的端口
gpstate -Q 快速检查主机状态,该命令默认列出数据库运行状态汇总信息,常用于日常巡检
gpstate -s 显示集群详细信息
gpstate -v 显示详细信息

1-2. greenplum配置参数管理-gpconfig

  • gpconfig
命令 参数 作用 注意事项
gpconfig -c param_name 通过在postgresql.conf文件底部添加新设置来改变配置参数 谨慎修改配置参数。
gpconfig -v param_name value 为指定配置参数设置值。该值适用于所有Segment,Master和后备Master
gpconfig -m param_name master_value 为Master和后备Master设置指定配置参数的值
gpconfig -masteronly 仅编辑Master的postgresql.conf文件
gpconfig -r param_name 通过注释掉postgresql.conf文件中的项删除配置参数
gpconfig -l 列出所有gpconfig支持的配置参数(list)
gpconfig -s param_name 显示配置参数在集群中的所有实例上的值
gpconfig –file param_name 显示在所有实例上postgresql.conf文件中的配置参数值
gpconfig –file-compare 比较当前值与postgresql.conf文件中的值
gpconfig –skipvalidation 覆盖系统验证检查,谨慎使用
gpconfig –verbose 显示额外的日志信息

1-3. 启动greenplum集群-gpstart

  • gpstart
命令 参数 作用 注意事项
gpstart -a 快速启动 GreenPlum 数据库 直接启动,不提示终端用户输入确认
gpstart -d path 指定数据目录,默认是$MASTER_DATA_DIRECTORY。
gpstart -q 在安静模式下运行,命令输出不显示在屏幕,但写入日志文件。
gpstart -m 以维护模式连接到Master进行目录维护;只启动master 实例,主要在故障处理时使用
gpstart -v 显示详细启动信息。

1-4. 停止nplum集群-gpstop

  • gpstop
命令 参数 作用 注意事项
gpstop -a 快速停止 直接停止,不提示终端用户输入确认
gpstop -d 指定数据目录(默认值:$MASTER_DATA_DIRECTORY)
gpstop -m 维护模式 用于紧急情况的选项,可以立即中止正在进行的事务,但可能导致数据不一致或数据库损坏。不建议在正常情况下使用这些选项;只停止master 实例,与gpstart –m 对应使用
gpstop -q 在安静模式下运行,命令输出不显示在屏幕,但仍然写入日志文件。
gpstop -r 停止所有实例,然后重启系统
gpstop -u 重新加载配置文件 postgresql.conf 和 pg_hba.conf 不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用
gpstop -v 显示详细启动信息。
gpstop -M fast 快速关闭。正在进行的任何事务都被中断。然后滚回去。 停止数据库,中断所有数据库连接,回滚正在运行的事务
gpstop -M immediate 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。
gpstop -M smart 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。
gpstop –host hostname 停用segments数据节点,不能与-m、-r、-u、-y同时使用

1-5. greenplum集群数据恢复修复-gprecoverseg

  • gprecoverseg
命令 参数 作用
gprecoverseg -a 快速恢复。 [ 以防突然断电或远程断开等情况,一般建议后台运行: nohup gprecoverseg -a & ]
gprecoverseg -i path 指定恢复文件的路径。
gprecoverseg -d path 指定数据目录的路径。
gprecoverseg -l path 指定日志文件的路径。
gprecoverseg -r 平衡数据。[ 若存在主备切换,则需要在修复完成后进行实例切回 ]
gprecoverseg -s path 指定配置空间文件的路径。
gprecoverseg -o path 指定恢复配置文件的路径。
gprecoverseg -p 指定额外的备用机。
gprecoverseg -F 将数据文件回滚到之前的状态。相当于全量修复。 使用 -F 参数需要非常小心,因为它是一种强制操作,可能会导致数据的不一致性。
gprecoverseg -S path 指定输出配置空间文件的路径。

gprecoverseg 优先级顺序 1. gprecoverseg -a --> 2. gprecoverseg --> 3. gprecoverseg -r

只有1和2实在恢复不了,数据无法修复恢复时才会使用[ gprecoverseg -F ]

1-6. greenplum激活备库流程

  • gpactivatestandby
gpactivatestandby -d path: 指定备库路径,使用数据目录绝对路径,默认:$ MASTER_DATA_DIRECTORY
gpactivatestandby -f: 强制激活备份主机。
gpactivatestandby -v | 显示此版本信息

1-7. 初始化备Master(standby)

  • gpinitstandby
gpinitstandby -s standby_name: 指定新备库名称。
gpinitstandby -D: debug调试模式。
gpinitstandby -r: 移除备用机。

2. SQL命令

2-1. 表相关

2-1-1. 查看表信息
  • 所有表信息,不包含分区表的子表
-- 所有表信息,不包含分区表的子表
SELECT
	psut.relid,
	psut.relname,
	psut.schemaname 
FROM
	pg_statio_user_tables psut
	LEFT JOIN pg_inherits pi ON psut.relid = pi.inhrelid 
WHERE
	schemaname = 'public' 
	AND pi.inhparent IS NULL 
ORDER BY
	2;
  • 所有表信息,包含分区表的子表
-- 所有表信息,包含分区表的子表
SELECT
	psut.relid,
	psut.relname,
	psut.schemaname 
FROM
	pg_statio_user_tables psut
	LEFT JOIN pg_inherits pi ON psut.relid = pi.inhrelid 
WHERE
	schemaname = 'public' 
ORDER BY
	2;
2-1-2. 查看表分区信息
-- 查看某个分区表的信息	
SELECT
	tablename,
	partitiontablename,
	partitiontype,
	partitionboundary 
FROM
	pg_partitions 
WHERE
	tablename = 'here_your_table_name' 
ORDER BY
	partitionboundary DESC;	
2-1-3. 查看表的存储空间占用
  • 查看指定表的文件占用大小
-- 字节显示 SELECT pg_relation_size('table_name');
SELECT pg_relation_size('here_your_table_name');

-- 显示格式(合理的文件大小单位) SELECT pg_size_pretty(pg_relation_size('table_name'));
SELECT pg_size_pretty(pg_relation_size('here_your_table_name'));
  • 查看全部表的文件占用大小
-- 查看全部表的大小
SELECT relname AS relation,
       pg_size_pretty (
         pg_total_relation_size (C .oid)
       ) AS total_size
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C .relnamespace)
WHERE nspname NOT IN (
        'pg_catalog',
        'information_schema'
      )
  AND C .relkind <> 'i'
  AND nspname !~ '^pg_toast'
  ORDER BY pg_total_relation_size (C .oid) DESC
LIMIT 20;
2-1-4. 查看表的数据量
-- 评估表中的数据量
SELECT reltuples::numeric as count
FROM pg_class
WHERE relname='here_your_table_name';


-- 查看表数据分布情况(一张表各segment存储情况)
select gp_segment_id,count(*) from here_your_table_name group by gp_segment_id order by 1;
2-1-5. 表数据量重新分布均衡
-- 不会改变分布键,会清理过期空间
ALTER TABLE table_name SET WITH (REORGANIZE=true);

-- 指定新的分布键,会清理过期空间
ALTER TABLE table_name SET WITH (REORGANIZE=true) DISTRIBUTED BY (column_name,column_name);

-- 修改表分布策略为随机分布,但是不移动数据
ALTER TABLE table_name SET WITH (REORGANIZE=false) DISTRIBUTED randomly;

2-2. 索引

2-2-1. 查看索引信息
  • 查看所有表的索引信息
-- 查看所有表的索引信息
SELECT A
	.SCHEMANAME,
	A.TABLENAME,
	A.INDEXNAME,
	A.TABLESPACE,
	A.INDEXDEF,
	B.AMNAME,
	C.INDEXRELID,
	C.INDNATTS,
	C.INDISUNIQUE,
	C.INDISPRIMARY,
	C.INDISCLUSTERED,
	D.DESCRIPTION 
FROM
	PG_AM B
	LEFT JOIN PG_CLASS F ON B.OID = F.RELAM
	LEFT JOIN PG_STAT_ALL_INDEXES E ON F.OID = E.INDEXRELID
	LEFT JOIN PG_INDEX C ON E.INDEXRELID = C.INDEXRELID
	LEFT OUTER JOIN PG_DESCRIPTION D ON C.INDEXRELID = D.OBJOID,
	PG_INDEXES A 
WHERE
	A.SCHEMANAME = E.SCHEMANAME 
	AND A.TABLENAME = E.RELNAME 
	AND A.INDEXNAME = E.INDEXRELNAME 
	AND E.SCHEMANAME = 'public';
  • 查看单表的索引信息
-- 查看单表的索引信息
SELECT A
	.SCHEMANAME,
	A.TABLENAME,
	A.INDEXNAME,
	A.TABLESPACE,
	A.INDEXDEF,
	B.AMNAME,
	C.INDEXRELID,
	C.INDNATTS,
	C.INDISUNIQUE,
	C.INDISPRIMARY,
	C.INDISCLUSTERED,
	D.DESCRIPTION 
FROM
	PG_AM B
	LEFT JOIN PG_CLASS F ON B.OID = F.RELAM
	LEFT JOIN PG_STAT_ALL_INDEXES E ON F.OID = E.INDEXRELID
	LEFT JOIN PG_INDEX C ON E.INDEXRELID = C.INDEXRELID
	LEFT OUTER JOIN PG_DESCRIPTION D ON C.INDEXRELID = D.OBJOID,
	PG_INDEXES A 
WHERE
	A.SCHEMANAME = E.SCHEMANAME 
	AND A.TABLENAME = E.RELNAME 
	AND A.INDEXNAME = E.INDEXRELNAME 
	AND E.SCHEMANAME = 'public' 
	AND E.RELNAME = 'here_your_table_name';
2-2-2. 查看索引空间占用
-- 检查索引占用
SELECT schemaname || '.' || relname AS table, indexrelname AS index
	, pg_size_pretty(pg_relation_size(i.indexrelid)) AS "index size", idx_scan AS "index scans"
FROM pg_stat_user_indexes ui
	JOIN pg_index i ON ui.indexrelid = i.indexrelid
WHERE NOT indisunique
	AND idx_scan < 50
	AND pg_relation_size(relid) > 5 * 8192
ORDER BY pg_relation_size(i.indexrelid) / nullif(idx_scan, 0) DESC NULLS FIRST, pg_relation_size(i.indexrelid) DESC
LIMIT 10;

2-3. 列信息

  • 查看单表的column列信息
-- 查看单表的column列信息
SELECT
	* 
FROM
	information_schema.COLUMNS 
WHERE
	table_schema = 'public' 
	AND TABLE_NAME = 'here_your_table_name';
  • 仅查看单表column列名称(逗号分隔)
-- 仅查看单表column列名称(逗号分隔)
SELECT
	string_agg ( COLUMN_NAME, ',' ) 
FROM
	information_schema.COLUMNS 
WHERE
	table_schema = 'public' 
	AND TABLE_NAME = 'here_your_table_name';
  • 查看所有表的列信息
-- 查看所有表的列信息
SELECT
	* 
FROM
	information_schema.COLUMNS 
WHERE
	table_schema = 'public';	
  • 查看所有表的列名称,逗号分隔
-- 查看所有表的列名称,逗号分隔
SELECT
	string_agg ( COLUMN_NAME, ',' ),
TABLE_NAME 
FROM
	information_schema.COLUMNS 
WHERE
	table_schema = 'public' 
GROUP BY
	2;

2-4. 环境相关

  • 查看segment节点状态
-- 查看segment节点状态
select * from gp_segment_configuration;	
  • 查看各segment剩余可用空间
-- 查看各segment剩余可用空间 dfspace / 1024 / 1024 表示GB
SELECT dfsegment, dfhostname, dfdevice
	, round(dfspace / 1024 / 1024, 2) AS free_disk_GB
FROM gp_toolkit.gp_disk_free
ORDER BY free_disk_MB DESC;
  • greemplum每个数据库占用空间大小
-- greemplum每个数据库占用空间大小
select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
  • 查看库下面的所有schema占用的磁盘空间
-- 查看库下面的所有schema占用的磁盘空间
select sosdnsp,round(sosdschematablesize/1024/1024/1024,2) schema_tb_size_GB,round(sosdschemaidxsize /1024/1024/1024,2) as schema_idx_size_GB from gp_toolkit.gp_size_of_schema_disk;
  • 查看schema下所有表和索引 占用的磁盘空间
-- 查看schema下所有表和索引 占用的磁盘空间
SELECT soatioid,soatischemaname,soatitablename,round(soatisize/1024/1024/1024,2) as INDEX_SIZE_GB FROM gp_toolkit.gp_size_of_all_table_indexes 
order by INDEX_SIZE_MB desc,soatischemaname,soatitablename ;
  • 查看在系统表中被标记为掉线的Segment的信息
-- 查看在系统表中被标记为掉线的Segment的信息
SELECT * from gp_toolkit.gp_pgdatabase_invalid;	
  • 正在活动的进程
-- 正在活动的进程
select * from pg_stat_activity where state ='active';
  • 空闲的进程
-- 空闲的进程
select * from pg_stat_activity where state ='idle';
  • 关闭正在执行的SQL进程
-- Kill正在执行的SQL进程

-- 这个函数只能 kill、Select查询,而updae、delete DML不生效
select pg_cancel_backend(进程pid);

-- 可以kill 各种DML(SELECT,UPDATE,DELETE,DROP)操作
select  pg_terminate_backend(线程id);
  • 查询对应用户的连接
-- 查询对应用户的连接
select client_addr,count(*) as a from pg_stat_activity  where usename = 'here_your_user_name' group by client_addr order by a desc ;

SELECT count(*), state FROM pg_stat_activity GROUP BY state;
  • 查看超级管理用户最大连接数
-- 查看超级管理用户最大连接数
show superuser_reserved_connections;
  • 查看膨胀表
-- 查看膨胀表
select * from gp_toolkit.gp_bloat_diag order by bdinspname,(bdirelpages-bdiexppages)desc,bdirelname;

表膨胀通常指的是表的物理磁盘空间使用超过了实际需要的大小,导致性能下降和资源浪费,表膨胀问题需要处理,因为它会导致磁盘空间的浪费,减慢查询性能

  1. 表重新组织(REORG):这将重新组织表以减少碎片并释放未使用的磁盘空间。REORG是一个轻量级的操作,适用于小型的膨胀表。

    REORGANIZE here_your_table_name;
    
  2. 表重建(REBUILD):这将创建一个新的表,将数据从原始表复制到新表,并替换原始表。这是处理大型膨胀表的更强大选项。

    REBUILD here_your_table_name;
    
  3. VACUUM操作:运行VACUUM操作可以帮助清理并释放未使用的磁盘空间。在运行REORGREBUILD之前,通常需要运行VACUUM来减少膨胀表的碎片。

    VACUUM here_your_table_name;
    

猜你喜欢

转载自blog.csdn.net/wt334502157/article/details/134137667