【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】ob怎么统计某个租户,每小时产生的归档量
OB好像没有明确的视图会记录日志量,但是知识库里面有统计日志的办法
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207765?back=kb
欢迎给obdiag的一键洞察加上这个场景
https://www.oceanbase.com/docs/common-obdiag-cn-1000000002488237
代码仓库:https://github.com/oceanbase/obdiag/tree/master/plugins/display/tasks/observer
好的,谢谢,我试下
startTime=2022-03-07T11%3A34%3A50.000%2B08%3A00&endTime=2022-03-07T14%3A34%3A50.000%2B08%3A00 这里的时间怎么选取呀,随便填写的吗
做了类似需求的简单脚本,可以参考示例 clog_size.sh
#!/bin/bash
# [root@10-186-63-160 ~]# sh clog_size.sh /data/log1/demo/clog day
# Statistics for /data/log1/demo/clog by day:
# Date Size(MB) Count
# 2024-12-24 13696.00 214
# 2024-12-25 9792.00 153
# 2024-12-26 7360.00 115
# [root@10-186-63-160 ~]# sh clog_size.sh /data/log1/demo/clog hour
# Statistics for /data/log1/demo/clog by hour:
# Date Hour Size(MB) Count
# 2024-12-24 13:00 192.00 3
# 2024-12-24 14:00 5056.00 79
# 2024-12-24 15:00 5952.00 93
# 2024-12-24 16:00 2304.00 36
# 2024-12-24 18:00 64.00 1
# 2024-12-24 20:00 64.00 1
# 2024-12-24 22:00 64.00 1
# 2024-12-25 00:00 64.00 1
# 2024-12-25 02:00 64.00 1
# 2024-12-25 04:00 64.00 1
# 2024-12-25 07:00 64.00 1
# 2024-12-25 09:00 64.00 1
# 检查参数数量
if [ $# -lt 1 ]; then
echo "Usage: $0 <directory> [day|hour]"
exit 1
fi
# 获取目标目录
TARGET_DIR=$1
# 判断目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "Error: Directory $TARGET_DIR does not exist."
exit 1
fi
# 获取时间参数(day 或 hour)
MODE=${2:-day}
# 根据模式统计文件大小和数量
if [ "$MODE" == "day" ]; then
echo "Statistics for $TARGET_DIR by day:"
find "$TARGET_DIR" -type f -printf '%TY-%Tm-%Td %s\n' | awk '
{
sizes[$1] += $2;
counts[$1]++;
}
END {
for (date in sizes) {
printf "%s %.2f %d\n", date, sizes[date] / (1024 * 1024), counts[date];
}
}' | sort | awk '
BEGIN {
printf "%-12s %-12s %-10s\n", "Date", "Size(MB)", "Count";
}
{
printf "%-12s %-12.2f %-10d\n", $1, $2, $3;
}'
elif [ "$MODE" == "hour" ]; then
echo "Statistics for $TARGET_DIR by hour:"
find "$TARGET_DIR" -type f -printf '%TY-%Tm-%Td %TH:00 %s\n' | awk '
{
sizes[$1" "$2] += $3;
counts[$1" "$2]++;
}
END {
for (datehour in sizes) {
printf "%s %.2f %d\n", datehour, sizes[datehour] / (1024 * 1024), counts[datehour];
}
}' | sort | awk '
BEGIN {
printf "%-20s %-12s %-10s\n", "Date Hour", "Size(MB)", "Count";
}
{
printf "%-20s %-12.2f %-10d\n", $1" "$2, $3, $4;
}'
else
echo "Error: Invalid mode. Use 'day' or 'hour'."
exit 1
fi
好的,谢谢
学习了
根据文档库中的信息,以下是关于如何统计某个租户每小时产生的归档量以及时间参数选取的详细解答:
1. 统计某个租户每小时产生的归档量
OceanBase 数据库按照 Piece 来组织和管理归档日志数据。一个 Piece 是某个租户连续一段时间内完备日志的集合,时间段由 LOG_ARCHIVE_DEST
参数中的 piece_switch_interval
属性控制(参考文档片段 4)。因此,可以通过以下步骤统计某个租户每小时产生的归档量:
-
设置归档日志的时间段:将
piece_switch_interval
设置为1h
,这样每个 Piece 就会包含一小时内产生的所有日志。 -
查询归档日志的大小:通过查询归档日志的元数据表(如
__all_archive_log
),可以获取每个 Piece 的大小。例如,执行以下 SQL 查询:SELECT tenant_id, piece_id, start_time, end_time, file_size FROM __all_archive_log WHERE tenant_id = <目标租户ID> AND start_time >= TO_TIMESTAMP('2022-03-07 11:00:00', 'YYYY-MM-DD HH24:MI:SS') AND end_time <= TO_TIMESTAMP('2022-03-07 14:00:00', 'YYYY-MM-DD HH24:MI:SS');
-
tenant_id
:目标租户的 ID。 -
piece_id
:归档日志的 Piece ID。 -
start_time
和end_time
:Piece 的起止时间。 -
file_size
:Piece 的文件大小。
-
通过上述查询结果,可以统计出每小时产生的归档日志量。
2. 时间参数的选取
在 URL 中的时间参数 startTime
和 endTime
并非随意填写,而是需要根据实际需求设定。以下是选取时间参数的建议:
-
明确统计范围:确定需要统计的起始时间和结束时间。例如,如果要统计从 2022-03-07 11:00:00 到 2022-03-07 14:00:00 的归档量,则应将
startTime
和endTime
分别设置为这两个时间点。 -
时间格式要求:时间参数需要遵循 ISO 8601 格式,并且需要进行 URL 编码。例如:
- 原始时间:
2022-03-07T11:34:50+08:00
- URL 编码后:
2022-03-07T11%3A34%3A50.000%2B08%3A00
- 原始时间:
-
避免时间重叠或遗漏:确保
startTime
和endTime
覆盖完整的统计区间,且不重叠或遗漏。
总结
-
统计归档量:通过调整
piece_switch_interval
和查询__all_archive_log
表,可以统计某个租户每小时产生的归档量。 -
时间参数选取:根据实际需求设定
startTime
和endTime
,并确保时间格式正确且覆盖完整统计区间。
如果仍有疑问,请进一步说明具体需求,我们将尽力为您解答!
更多信息请查看:
AI幻觉是吧。。这张表都搜不到
是的,感谢反馈
学习