暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

UXDB排障雷达-监控诊断与性能统计实战

原创 优炫数据库 1天前
5

概述

目标读者:DBA、运维。

用途:本文概述了UXDB监控相关内容(统计视图、进度报告、探针、锁、磁盘监控),提出"先看视图 → 再定位问题"的实操路径与关键 SQL。适合作为故障排查与日常巡检的速查手册。

一、统计信息的两大视图族

UXDB 通过统计收集器(配置 track_countstrack_activities 等参数)采集运行数据,通过两类系统视图暴露:

  • ux_stat_*:逻辑访问统计(表/索引的读、写、删除、扫描次数,行数,清理/分析信息)。
  • ux_statio_*:物理 I/O 统计(磁盘块读取、缓冲区命中),用于判断缓冲区效率。

重要:统计信息非实时。进程仅在进入空闲前上报计数,收集器约每 500ms 报告一次;因此显示值总是略滞后于实际活动。但 ux_stat_activity 的当前命令信息是实时的。

二、最常用的诊断视图

1. 当前活动与锁

-- 谁在跑什么 SELECT pid, usename, state, wait_event_type, wait_event, now() - xact_start AS xact_age, query FROM ux_stat_activity WHERE state <> 'idle'; -- 当前未决锁 SELECT * FROM ux_locks WHERE NOT granted;

ux_locks 用于查看未解决的锁:定位某个会话/关系上的锁、判断最多未授予锁的关系(竞争源)、评估锁竞争对整体性能的影响。

2. 数据库/表/索引统计

-- 数据库级:提交/回滚、死锁、缓冲区命中 SELECT * FROM ux_stat_database WHERE datname = current_database(); -- 表级:顺序扫描 vs 索引扫描、增删改、vacuum/analyze 次数 SELECT relname, seq_scan, idx_scan, n_tup_ins, n_tup_del, n_live_tup, n_dead_tup, last_vacuum, last_autovacuum FROM ux_stat_all_tables WHERE schemaname = 'public'; -- 索引级:索引扫描次数、命中行数 SELECT relname, idx_scan, idx_tup_read, idx_tup_fetch FROM ux_stat_all_indexes WHERE schemaname = 'public'; -- 缓冲区命中(物理读 vs 缓冲读) SELECT relname, heap_blks_read, heap_blks_hit FROM ux_statio_all_tables WHERE schemaname = 'public';

缓冲区效果判断heap_blks_read 远小于 heap_blks_hit 时,说明缓冲能满足大部分读请求。但需注意:不在 UXDB 缓冲区的数据可能仍驻留内核页缓存,真正物理读会更少。

3. 复制与归档

SELECT * FROM ux_stat_replication; -- 各后备的复制状态、WAL 位点 SELECT * FROM ux_stat_archiver; -- 归档是否成功、失败计数 SELECT * FROM ux_stat_wal_receiver; -- 本机作为后备时的 WAL 接收状态

4. 函数统计

SELECT * FROM ux_stat_user_functions; -- 函数调用次数与总耗时

三、底层统计函数

视图背后是可自定义查询的底层函数:

SELECT ux_stat_get_activity(pid) FROM ux_stat_get_backend_idset() AS pid; SELECT ux_stat_reset(); -- 重置当前库统计

常用:ux_stat_get_backend_activityux_stat_get_backend_pidux_stat_get_backend_client_addrux_stat_get_backend_wait_event 等。查看视图定义可用 \d+ ux_stat_activity

四、进度报告

长命令执行进度通过三类视图查看(每个正在执行的后端一行):

视图 命令
ux_stat_progress_create_index CREATE INDEX / REINDEX
ux_stat_progress_vacuum VACUUM(含 autovacuum worker)
ux_stat_progress_cluster CLUSTER / VACUUM FULL
SELECT * FROM ux_stat_progress_vacuum; -- 查看 VACUUM 阶段与已处理堆块

五、动态追踪探针(DTrace / SystemTap)

UXDB 源码内置探针点,供开发与 DBA 动态追踪(默认不编译,需配置时显式开启)。

  • 支持 DTrace(Solaris/macOS/FreeBSD/NetBSD/Oracle Linux)与 Linux SystemTap。
  • 典型用途:分析事务计数、锁获取、缓冲区读写等。
  • 定义新探针需在源码中加 TRACE_UXSINODB_* 宏并重新编译。
/* DTrace 示例:统计事务开始次数 */
uxdb$1:::transaction-start { @tx["start"] = count(); }

六、磁盘使用监控

1. 三种监控方式

  • SQL 函数:ux_database_sizeux_table_sizeux_total_relation_sizeux_relation_sizeux_size_pretty 等。
  • oid2name 模块:将对象 OID 映射为文件名。
  • 人工观察系统目录(ux_classux_index)。
-- 数据库大小(人类可读) SELECT ux_size_pretty(ux_database_size(current_database())); -- TOP 10 大表 SELECT relname, ux_size_pretty(ux_total_relation_size(oid)) FROM ux_class WHERE relkind = 'r' ORDER BY ux_total_relation_size(oid) DESC LIMIT 10;

2. TOAST

宽列(大字段)会拆到关联的 TOAST 文件。每个表/索引独立成文件,超 1GB 会分裂为多个文件。

七、标准 Unix 工具

监控不能只看数据库内部,还需配合 OS 工具:

  • ps / top:进程与 CPU;UXDB 会修改进程标题(如 uxdb: user db SELECT)便于识别。
  • iostat / vmstat:磁盘与内存 I/O。
  • 发现慢查询后用 EXPLAIN (ANALYZE, BUFFERS) 深入。

总结

本文梳理了 UXDB 从统计视图、活动与锁、进度报告、动态探针到磁盘监控的诊断体系的核心要点。

其价值在于"一条诊断路径 + 一个关键认知":诊断路径是"先 ux_stat_activity 看谁在跑、卡在哪 → 再 ux_locks 看是否锁竞争 → 最后 ux_stat_all_tables/indexes + EXPLAIN 定位慢查询";关键认知是统计视图是滞后快照,进度报告与活动视图才是实时的,因此在判断性能问题时应以 ux_stat_activity 的实时命令信息为准,而非依赖滞后统计。掌握这套顺序,即可在绝大多数场景下快速定位瓶颈。

最后修改时间:2026-09-11 15:14:51
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论