最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle Session每日統(tǒng)計功能實現

 更新時間:2022年02月08日 09:40:06   作者:空白葛  
客戶最近有這樣的需求,想通過統(tǒng)計Oracle數據庫活躍會話數,并記錄在案,利用比對歷史的活躍會話的方式,實現對系統(tǒng)整體用戶并發(fā)量有大概的預估,本文給大家分享具體實現方法,感興趣的朋友一起看看吧

背景

客戶最近有這樣的需求,想通過統(tǒng)計Oracle數據庫活躍會話數,并記錄在案,利用比對歷史的活躍會話的方式,實現對系統(tǒng)整體用戶并發(fā)量有大概的預估。

功能分析

客戶現場有不少Oracle數據庫,如果每一套都進行查詢,效率太慢,而且數據也不能保留,所以需要通過腳本批量查詢的方式實現。具體功能要點如下:

  • 編寫統(tǒng)計會話的SQL腳本
  • 通過shell 批量管理眾多Oracle實例,for實現
  • 輸出每次查詢的記錄留存,根據實例分別保存
  • 在有一次初始數據之后,以后的每天查出增量數據

眾多Oracle實例統(tǒng)計完成之后,統(tǒng)一輸出到一個文件便于查看

具體實現

統(tǒng)計會話SQL腳本

根據客戶要求,統(tǒng)計活躍會話數,一天運行一次即可,沒必要實時數據,數據可以從數據庫V$SESSION,V$ACTIVE_SESSION_HISTORY,DBA_HIST_ACTIVE_SESS_HISTORY三個視圖中獲取,V$SESSION視圖為當前實時活躍會話信息(內存中保存,實時信息),V$ACTIVE_SESSION_HISTORY視圖為1s從V$SESSION獲取的活躍會話信息(內存中保存,保存時長依賴內存ash_buffers參數),DBA_HIST_ACTIVE_SESS_HISTORY視圖每10s從V$ACTIVE_SESSION_HISTORY視圖中獲取一份(持久化保存,一般為7天),經過以上分析,SQL所需數據理應通過DBA_HIST_ACTIVE_SESS_HISTORY視圖獲取。
以下是具體的SQL查詢語句,參考redo log切換統(tǒng)計語句格式。

prompt
prompt Session cnt
prompt ~~~~~~~~~~~~~~~~
set linesize 200
set pages 2000
col 00 for 9999
col 01 for 9999
col 02 for 9999
col 03 for 9999
col 04 for 9999
col 05 for 9999
col 06 for 9999
col 07 for 9999
col 08 for 9999
col 09 for 9999
col 10 for 9999
col 11 for 9999
col 12 for 9999
col 13 for 9999
col 14 for 9999
col 15 for 9999
col 16 for 9999
col 17 for 9999
col 18 for 9999
col 19 for 9999
col 20 for 9999
col 21 for 9999
col 22 for 9999
col 23 for 9999
select INST_ID,
       a.ttime,
       sum(c0) "00",
       sum(c1) "01",
       sum(c2) "02",
       sum(c3) "03",
       sum(c4) "04",
       sum(c5) "05",
       sum(c6) "06",
       sum(c7) "07",
       sum(c8) "08",
       sum(c9) "09",
       sum(c10) "10",
       sum(c11) "11",
       sum(c12) "12",
       sum(c13) "13",
       sum(c14) "14",
       sum(c15) "15",
       sum(c16) "16",
       sum(c17) "17",
       sum(c18) "18",
       sum(c19) "19",
       sum(c20) "20",
       sum(c21) "21",
       sum(c22) "22",
       sum(c23) "23"
  from (select INST_ID,
               ttime,
               decode(tthour, '00', c_cnt, 0) c0,
               decode(tthour, '01', c_cnt, 0) c1,
               decode(tthour, '02', c_cnt, 0) c2,
               decode(tthour, '03', c_cnt, 0) c3,
               decode(tthour, '04', c_cnt, 0) c4,
               decode(tthour, '05', c_cnt, 0) c5,
               decode(tthour, '06', c_cnt, 0) c6,
               decode(tthour, '07', c_cnt, 0) c7,
               decode(tthour, '08', c_cnt, 0) c8,
               decode(tthour, '09', c_cnt, 0) c9,
               decode(tthour, '10', c_cnt, 0) c10,
               decode(tthour, '11', c_cnt, 0) c11,
               decode(tthour, '12', c_cnt, 0) c12,
               decode(tthour, '13', c_cnt, 0) c13,
               decode(tthour, '14', c_cnt, 0) c14,
               decode(tthour, '15', c_cnt, 0) c15,
               decode(tthour, '16', c_cnt, 0) c16,
               decode(tthour, '17', c_cnt, 0) c17,
               decode(tthour, '18', c_cnt, 0) c18,
               decode(tthour, '19', c_cnt, 0) c19,
               decode(tthour, '20', c_cnt, 0) c20,
               decode(tthour, '21', c_cnt, 0) c21,
               decode(tthour, '22', c_cnt, 0) c22,
               decode(tthour, '23', c_cnt, 0) c23
          from (select instance_number INST_ID,
                       to_char(sample_time, 'YYYY-MM-DD') ttime,
                       to_char(sample_time, 'HH24') tthour,
                       count(1) c_cnt
                  from dba_hist_active_sess_history
                 where sample_time >= trunc(sysdate) - 7
                   and sample_time < trunc(sysdate)  - 1
                 group by instance_number,
                          to_char(sample_time, 'YYYY-MM-DD'),
                          to_char(sample_time, 'HH24'))) a
 group by INST_ID, ttime
 order by ttime desc;

