You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Oracle数据库的周、月、年度事务量?是否有专用查询?

获取Oracle数据库周/月/年事务数量的SQL查询方法

要统计Oracle数据库的周、月、年事务数量,主要依赖系统视图或AWR(自动工作负载仓库)数据,以下是具体的查询方案:

基于AWR的历史事务统计(推荐)

AWR会定期收集系统性能数据,适合统计长期的事务趋势,前提是AWR已启用(默认开启)。

每月事务数量统计

SELECT
    TO_CHAR(END_TIME, 'YYYY-MM') AS month,
    ROUND(SUM(VALUE * (END_TIME - BEGIN_TIME) * 86400)) AS total_transactions
FROM
    DBA_HIST_SYSMETRIC_SUMMARY
WHERE
    METRIC_NAME = 'transactions per second'
GROUP BY
    TO_CHAR(END_TIME, 'YYYY-MM')
ORDER BY
    month;

说明:通过每秒事务数(VALUE)乘以时间间隔的总秒数,求和得到当月累计事务数。

每周事务数量统计

SELECT
    TO_CHAR(END_TIME, 'YYYY-IW') AS week, -- YYYY-IW 表示ISO标准周(周一为一周起始)
    ROUND(SUM(VALUE * (END_TIME - BEGIN_TIME) * 86400)) AS total_transactions
FROM
    DBA_HIST_SYSMETRIC_SUMMARY
WHERE
    METRIC_NAME = 'transactions per second'
GROUP BY
    TO_CHAR(END_TIME, 'YYYY-IW')
ORDER BY
    week;

每年事务数量统计

SELECT
    TO_CHAR(END_TIME, 'YYYY') AS year,
    ROUND(SUM(VALUE * (END_TIME - BEGIN_TIME) * 86400)) AS total_transactions
FROM
    DBA_HIST_SYSMETRIC_SUMMARY
WHERE
    METRIC_NAME = 'transactions per second'
GROUP BY
    TO_CHAR(END_TIME, 'YYYY')
ORDER BY
    year;

基于V$SYSSTAT的实时/短期统计

如果AWR未启用,或需要统计实例启动后的累计事务数,可以使用V$SYSSTAT视图(事务数=用户提交数+用户回滚数):

实例启动以来的总事务数

SELECT
    SUM(value) AS total_transactions_since_startup
FROM
    V$SYSSTAT
WHERE
    name IN ('user commits', 'user rollbacks');

自定义时间段的事务数统计

-- 第一步:记录初始时间和事务累计值
CREATE TABLE temp_trans_stats AS
SELECT
    SYSDATE AS start_time,
    (SELECT value FROM V$SYSSTAT WHERE name = 'user commits') AS commit_start,
    (SELECT value FROM V$SYSSTAT WHERE name = 'user rollbacks') AS rollback_start
FROM dual;

-- 第二步:等待目标时间段结束后执行以下查询
SELECT
    (c.commit_end - c.commit_start) + (r.rollback_end - r.rollback_start) AS total_transactions,
    t.start_time,
    SYSDATE AS end_time
FROM
    temp_trans_stats t,
    (SELECT value AS commit_end FROM V$SYSSTAT WHERE name = 'user commits') c,
    (SELECT value AS rollback_end FROM V$SYSSTAT WHERE name = 'user rollbacks') r;

-- 可选:清理临时表
DROP TABLE temp_trans_stats;

注意事项

  • 使用AWR视图需要SELECT_CATALOG_ROLE权限。
  • AWR默认每小时生成一次快照,保留7天,如需更长历史数据,需通过DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS调整保留策略。
  • V$SYSSTAT的数据是实例级的,数据库重启后会重置。

内容的提问来源于stack exchange,提问作者samg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:07:20