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: 按并发量从高到低排序。
相关推荐
橘子真甜~15 分钟前
C/C++ Linux网络编程15 - 网络层IP协议
linux·网络·c++·网络协议·tcp/ip·计算机网络·网络层
拾贰_C1 小时前
【Linux | Windows | Terminal Command】 Linux---grep | Windows--- findstr
linux·运维·服务器
JIngJaneIL2 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
微学AI2 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
阿华hhh2 小时前
Linux系统编程(标准io)
linux·开发语言·c++
虹科网络安全2 小时前
艾体宝洞察 | 利用“隐形字符”的钓鱼邮件:传统防御为何失效,AI安全意识培训如何补上最后一道防线
运维·网络·安全
廋到被风吹走2 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
石像鬼₧魂石2 小时前
Kali Linux 网络端口深度扫描
linux·运维·网络
alengan3 小时前
linux上面写python3日志服务器
linux·运维·服务器
yBmZlQzJ3 小时前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节