語句執(zhí)行完成之后,效果如下

批量Oracle實例 for實現

根據客戶現場環(huán)境,有多臺服務器,每套服務器上部署多個實例,為了避免重復的代碼,此處大概需要2個嵌套for循環(huán),外層負責服務器,內存負責實例,外層實現邏輯如下:

function Startmain
{
 #machines=(Xx)
 machines=(Xx Xx Xx xX Xx)
 v_flag=$1
 for i in ${!machines[*]}
 do
  local v_machine="${machines[$i]}"
  if [[ $v_machine == "Xx" ]];then
    v_args=("XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521")
    v_ip="xxx.xxx.xxx.xxx"
  elif [[ $v_machine == "Xx" ]];then
    v_args=("XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521")
    v_ip="xxx.xxx.xxx.xxx"
  elif [[ $v_machine == "Xx" ]];then
    v_args=("XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521")
    v_ip="xxx.xxx.xxx.xxx"
  elif [[ $v_machine == "xx" ]];then
    v_args=("XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "XXX,1521" "xxxx,1527")
    v_ip="xxx.xxx.xxx.xxx"
  elif [[ $v_machine == "Xx" ]];then
    v_args=("XXX,1521" "XXX,1521" "xxxx,1526")
    v_ip="xxx.xxx.xxx.xxx"
  else
    echo "Error"
  fi
  echo "$v_machine------------------------------------"|tee -a $newfilename
  GetSesscnt  $v_machine "${v_args[*]}" $v_ip $v_flag
 done
}

外層for通過調用GetSesscnt函數,實現對服務器內部實例的解析,(注:在增量查詢之后調用了日志轉存函數,把數據統(tǒng)一輸出到一個文件)內層實現邏輯如下:

function GetSesscnt
{
 if [[ $# -ne 4 ]];then
   echo "GetSesscnt XX (XXX XXX XXX XXX XXX) xxx.xxx.xxx.xxx flag"
 fi
 machine=$1
 args=($2)
 s_ip=$3
 v_flag=$4
 for i in ${!args[*]} 
 do
 local v_arg="${args[$i]}"
 v_name=${v_arg%,*}
 v_port=${v_arg#*,}
 recho "$machine $v_name start.." |tee -a $newfilename
 if [[ $v_flag == "incr" ]];then
 $ORACLE_HOME/bin/sqlplus -S "system/password@$s_ip:$v_port/$v_name" <<EOF > $pathpwd/$1_$v_name
@$pathpwd/sessioncntincr.sql
exit;
EOF
 LogConvert $pathpwd $1_$v_name
 else
 $ORACLE_HOME/bin/sqlplus -S "system/password@$s_ip:$v_port/$v_name" <<EOF > $pathpwd/$1_$v_name".log"
@$pathpwd/sessioncntinit.sql
exit;
EOF
 fi
 recho "$machine $v_name end"|tee -a $newfilename
 done
}

上述shell腳本中,同時包含了對不同服務器不同實例的結果留存,根據傳輸的是增量還是全量參數,實現對不同數據的生成保存,全量數據為.log后綴,增量數據沒有l(wèi)og后綴保存記錄如下

全量數據格式如下:

增量數據格式如下:

數據統(tǒng)一匯總

通過以上2步基本把所需的數據全部查詢出來,有全量數據之后,每天跑增量即可,剩下工作就把每天跑的增量數據結合全量數據匯總和,統(tǒng)一輸出到一個文件中,實現代碼如下:

function LogConvert
{
 v_log_path=$1
 v_log_name=$2
 grep -v '^$' $v_log_path/$v_log_name > $v_log_path/log_temp
 v_date=(`cat $v_log_path/log_temp | awk '{print $2}'`)
 v_cnt=(`grep $v_date $v_log_path/$v_log_name".log"|wc -l`)
 if [[ $v_cnt == 0 ]]; then
  sed -i "10 r $v_log_path/log_temp" $v_log_path/$v_log_name".log"
 fi 
 head -40 $v_log_path/$v_log_name".log" >> $newfilename
}

至此,session 統(tǒng)計腳本工作完成,文章中只羅列了部分代碼實現邏輯。

到此這篇關于Oracle Session每日統(tǒng)計的文章就介紹到這了,更多相關Oracle Session每日統(tǒng)計內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Oracle執(zhí)行計劃及性能調優(yōu)詳解使用方法

    Oracle執(zhí)行計劃及性能調優(yōu)詳解使用方法

    在Oracle數據庫中,通過使用EXPLAIN PLAN、AWR、SQL Trace等工具可以對SQL性能進行詳細分析,EXPLAIN PLAN可以展示SQL執(zhí)行計劃和關鍵性能指標如操作類型、成本、行數等,本文給大家介紹Oracle執(zhí)行計劃及性能調優(yōu)詳解使用方法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Oracle查詢優(yōu)化之高效實現僅查詢前10條記錄的方法與實踐

    Oracle查詢優(yōu)化之高效實現僅查詢前10條記錄的方法與實踐

    這篇文章主要介紹了Oracle查詢優(yōu)化之高效實現僅查詢前10條記錄的相關資料,包括使用ROWNUM、ROW_NUMBER()函數、FETCH?FIRST(適用于Oracle12c及以上版本)以及LIMIT風格(僅適用于兼容模式),需要的朋友可以參考下
    2025-01-01
  • Oracle數據庫邏輯備份的SH文件

    Oracle數據庫邏輯備份的SH文件

    Oracle數據庫邏輯備份的SH文件...
    2007-03-03
  • Oracle的SYS_GUID()函數用法及說明

    Oracle的SYS_GUID()函數用法及說明

    這篇文章主要介紹了Oracle的SYS_GUID()函數用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Oracle安裝遇到INS-30131錯誤的解決方法

    Oracle安裝遇到INS-30131錯誤的解決方法

    這篇文章主要介紹了Oracle安裝遇到錯誤INS-30131的解決方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Oracle連接配置解讀

    Oracle連接配置解讀

    這篇文章主要介紹了Oracle連接配置解讀,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Oracle 11g 安裝配置方法圖文教程

    Oracle 11g 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了Oracle 11g 下載與安裝配置方法的圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Oracle數據庫中使用正則表達式的超詳細教程

    Oracle數據庫中使用正則表達式的超詳細教程

    正則表達式是一種描述簡單和復雜的搜索和處理模式的方法,下面這篇文章主要給大家介紹了關于Oracle數據庫中使用正則表達式的超詳細教程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • oracle數據庫截取字符串substr函數使用舉例

    oracle數據庫截取字符串substr函數使用舉例

    在Oracle數據庫中可以使用SUBSTR函數來截取字符串,這篇文章主要給大家介紹了關于oracle數據庫截取字符串substr函數使用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01
  • Oracle Index 的三個問題

    Oracle Index 的三個問題

    Oracle Index 的三個問題...
    2007-03-03

最新評論

漳州市| 犍为县| 太康县| 海南省| 鄂托克旗| 十堰市| 高陵县| 沂水县| 九寨沟县| 湖南省| 镇平县| 南充市| 平定县| 定远县| 邢台县| 马边| 新野县| 南汇区| 博白县| 武穴市| 马龙县| 江川县| 阿尔山市| 临西县| 太原市| 上杭县| 遂川县| 阜新市| 新密市| 鄂尔多斯市| 林口县| 黄冈市| 大冶市| 肃宁县| 鄯善县| 视频| 嘉义县| 高清| 乃东县| 东至县| 左贡县|