Oracle统计API并发访问量

最近遇到统计Oracle数据库请求记录表中所有API的最高并发量,这个就涉及从日志表中提取API访问记录,并计算每个API在每个时间点的并发请求数,然后找出每个API的最高并发量。

SQL实现

使用Oracle的窗口函数COUNT(*) OVER来计算每个时间点的并发请求数,随后找出每个API的最高并发量。

sql 复制代码
WITH concurrent_requests AS (
    SELECT
        api_name,
        access_time,
        COUNT(*) OVER (PARTITION BY api_name, access_time) AS concurrent_requests
    FROM
        api_logs
    WHERE
        access_time BETWEEN TO_TIMESTAMP('2023-07-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                       AND TO_TIMESTAMP('2023-07-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
)
SELECT
    api_name,
    MAX(concurrent_requests) AS max_concurrent_requests
FROM
    concurrent_requests
GROUP BY
    api_name
ORDER BY
    max_concurrent_requests DESC;

说明

  • WITH concurrent_requests AS (...): 这个CTE计算每个API在每个时间点的并发请求数。
  • COUNT(*) OVER (PARTITION BY api_name, access_time): 使用分析函数按API名称和时间戳分区,计算每个时间点的并发请求数。
  • WHERE access_time BETWEEN ...AND...: 过滤条件只选取7月份的数据。这里使用TO_TIMESTAMP函数来指定时间范围。
  • MAX(concurrent_requests): 找出每个API在7月份的最高并发量。
  • GROUP BY api_name: 将结果按API名称分组,以统计每个API的最高并发量。
  • ORDER BY max_concurrent_requests DESC: 按并发量从高到低排序。
相关推荐
シ風箏3 分钟前
MinIO【部署 02】Linux集群版本及Windows单机版、单机多目录版、分布式版(cmd启动脚本及winsw脚本分享)
linux·windows·分布式·minio·文件存储系统
问道飞鱼4 分钟前
嵌入式数据库sqlite和rocksdb的介绍以及对比
数据库·sqlite·rocksdb
q5673152310 分钟前
Django 文件上传时出现 500 错误
开发语言·数据库·后端·python·django·sqlite
容若只如初见17 分钟前
项目实战应用Redis分布式锁
数据库·redis·分布式
Justice link28 分钟前
Apache-wed服务器环境的安装
运维·服务器·apache
程序员黄老师30 分钟前
Ubuntu 下载软件包时,提示 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
linux·运维·ubuntu
向日葵般的数学人~35 分钟前
sql刷题常用函数
sql
可遇_不可求39 分钟前
PyAutoGUI:自动化操作的强大工具
运维·自动化
元凌丶1 小时前
Linux杂项知识
linux·运维·服务器
goTsHgo1 小时前
flink中slotSharingGroup() 的详解
java·数据库·flink