oracle 11g无法直接查日志传输吞吐量(mb/s),因v$archived_log无bytes字段,需结合os层文件大小与归档间隔估算;v$redo_dest_resp_histogram仅提供响应时间分布,不反映数据量;实际吞吐受log_archive_dest_2配置(如net_timeout、reopen)影响更大。

Oracle 11g 中无法直接查“日志传输吞吐量(MB/s)”,必须通过归档日志生成速率 + 传输延迟组合推算;原生视图不提供字节数或带宽指标。
为什么 v$archived_log 没有字节数字段
Oracle 11g 的 v$archived_log 视图包含 sequence#、first_change#、next_change#、completion_time,但**没有 blocks、bytes 或 file_size 字段**。这意味着你无法直接用“单个归档日志大小 ÷ 传输耗时”得出瞬时吞吐量。
常见错误是误以为 blocks 列存在(它在 12c+ 才加入),或试图从 dba_data_files 推算——但归档日志是压缩/非结构化二进制文件,块数与实际体积无固定换算关系。
可行替代路径:
- 用
ls -l在操作系统层统计归档目录下近期日志文件的平均大小(如:最近 10 个*.log文件的stat -c "%s" *.log | awk '{s+=$1} END {print s/NR}') - 结合
v$archived_log.completion_time计算单位时间归档数量,再乘以平均文件大小,得到近似吞吐量 - 该方法仅适用于本地归档路径可访问、且未启用 LOG_ARCHIVE_DEST_n 的 COMPRESSION 的场景
用 v$redo_dest_resp_histogram 查响应时间分布
v$redo_dest_resp_histogram 是 Oracle 11g 提供的唯一能反映传输性能的动态性能视图,但它只记录**响应时间(duration)和频次(frequency)**,不记录数据量。
执行以下查询可判断传输是否卡顿:
SELECT frequency, duration FROM v$redo_dest_resp_histogram WHERE dest_id = 2 AND frequency > 1 ORDER BY duration;
关键点:
-
dest_id = 2对应远程 standby 目的地(即LOG_ARCHIVE_DEST_2) - 如果
duration长期 ≥ 500ms(尤其在高并发归档时频繁出现),说明网络或备库 I/O 成为瓶颈,间接限制吞吐 - 该视图不会自动清空,需定期
EXEC DBMS_REDACT.FLUSH_REDO_DEST_RESP_HISTOGRAM(11g 不支持此过程)——所以更推荐人工观察趋势,而非依赖实时值
用归档间隔 + sequence 差值估算平均速率
最实用、无需 OS 权限的方法:基于主库归档节奏反推吞吐下限。
执行:
SELECT
TRUNC(completion_time) day,
COUNT(*) archs_per_day,
ROUND(AVG(ELAPSED_SECONDS), 2) avg_sec_between_archs
FROM (
SELECT
completion_time,
LEAD(completion_time) OVER (ORDER BY sequence#) - completion_time AS elapsed_days,
(LEAD(completion_time) OVER (ORDER BY sequence#) - completion_time) * 86400 AS elapsed_seconds
FROM v$archived_log
WHERE completion_time >= SYSDATE - 1
AND dest_id = 1
)
GROUP BY TRUNC(completion_time);
解释:
- 假设你已知平均归档日志大小为 120MB(来自 OS 层统计),且
avg_sec_between_archs是 45 秒,则平均吞吐 ≈ 120 / 45 ≈ 2.67 MB/s - 这个值是“生成速率”,若
v$archive_dest_status.status显示VALID且v$managed_standby.process = 'RFS'持续接收,则基本等于传输吞吐 - 若发现
v$archive_dest_status.error非空,或v$archive_gap有记录,则该估算失效——此时传输已中断或积压
真正影响吞吐的往往是 LOG_ARCHIVE_DEST_2 的配置细节:比如用了 ASYNC 但没设 NET_TIMEOUT,或 REOPEN=0 导致单次失败就停传;这些比“查多少 MB/s”更值得盯紧。











