Oracle SQL調優系列之sql共享池

      網友投稿 838 2025-04-01

      遇到需要排查一個系統使用sql的情況,可以通過查詢oracle的$sql、$ssssion、$sqlarea進行統計排查


      排查時可以先看一下$sql和$session的基本信息

      select * from v$sql a, v$session b where b.SQL_ADDRESS = a.ADDRESS and b.SQL_HASH_VALUE = a.HASH_VALUE and b.SQL_CHILD_NUMBER = a.CHILD_NUMBER

      1

      2

      3

      4

      5

      $sqlarea表列意思:

      引用:https://blog.csdn.net/study4034/article/details/51331120

      SQL_TEXT //當前正在執行的游標的sql文本的前1000個字符

      SQL_FULLTEXT //CLOB類型 整個sql文本,不用借助于V$SQL_TEXT視圖來查看整個文本

      SQL_ID //庫緩存中的SQL父游標的標志

      SHARABLE_MEM //子游標使用的共享內存的大小,bytes

      PERSISTENT_MEM //子游標生存時間中使用的固定內存的總量,bytes

      RUNTIME_MEM //在子游標執行過程中需要的固定內存大小,bytes

      SORTS //子游標發生的排序數量

      LOADED_VERSIONS // 顯示上下文堆是否載入,1是,0否

      USERS_OPENING // 執行這個sql的用戶數

      FETCHES // sql取數據的次數

      Oracle SQL調優系列之sql共享池

      EXECUTIONS //自從被載入共享池后,sql執行的次數

      FIRST_LOAD_TIME // 父游標產生的時間戳

      PARSE_CALLS //解析調用的次數

      DISK_CALLS //讀磁盤的次數

      DIRECT_WRITES //直接寫的次數

      BUFFER_GETS //直接從buffer中得到數據的次數

      APPLICATION_WAIT_TIME // 應用等待時間,毫秒

      CONCURRENCY_WAIT_TIME //并發等待時間,毫秒

      USER_IO_WAIT_TIME //用戶IO等待時間

      ROWS_PROCESSED SQL //解析sql返回的總行數

      OPTIMIZER_MODE //優化器模式

      OPTIMIZER_COST //優化器對于sql給出的成本

      PARSING_USER_ID //第一個創建這個子游標的用戶id

      HASH_VALUES //解析產生的哈希值

      CHILD_NUMBER //該子游標的數量

      SERVICE //服務名

      CPU_TIME //該子游標解析,執行和獲取數據使用的CPU時間,毫秒

      ELAPSED_TIME //sql的執行時間,毫秒

      INVALIDATIONS //該子游標的無效次數

      MODULE //第一次解析該語句時,通過DBMS_APPLICAITON_INFO.SET_ACTION設置的模塊名

      ACTION //第一次解析該語句時,通過DBMS_APPLICAITON_INFO.SET_ACTION設置的動作名

      IS_OBSOLETE //標記該子游標過期與否,當子游標過大時會發生這種情況

      is_bind_sensitive //不僅指出是否使用綁定變量窺測來生成執行計劃,而且指出這個執行計劃是否依賴于窺測到的值。如果是,這個字段會被設置為Y,否則會被設置為N。

      is_bind_aware //表明游標是否使用了擴展的游標共享。如果是,這個字段會被設置為Y,如果不是,這個字段會被設置為N。如果是設置為N,這個游標將被廢棄,不再可用。

      is_shareable //表明游標能否被共享。如果可以,這個字段會被設置為Y,否則,會被設置為N。如果被設置為N,這個游標將被廢棄,不再可用。

      oracle的sql共享池$sqlarea查詢sql的執行次數,分析SQL執行性能

      EXECUTIONS :所有子游標執行SQL的次數

      DISK_READS:所有子游標執行SQL需要讀的硬盤次數

      BUFFER_GETS :所有子游標執行SQL需要讀的內存次數

      ELAPSED_TIME:所有子游標執行SQL需要的時間

      分析SQL執行性能

      SELECT SQL_TEXT, SQL_FULLTEXT, ELAPSED_TIME, DISK_READS, BUFFER_GETS, EXECUTIONS, Round(ELAPSED_TIME / EXECUTIONS ,2), ROUND(DISK_READS / EXECUTIONS, 2), ROUND(BUFFER_GETS / EXECUTIONS , 2), ROUND((BUFFER_GETS - DISK_READS) / BUFFER_GETS, 2) FROM V$SQLAREA WHERE EXECUTIONS > 0 AND BUFFER_GETS > 0 AND (BUFFER_GETS - DISK_READS) / BUFFER_GETS < 0.8 ORDER BY Round(ELAPSED_TIME / EXECUTIONS ,2) desc;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      然后解釋一下這些意義:

      Round(ELAPSED_TIME / EXECUTIONS ,2):求每個游標執行SQL需要的時間

      ROUND(DISK_READS / EXECUTIONS, 2):求每個游標執行SQL需要讀磁盤的次數

      ROUND(BUFFER_GETS / EXECUTIONS , 2):求每個游標執行SQL需要讀內存的次數

      ROUND((BUFFER_GETS - DISK_READS) / BUFFER_GETS, 2) :SQL命中率

      所有歸納一下,就是去$sqlarea共享池查詢統計,然后分析sql,上述數據越低就說明SQL執行速度越高,性能越好

      Oracle SQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在excel表格中換行?
      下一篇:word表格文字怎么設置上下居中(word怎樣讓表格文字上下居中)
      相關文章
      亚洲精品福利网站| 亚洲fuli在线观看| 国产精品亚洲精品久久精品| 亚洲国产精品美女| 亚洲美女视频免费| 亚洲精品影院久久久久久| 中文字幕亚洲免费无线观看日本 | 亚洲国产精品无码久久| 亚洲激情视频图片| 亚洲国产综合精品中文第一| 亚洲国产激情在线一区| 亚洲看片无码在线视频 | 久久精品国产亚洲精品| 亚洲日韩小电影在线观看| 国产亚洲精品自在久久| 午夜亚洲AV日韩AV无码大全| 久久久久久亚洲AV无码专区| 亚洲成a人片77777群色| 国产99在线|亚洲| 色偷偷噜噜噜亚洲男人| 亚洲а∨天堂久久精品| 久久精品国产亚洲精品| 亚洲va中文字幕无码久久不卡| 久久精品国产亚洲香蕉| 亚洲色av性色在线观无码| 国产精品亚洲综合五月天| 亚洲高清国产拍精品熟女| 亚洲国产精品专区在线观看| 久久久久亚洲AV成人网| 亚洲国产精品无码久久一线| 亚洲五月六月丁香激情| 亚洲区视频在线观看| 亚洲精品无码中文久久字幕| 亚洲AⅤ视频一区二区三区| 4338×亚洲全国最大色成网站| 黑人精品videos亚洲人| 77777_亚洲午夜久久多人| 亚洲综合色7777情网站777| 亚洲国产欧洲综合997久久| 亚洲精品无码永久在线观看| 亚洲av无码一区二区三区乱子伦|