簡単に言うと、1つのクエリでそれを行うことはできません。有用な情報を取得するには、有用なデータを収集するためのPL/SQLを作成する必要があります。
Oracleには「累積時間」統計があります。これは、エンジンが継続的な使用状況を追跡していることを意味します。分析の開始時間と終了時間を定義する必要があります。
V $ SYS_TIME_MODEL
から「DBCPU」を照会できます。select value into t_db_cpu_i
from sys.V_$SYS_TIME_MODEL
where stat_name = 'DB CPU' ; /* start time */
...
select value into t_db_cpu_f
from sys.V_$SYS_TIME_MODEL
where stat_name = 'DB CPU' ; /* end time */
#1 CPUまたは#8 CPUしかない場合、CPU統計は影響を受けます。したがって、エンジンが使用しているCPUの数を特定する必要があります。
V$PARAMETERから「cpu_count」をクエリしてこの値を取得できます。
select value into t_cpus
from sys.v_$parameter
where name='cpu_count' ;
次に、それは非常に簡単です:
最大合計時間は秒*CPUの数になるため、#1 CPUしかない場合、最大合計時間は「60」になりますが、#2 CPUがある場合、最大合計時間は「120」になります..#3 CPU 「180」などになります...
したがって、sysdateを使用して分析期間の開始時間と終了時間を取得します。
t_start := sysdate ;
t_end := sysdate ;
そして今、あなたは以下を計算します:
seconds_elapsed := (t_end - t_start)*24*60*60 ;
total_time := seconds_elapsed * t_cpus ;
used_cpu := t_db_cpu_f - t_db_cpu_i ;
secs_cpu := seconds_elapsed/1000000 ;
avgcpu := (secs_cpu/total_time)*100 ;
そしてそれだけです、「avgcpu」はあなたが探している価値です。