合规图谱系统统计指标查询方案

系统运行状态评估 — SQL 查询指引
项目:华夏银行合规图谱系统 (hgtp) 日期:2026-03-02 版本:v1.0
1日活跃用户数(DAU)

评估标准:若 DAU / 目标用户数 < 30% 且持续 3 个月,视为活跃度低。本方案仅查询 DAU 原始数据,百分比需结合目标用户数另行计算。

数据来源
数据库表实体类说明
base_account_logs BaseAccountLogs 用户每次登录写入一条记录,含 user_id 和 login_time
关键字段
字段名类型说明
user_idbigint用户ID
login_timedatetime登录时间
login_ipvarchar登录IP
account_typevarchar登录方式 (password/mobile/weixin等)

查询每日 DAU

SQL-1.1 最近90天
-- 每日活跃用户数(最近90天)
SELECT
    DATE(login_time)                AS stat_date,
    COUNT(DISTINCT user_id)      AS dau
FROM base_account_logs
WHERE login_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY DATE(login_time)
ORDER BY stat_date DESC;

按月汇总平均 DAU

SQL-1.2 月均趋势
-- 按月汇总平均DAU(最近6个月)
SELECT
    DATE_FORMAT(stat_date, '%Y-%m')  AS stat_month,
    ROUND(AVG(dau))                     AS avg_dau,
    MIN(dau)                              AS min_dau,
    MAX(dau)                              AS max_dau
FROM (
    SELECT
        DATE(login_time)            AS stat_date,
        COUNT(DISTINCT user_id)  AS dau
    FROM base_account_logs
    WHERE login_time >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
    GROUP BY DATE(login_time)
) daily
GROUP BY DATE_FORMAT(stat_date, '%Y-%m')
ORDER BY stat_month DESC;

2"智能查询"功能周均使用频次

评估标准:核心功能周均使用次数低于预期,视为用户粘性不足。仅统计"智能查询"功能。

数据来源
数据库表实体类说明
hg_search_log HgSearchLog 每次搜索操作写入一条记录,search_type 区分子功能类型
关键字段
字段名类型说明
search_log_idbigint主键
user_idbigint用户ID
search_timedatetime搜索时间
search_typeint1=浏览法规 2=标签搜索 3=文本搜索 4=智能问答
search_contentvarchar搜索内容
user_namevarchar用户名

按周统计使用频次

SQL-2.1 按周明细
-- 智能查询 每周使用频次(最近90天)
SELECT
    DATE_FORMAT(search_time, '%x-W%v')  AS stat_week,
    MIN(DATE(search_time))               AS week_start,
    MAX(DATE(search_time))               AS week_end,
    COUNT(*)                              AS weekly_usage,
    COUNT(DISTINCT user_id)           AS weekly_users,
    SUM(CASE WHEN search_type = 3
         THEN 1 ELSE 0 END)              AS text_search_cnt,
    SUM(CASE WHEN search_type = 4
         THEN 1 ELSE 0 END)              AS ai_qa_cnt,
    SUM(CASE WHEN search_type = 2
         THEN 1 ELSE 0 END)              AS label_search_cnt,
    SUM(CASE WHEN search_type = 1
         THEN 1 ELSE 0 END)              AS reg_view_cnt
FROM hg_search_log
WHERE search_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY DATE_FORMAT(search_time, '%x-W%v')
ORDER BY stat_week DESC;

周均汇总

SQL-2.2 周均值
-- 智能查询 周均使用次数
SELECT
    ROUND(AVG(weekly_usage), 1)  AS avg_weekly_usage,
    ROUND(AVG(weekly_users), 1)  AS avg_weekly_users
FROM (
    SELECT
        DATE_FORMAT(search_time, '%x-W%v')  AS stat_week,
        COUNT(*)                              AS weekly_usage,
        COUNT(DISTINCT user_id)           AS weekly_users
    FROM hg_search_log
    WHERE search_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
    GROUP BY DATE_FORMAT(search_time, '%x-W%v')
) weekly;
说明:%x-W%v 为 ISO 年-周格式(如 2026-W09),可避免跨年周数错乱。search_type 枚举:1=浏览法规详情、2=标签搜索、3=文本搜索、4=智能问答,四种类型均属于"智能查询"功能范畴。

