elasticsearch入門系列">elasticsearch入門系列
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取數據的次數
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小時內刪除侵權內容。