要查询Oracle数据库的QPS(Queries Per Second,每秒查询数),通常需要结合动态性能视图和统计信息来分析数据库的负载。以下是具体方法和示例:
一、QPS的定义
在Oracle中,"QPS" 并不是一个直接记录的指标,但可以通过以下两种方式近似计算:
- SQL执行频率:统计每秒执行的SQL语句总数(包括查询、DML等)。
- 逻辑读/物理读:通过逻辑读(logical reads)或物理读(physical reads)的变化估算负载。
二、实时计算QPS(基于SQL执行次数)
1. 通过v$sysstat统计全局SQL执行频率
-- 获取当前总SQL执行次数
SELECT name, value
FROM v$sysstat
WHERE name = 'execute count';
-- 计算实时QPS(间隔一段时间执行两次,手动计算差值)
-- 示例步骤:
-- 1. 第一次查询值:value1
-- 2. 等待 N 秒(如5秒)
-- 3. 第二次查询值:value2
-- QPS = (value2 - value1) / N
2. 自动化脚本示例
-- 第一次获取初始值
CREATE TABLE qps_temp AS
SELECT value AS start_value
FROM v$sysstat
WHERE name = 'execute count';
-- 等待10秒(在SQL*Plus中使用 `exec dbms_lock.sleep(10);`)
BEGIN
dbms_lock.sleep(10);
END;
/
-- 计算QPS
SELECT
(s.value - t.start_value) / 10 AS qps
FROM v$sysstat s, qps_temp t
WHERE s.name = 'execute count';
-- 清理临时表
DROP TABLE qps_temp;
三、通过AWR报告分析历史QPS
AWR(Automatic Workload Repository)报告记录了数据库的历史性能数据,适合分析高峰期的QPS。
1. 生成AWR报告
-- 生成当前快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
-- 生成AWR报告(需指定快照范围)
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
2. 在AWR报告中查找关键指标
在生成的AWR报告中,查找以下部分:
- Load Profile -> Executes (SQL):每秒执行的SQL语句数。
- Instance Activity Stats -> execute count:总执行次数。
四、通过动态性能视图监控活跃会话
1. 查看当前活跃SQL执行
SELECT
sql_id,
executions,
elapsed_time,
ROUND(elapsed_time / 1e6 / NULLIF(executions, 0), 4) AS avg_time_per_exec
FROM v$sql
WHERE executions > 0
ORDER BY elapsed_time DESC;
2. 监控逻辑读/物理读(间接反映负载)
SELECT
name,
value
FROM v$sysstat
WHERE name IN ('session logical reads', 'physical reads');
五、使用第三方工具
- Oracle Enterprise Manager (OEM):图形化展示每秒SQL执行数、TPS/QPS等。
- PL/SQL Developer/Toad:内置性能监控工具。
- 自定义脚本:通过定期采样 v$sysstat 或 v$sql 数据生成趋势图。
注意事项
- 权限要求:需具有 SELECT 权限访问 v$sysstat、v$sql 等动态性能视图(通常需要 DBA 权限)。
- 精确性:execute count 包含所有类型的SQL执行(SELECT/INSERT/UPDATE/DELETE),若需单独统计查询,需过滤 v$sql 中 sql_text 的语句类型。
- 实例重启影响:v$sysstat 的统计值在实例重启后会重置,而AWR数据持久化到仓库中。
通过以上方法,可以实时或历史性地分析Oracle数据库的QPS,帮助评估数据库负载和性能瓶颈。