| 命令 | 参数 | 作用 |
|---|---|---|
| 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 | 显示详细信息 |
| 命令 | 参数 | 作用 | 注意事项 |
|---|---|---|---|
| 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 | 显示额外的日志信息 |
| 命令 | 参数 | 作用 | 注意事项 |
|---|---|---|---|
| gpstart | -a | 快速启动 GreenPlum 数据库 | 直接启动,不提示终端用户输入确认 |
| gpstart | -d path | 指定数据目录,默认是$MASTER_DATA_DIRECTORY。 | |
| gpstart | -q | 在安静模式下运行,命令输出不显示在屏幕,但写入日志文件。 | |
| gpstart | -m | 以维护模式连接到Master进行目录维护;只启动master 实例,主要在故障处理时使用 | |
| gpstart | -v | 显示详细启动信息。 |
| 命令 | 参数 | 作用 | 注意事项 |
|---|---|---|---|
| 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同时使用 |
| 命令 | 参数 | 作用 |
|---|---|---|
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 ]
xxxxxxxxxxgpactivatestandby -d path: 指定备库路径,使用数据目录绝对路径,默认:$ MASTER_DATA_DIRECTORYgpactivatestandby -f: 强制激活备份主机。gpactivatestandby -v | 显示此版本信息
xxxxxxxxxxgpinitstandby -s standby_name: 指定新备库名称。gpinitstandby -D: debug调试模式。gpinitstandby -r: 移除备用机。
xxxxxxxxxx-- 所有表信息,不包含分区表的子表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;
xxxxxxxxxx-- 所有表信息,包含分区表的子表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;
xxxxxxxxxx-- 查看某个分区表的信息 SELECT tablename, partitiontablename, partitiontype, partitionboundary FROM pg_partitions WHERE tablename = 'here_your_table_name' ORDER BY partitionboundary DESC;
x-- 字节显示 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'));
xxxxxxxxxx-- 查看全部表的大小SELECT relname AS relation, pg_size_pretty ( pg_total_relation_size (C .oid) ) AS total_sizeFROM pg_class CLEFT 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) DESCLIMIT 20;
xxxxxxxxxx-- 评估表中的数据量SELECT reltuples::numeric as countFROM pg_classWHERE relname='here_your_table_name';
-- 查看表数据分布情况(一张表各segment存储情况)select gp_segment_id,count(*) from here_your_table_name group by gp_segment_id order by 1;
xxxxxxxxxx-- 不会改变分布键,会清理过期空间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;
xxxxxxxxxx-- 查看所有表的索引信息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';
xxxxxxxxxx-- 查看单表的索引信息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';
xxxxxxxxxx-- 检查索引占用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.indexrelidWHERE NOT indisunique AND idx_scan < 50 AND pg_relation_size(relid) > 5 * 8192ORDER BY pg_relation_size(i.indexrelid) / nullif(idx_scan, 0) DESC NULLS FIRST, pg_relation_size(i.indexrelid) DESCLIMIT 10;
xxxxxxxxxx-- 查看单表的column列信息SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'public' AND TABLE_NAME = 'here_your_table_name';
xxxxxxxxxx-- 仅查看单表column列名称(逗号分隔)SELECT string_agg ( COLUMN_NAME, ',' ) FROM information_schema.COLUMNS WHERE table_schema = 'public' AND TABLE_NAME = 'here_your_table_name';
xxxxxxxxxx-- 查看所有表的列信息SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'public';
xxxxxxxxxx-- 查看所有表的列名称,逗号分隔SELECT string_agg ( COLUMN_NAME, ',' ),TABLE_NAME FROM information_schema.COLUMNS WHERE table_schema = 'public' GROUP BY 2;
xxxxxxxxxx-- 查看segment节点状态select * from gp_segment_configuration;
xxxxxxxxxx-- 查看各segment剩余可用空间 dfspace / 1024 / 1024 表示GBSELECT dfsegment, dfhostname, dfdevice , round(dfspace / 1024 / 1024, 2) AS free_disk_GBFROM gp_toolkit.gp_disk_freeORDER BY free_disk_MB DESC;
xxxxxxxxxx-- greemplum每个数据库占用空间大小select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
xxxxxxxxxx-- 查看库下面的所有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;
xxxxxxxxxx-- 查看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 ;
xxxxxxxxxx-- 查看在系统表中被标记为掉线的Segment的信息SELECT * from gp_toolkit.gp_pgdatabase_invalid;
xxxxxxxxxx-- 正在活动的进程select * from pg_stat_activity where state ='active';
xxxxxxxxxx-- 空闲的进程select * from pg_stat_activity where state ='idle';
xxxxxxxxxx-- Kill正在执行的SQL进程
-- 这个函数只能 kill、Select查询,而updae、delete DML不生效select pg_cancel_backend(进程pid);
-- 可以kill 各种DML(SELECT,UPDATE,DELETE,DROP)操作select pg_terminate_backend(线程id);
xxxxxxxxxx-- 查询对应用户的连接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;
xxxxxxxxxx-- 查看超级管理用户最大连接数show superuser_reserved_connections;
xxxxxxxxxx-- 查看膨胀表select * from gp_toolkit.gp_bloat_diag order by bdinspname,(bdirelpages-bdiexppages)desc,bdirelname;表膨胀通常指的是表的物理磁盘空间使用超过了实际需要的大小,导致性能下降和资源浪费,表膨胀问题需要处理,因为它会导致磁盘空间的浪费,减慢查询性能
表重新组织(REORG):这将重新组织表以减少碎片并释放未使用的磁盘空间。
REORG是一个轻量级的操作,适用于小型的膨胀表。xxxxxxxxxxREORGANIZE here_your_table_name;表重建(REBUILD):这将创建一个新的表,将数据从原始表复制到新表,并替换原始表。这是处理大型膨胀表的更强大选项。
xxxxxxxxxxREBUILD here_your_table_name;VACUUM操作:运行VACUUM操作可以帮助清理并释放未使用的磁盘空间。在运行
REORG或REBUILD之前,通常需要运行VACUUM来减少膨胀表的碎片。VACUUM here_your_table_name;