लंबी कहानी छोटी:आप इसे एक प्रश्न के साथ नहीं कर पाएंगे, उपयोगी जानकारी प्राप्त करने के लिए आपको उपयोगी डेटा एकत्र करने के लिए PL/SQL लिखना होगा।
Oracle में "संचित समय" आँकड़े हैं, इसका मतलब है कि इंजन उपयोग का निरंतर ट्रैक रखता है। आपको विश्लेषण के लिए प्रारंभ समय और समाप्ति समय निर्धारित करना होगा।
आप V$SYS_TIME_MODEL
. से 'DB CPU' को क्वेरी कर सकते हैं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' ;
फिर, यह बहुत आसान है:
अधिकतम कुल समय सेकंड * सीपीयू की संख्या होगी, इसलिए यदि आपके पास सिर्फ # 1 सीपीयू है तो अधिकतम कुल समय "60" होगा, लेकिन यदि आपके पास # 2 सीपीयू हैं तो अधिकतम कुल समय "120" होगा .. #3 सीपीयू होगा "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" वह मान है जिसकी आप तलाश कर रहे हैं।