GBase 8a MPP Cluster 是面向分析型场景的分布式数据库。它的运维对象不仅包括数据库和 SQL,还包括 Coordinator、gnode、gcware、数据分片、副本、DML/DDL Event、数据装载任务和重分布任务。

如果只按照普通 MySQL 的思路检查 SHOW PROCESSLIST,往往只能看到当前调度节点的信息,无法覆盖所有 Coordinator 和 gnode。真正的集群巡检还需要结合 gcadmin、gcmonit、gcluster_services 以及 information_schema 中的集群视图。
下面整理了 GBase 8a MPP Cluster DBA 常用的 100 条命令,覆盖 gccli 连接、集群服务、节点状态、分片、数据库对象、会话任务、空间、数据装载、用户权限、恢复模式、日志和操作系统巡检等场景。
本文以 GBase 8a MPP Cluster V9 系列常见用法为主。V8、V9 以及不同 V9 小版本在服务命令、工具参数、系统表字段和多 VC 管理方面可能存在差异,执行前应先确认现场版本。文中的 IP、用户、数据库、表名、目录和 Distribution ID 均为示例。
集群启停、恢复模式切换、分片调整、数据重分布、终止任务、删除对象和覆盖加载等操作风险较高,必须按照现场版本的官方管理员手册执行。
gccli -h 192.168.1.10 -P 5258 -u dba -p交互输入密码可以避免密码直接出现在 Shell 历史记录中。
gccli -h 192.168.1.10,192.168.1.11,192.168.1.12
-P 5258 -u dba -p
指定多个 IP 后,gccli 可以依次尝试连接,提高客户端连接可用性。
gccli -h 192.168.1.10 -u dba -p -e "SELECT VERSION();"
gccli -h 192.168.1.10 -u dba -p -D appdb < appdb_init.sql
SELECT VERSION();SELECT DATABASE();SELECTUSER(),
CURRENT_USER();
SHOW DATABASES;USE appdb;SELECTNOW(),
CURRENT_TIMESTAMP;
gcluster_services all info这是 V9 环境常用的节点服务检查入口。
gcluster_services all startgcluster_services all stop停服务前应确认节点角色、业务连接和集群整体状态。
gcluster_services all restartgcmonit --statusps -ef | grep '[g]clusterd'ps -ef | grep '[g]based'ps -ef | grep '[g]cware'V8 环境中相关进程可能是 corosync。
ps -ef | grep '[g]c_sync_server'ss -lntp | grep -E 'gclusterd|gbased|gcware'具体端口应以安装配置为准。
gcadmin --helpgcadmin --versiongcadmin重点确认节点状态、集群模式、分片和副本是否正常。
gcadmin showcluster cgcadmin showcluster dgcadmin showdmlevent 50用于检查数据操作过程中记录的一致性和执行异常。
gcadmin showddlevent 50gcadmin showdmlstorageevent 50gcadmin showfailovergcadmin showlockCREATE DATABASE appdb;SHOW TABLES FROM appdb;SHOW TABLES FROM appdb LIKE '%order%';DESC appdb.orders;SHOW CREATE TABLE appdb.orders;CREATE TABLE appdb.orders(
order_id BIGINT NOT NULL,
customer_id BIGINT NOT NULL,
order_date DATE,
amount DECIMAL(18,2)
)
DISTRIBUTED BY ('customer_id');
分布键应选择数据较均匀、关联和过滤经常使用的字段。
CREATE TABLE appdb.region_dict(
region_id INT,
region_name VARCHAR(100)
)
REPLICATED;
复制表适合数据量较小、更新不频繁并且经常参与关联的维表。
SELECTdbName,
tbName,
isReplicate,
hash_column
FROM gbase.table_distribution
WHERE dbName = 'appdb'
AND tbName = 'orders';
SELECT *FROM information_schema.cluster_tables
WHERE table_schema = 'appdb'
AND table_name = 'orders';
SELECT *FROM information_schema.cluster_table_segments
WHERE table_schema = 'appdb'
AND table_name = 'orders';
可以用它检查数据是否在各节点和分片间均匀分布。
SHOW PROCESSLIST;SHOW FULL PROCESSLIST;SHOW DETAIL PROCESSLIST;SELECTcoordinator_name,
id,
user,
host,
command,
start_time,
time,
state,
SUBSTRING(info, 1, 200) AS info
FROM information_schema.coordinators_task_information
WHERE command = 'query'
ORDER BY time DESC
LIMIT 20;
SELECTnode_name,
id,
user,
host,
command,
start_time,
time,
state,
SUBSTRING(info, 1, 200) AS info
FROM information_schema.gnodes_task_information
WHERE command = 'query'
AND info IS NOT NULL
ORDER BY time DESC
LIMIT 20;
SELECTcoordinator_name,
id,
user,
host,
time,
state,
info
FROM information_schema.coordinators_task_information
WHERE command = 'query'
AND time >= 300
ORDER BY time DESC;
SELECTuser,
COUNT(*) AS tasks
FROM information_schema.coordinators_task_information
WHERE command = 'query'
GROUP BY user
ORDER BY tasks DESC;
KILL 12345;执行前应先确认任务 ID、用户、SQL 和业务影响。
SELECTCONNECTION_ID(),
USER(),
DATABASE();
gccli -h 192.168.1.10 -u dba -p -e "SHOW FULL PROCESSLIST;"
SHOW VARIABLES;SHOW VARIABLES LIKE '%parallel%';SHOW STATUS;SHOW STATUS LIKE '%meminfo%';SELECTtable_schema,
COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema NOT IN (
'information_schema',
'gbase'
)
GROUP BY table_schema
ORDER BY table_count DESC;
SELECTtable_schema,
SUM(data_length) AS data_bytes,
SUM(index_length) AS index_bytes
FROM information_schema.tables
WHERE table_schema NOT IN (
'information_schema',
'gbase'
)
GROUP BY table_schema
ORDER BY data_bytes DESC;
不同版本对相关字段的统计口径可能不同,应结合集群分片视图核对。
SELECTtable_schema,
table_name,
table_rows,
data_length,
index_length
FROM information_schema.tables
WHERE table_schema = 'appdb'
ORDER BY data_length DESC
LIMIT 20;
SELECTcolumn_name,
column_type,
is_nullable,
column_default
FROM information_schema.columns
WHERE table_schema = 'appdb'
AND table_name = 'orders'
ORDER BY ordinal_position;
gcadmin showdistributiongcadmin showdistribution nodeLOAD DATA INFILE'ftp://loader:[email protected]//data/orders.csv'
INTO TABLE appdb.orders
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
NULL_VALUE 'N';
生产环境不应在脚本和文章中保留真实密码。
LOAD DATA INFILE'ftp://loader:[email protected]//data/orders.csv'
INTO TABLE appdb.orders
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
NULL_VALUE 'N'
DATETIME FORMAT '%Y-%m-%d %H:%i:%s';
LOAD DATA INFILE'ftp://loader:[email protected]//data/events.csv'
INTO TABLE appdb.events
FIELDS TERMINATED BY ','
NULL_VALUE 'N'
DATETIME FORMAT '%Y-%m-%d %H:%i:%s.%f';
SELECTdb_name,
tb_name,
ip,
state,
start_time,
progress,
total_size,
loaded_size,
loaded_records,
skipped_records
FROM information_schema.load_status
ORDER BY db_name, tb_name;
SELECTtask_id,
db_name,
tb_name,
user,
host_ip,
start_time,
end_time,
elapsed_time,
total_size,
loaded_records,
skipped_records
FROM information_schema.load_result
WHERE start_time >= '2026-07-27'
ORDER BY start_time DESC;
SELECTtask_id,
db_name,
tb_name,
loaded_records,
skipped_records
FROM information_schema.load_result
WHERE skipped_records > 0
ORDER BY start_time DESC;
rmt:SELECT *FROM appdb.orders
WHERE order_date >= '2026-07-01'
INTO OUTFILE '/data/export/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
NULL_VALUE 'N';
文件路径属于执行节点,执行前应检查目录权限和磁盘空间。
gccli -h 192.168.1.10 -u report_user -p -D appdb
-e "SELECT * FROM orders LIMIT 1000"
> orders.txt
gccli -h 192.168.1.10 -u loader -p -D appdb < load_orders.sql
> load_orders.log 2>&1
grep -niE 'error|failed|exception' load_orders.logSELECTuser,
host
FROM gbase.user
ORDER BY user, host;
系统权限表结构可能随版本变化,查询前可先 DESC gbase.user。
CREATE USER 'appuser'@'%'IDENTIFIED BY 'Replace_With_Strong_Password';
SET PASSWORD FOR 'appuser'@'%'= PASSWORD('Replace_With_New_Strong_Password');
具体密码语法应以当前版本的安全策略和官方手册为准。
SHOW GRANTS FOR 'appuser'@'%';GRANT SELECT ON appdb.*TO 'report_user'@'%';
GRANT SELECT, INSERT, UPDATE, DELETEON appdb.*
TO 'appuser'@'%';
REVOKE INSERT, UPDATE, DELETEON appdb.*
FROM 'appuser'@'%';
DROP USER 'appuser'@'%';SHOW PROCEDURE STATUSWHERE Db = 'appdb';
SHOW FUNCTION STATUSWHERE Db = 'appdb';
gcadmin getdistribution 1 distribution_1.xml1 为示例 Distribution ID,应先通过 showdistribution 确认。
gcadmin rebalance --help不同版本的重分布参数差异较大,必须先查看当前安装版本帮助。
gcadmin --help | grep -i rebalanceGBase 8a 不同小版本的重分布参数和状态查询方式存在差异,应先确认当前安装版本实际提供的子命令,再按对应版本管理员手册执行。
gcadmin showvc多 VC 功能和子命令只适用于支持相应能力的版本。
gcadmin输出中应重点确认集群处于 NORMAL、RECOVERY 或其他维护状态。
gcadmin switchmode recovery该命令只应在官方恢复流程要求时执行,并且通常只在一个部署 gcware 的节点上执行一次。
gcadmin switchmode normal切换前必须确认恢复任务、节点状态和数据一致性已经满足要求。
INITNODEDATAMAP;该命令用于安装初始化阶段,不是日常巡检命令,已有生产集群不要重复执行。
gcadmin showdmlevent发现 Event 后,应结合表、节点、时间和同步服务日志判断是否需要恢复处理。
gcadmin showddleventtail -200 "$GCLUSTER_BASE/log/gcluster/system.log"实际安装目录应根据现场环境替换。
tail -200 "$GCLUSTER_BASE/log/gcluster/express.log"tail -200 "$GCLUSTER_BASE/log/gcluster/gclusterd.log"tail -200 "$GCLUSTER_BASE/log/gcluster/gclusterd-audit.log"tail -200 "$GNODE_BASE/log/gbase/express.log"tail -200 "$GNODE_BASE/log/gbase/syncserver.log"grep -RniE 'error|fatal|failed|exception' "$GCLUSTER_BASE/log" "$GNODE_BASE/log" | tail -200
uptimefree -m
top
df -hdf -i
iostat -x 1 5
应重点检查 Coordinator、gnode 数据目录、日志目录和装载文件目录。
gcadmingcadmin showcluster c
gcadmin showcluster d
gcadmin showdistribution node
gcadmin showdmlevent 20
gcadmin showddlevent 20
gcadmin showdmlstorageevent 20
gcadmin showfailover
gcadmin showlock
这些命令可以快速检查节点、分片、一致性事件、倒换记录和集群锁,但正式巡检还要结合会话任务、表空间、数据倾斜、装载任务、日志和操作系统资源综合判断。
GBase 8a 的日常运维不能只停留在 SQL 层。SHOW PROCESSLIST 只能提供局部信息,完整排查需要同时查看 Coordinator、gnode、分片、副本和一致性 Event。
出现 SQL 卡顿时,应先判断任务卡在 Coordinator 还是 gnode;出现空间问题时,要检查各分片段是否均匀;出现数据一致性告警时,要结合 showdmlevent、showddlevent、同步服务和恢复日志定位。对于重分布、恢复模式和节点变更,应严格按照当前版本管理员手册执行。