3核心页面加载时长

评估标准:核心页面(如登录、审批列表)平均加载时间 > 3秒,视为用户体感差。

当前状态:系统数据库中不存在页面加载时长的记录表。hg_oper_log 操作日志表仅记录了 oper_time(操作发生时间),但未记录接口响应耗时。因此无法直接通过 SQL 查询获取页面加载时长,需要通过以下替代方案采集数据。

可行方案对比

方案 B:浏览器手动采样
直接在浏览器 DevTools → Network 面板观察核心页面请求耗时,手动记录。适合一次性摸底评估,不适合长期监控
方案 C:扩展 hg_oper_log 表
LogAspect 中增加接口耗时计算,hg_oper_log 表新增 cost_time 字段。需少量代码改动,改动后可 SQL 统计。
方案 D:前端 Performance API 埋点
在 Vue 路由守卫中采集 Performance API 数据并上报后端。最完整的方案,可获取真实用户端到端加载时长。

方案 A 操作步骤(推荐)

Shell 命令 Nginx Log
# 前提:Nginx log_format 中已包含 $request_time
# 示例 log_format:
#   '$remote_addr - $time_local "$request" $status $request_time'

# 统计核心页面接口平均响应时间(秒)
awk '
  $7 ~ /\/(api\/(search|reg|login|traffic)|log\/receive)/ {
    sum += $NF; count++
  }
  END {
    if (count > 0)
      printf "平均响应时间: %.3f秒 (共%d次请求)\n", sum/count, count
  }
' /var/log/nginx/access.log

# 按接口分组统计 P50 / P95 / P99
awk '
  $7 ~ /\/(api\/(search|reg|login))/ {
    api = $7; gsub(/\?.*/, "", api);
    times[api][++n[api]] = $NF
  }
  END {
    for (api in n) {
      asort(times[api]);
      cnt = n[api];
      p50 = times[api][int(cnt*0.5)];
      p95 = times[api][int(cnt*0.95)];
      p99 = times[api][int(cnt*0.99)];
      printf "%-40s  P50=%.3fs  P95=%.3fs  P99=%.3fs  (n=%d)\n",
             api, p50, p95, p99, cnt
    }
  }
' /var/log/nginx/access.log

方案 C:扩展后可用的 SQL

SQL-3.1 需先扩展 cost_time 字段
-- 前提:hg_oper_log 已新增 cost_time 字段(单位:毫秒)
-- ALTER TABLE hg_oper_log ADD COLUMN cost_time BIGINT DEFAULT NULL COMMENT '接口耗时(ms)';

-- 核心接口平均响应时间(按URL分组)
SELECT
    oper_url                                         AS api_path,
    COUNT(*)                                      AS request_cnt,
    ROUND(AVG(cost_time))                       AS avg_ms,
    ROUND(MAX(cost_time))                       AS max_ms,
    ROUND(
      PERCENTILE_CONT(0.95)
      WITHIN GROUP (ORDER BY cost_time)
    )                                                AS p95_ms
FROM hg_oper_log
WHERE oper_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
  AND cost_time IS NOT NULL
GROUP BY oper_url
HAVING avg_ms > 3000
ORDER BY avg_ms DESC;
MySQL 兼容说明:MySQL 不原生支持 PERCENTILE_CONT,可用子查询模拟 P95:
SELECT cost_time FROM hg_oper_log ORDER BY cost_time LIMIT 1 OFFSET FLOOR(COUNT(*) * 0.95)

汇总
指标 数据库表 可直接查询 统计维度 备注
DAU base_account_logs 可以 按日 / 按月 COUNT(DISTINCT user_id) GROUP BY DATE(login_time)
智能查询使用频次 hg_search_log 可以 按周 search_type 1~4 均属智能查询范畴,可分类型细查
页面加载时长 不可 推荐通过 Nginx access log 分析,或扩展 hg_oper_log 增加 cost_time 字段