日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle v$SQLAREA

發布時間:2023/12/18 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle v$SQLAREA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

v$sql與v$sqlarea基本相同,記錄共享sql區(share pool)中sql統計信息,如內存消耗、IO(物流磁盤讀和邏輯內存讀)、排序操作、哈希ID等數據。不同之處在于v$sql為每一條sql保留一個條目,而v$sqlarea中根據sql_text進行group by,統計列進行sum(),通過version_count計算子指針的個數。

? ? ? ? ?sql_text相同的sql語句在數據庫中意義可能完全不同,此時,v$sql會有這兩條完全一樣的sql各自的統計信息,而在v$sqlarea中sql_text相同的2個指針會合并,執行次數,DISK_READS,BUFFER_GETS等統計信息會累加,這就是v$sqlarea的聚合作用

?????????v$sqltext中沒有統計信息,卻存儲著完整的sql語言及其哈希ID等。

?????????v$session主要用來確定會話相關信息,如通過SID和SERIAL來確定一個Session、會話擁有者用戶名username、會話狀態、會話由哪個客戶端發起、正在執行什么sql(通過sql_address、sql_hash_value、sql_id、sql_child_number確定,再借助v$sqltext就可以知道)、鎖等待相關信息(如所在表、文件、塊、被鎖行)等。

?

V$SQLAREA?
  本視圖持續跟蹤所有shared pool中的共享cursor,在shared pool中的每一條SQL語句都對應一列。本視圖在分析SQL語句資源使用方面非常重要。?

V$SQLAREA中的信息列?

HASH_VALUE:SQL語句的Hash值。?
ADDRESS:SQL語句在SGA中的地址。?
這兩列被用于鑒別SQL語句,有時,兩條不同的語句可能hash值相同。這時候,必須連同ADDRESS一同使用來確認SQL語句。?
PARSING_USER_ID:為語句解析第一條CURSOR的用戶?
VERSION_COUNT:語句cursor的數量?
KEPT_VERSIONS:?
SHARABLE_MEMORY:cursor使用的共享內存總數?
PERSISTENT_MEMORY:cursor使用的常駐內存總數?
RUNTIME_MEMORY:cursor使用的運行時內存總數。?
SQL_TEXT:SQL語句的文本(最大只能保存該語句的前1000個字符)。?
MODULE,ACTION:使用了DBMS_APPLICATION_INFO時session解析第一條cursor時的信息?

V$SQLAREA中的其它常用列?

SORTS: 語句的排序數?
CPU_TIME: 語句被解析和執行的CPU時間?
ELAPSED_TIME: 語句被解析和執行的共用時間?
PARSE_CALLS: 語句的解析調用(軟、硬)次數?
EXECUTIONS: 語句的執行次數?
INVALIDATIONS: 語句的cursor失效次數?
LOADS: 語句載入(載出)數量?
ROWS_PROCESSED: 語句返回的列總數?

V$SQLAREA中的連接列Column View Joined Column(s)?
HASH_VALUE, ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS?
HASH_VALUE, ADDRESS V$SQLTEXT, V$SQL, V$OPEN_CURSOR HASH_VALUE, ADDRESS?
SQL_TEXT V$DB_OBJECT_CACHE NAME?

示例:?
1.查看消耗資源最多的SQL:?

Sql代碼?

  • SELECT?hash_value,?executions,?buffer_gets,?disk_reads,?parse_calls??
  • FROM?V$SQLAREA??
  • WHERE?buffer_gets?>?10000000?OR?disk_reads?>?1000000??
  • ORDER?BY?buffer_gets?+?100?*?disk_reads?DESC;??

  • 2.查看某條SQL語句的資源消耗:?

    Sql代碼?

  • SELECT?hash_value,?buffer_gets,?disk_reads,?executions,?parse_calls??
  • FROM?V$SQLAREA??
  • WHERE?hash_Value?=?228801498?AND?address?=?hextoraw('CBD8E4B0');??


  • 查找前10條性能差的sql語句?

    Sql代碼?

  • SELECT?*?FROM?(select?PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text?FROM?v$sqlarea??
  • order?BY?disk_reads?DESC?)where?ROWNUM<10?;??
  • 說明:?
    EXECUTIONS表示同一條SQL語句一共執行了多少次,SORTS表示排序的次數,DISK_READS表示物理讀的數量。?
    DISK_READS NUMBER?
    The sum of the number of disk reads over all child cursors?

    SORTS NUMBER?
    Sum of the number of sorts that were done for all the child cursors?

    EXECUTIONS NUMBER?
    Total number of executions, totalled over all the child cursors?
    分析性能差的sql?

    Sql代碼?

  • SELECT?EXECUTIONS?,?DISK_READS,?BUFFER_GETS,???
  • ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2)?Hit_radio,???
  • ROUND(DISK_READS/EXECUTIONS,2)?Reads_per_run,???
  • SQL_TEXT???
  • FROM?V$SQLAREA???
  • WHERE?EXECUTIONS>0???
  • AND?BUFFER_GETS?>0???
  • AND?(BUFFER_GETS-DISK_READS)/BUFFER_GETS?<?0.8??
  • 查詢共享池中已經解析過的SQL語句及其相關信息?
    --EXECUTIONS 所有子游標的執行這條語句次數?
    --DISK_READS 所有子游標運行這條語句導致的讀磁盤次數?
    --BUFFER_GETS 所有子游標運行這條語句導致的讀內存次數?
    --Hit_radio 命中率?
    --Reads_per_run 每次執行讀寫磁盤數?

    籠統的說EXECUTIONS,BUFFER_GETS,Hit_radio越高表示讀內存多,磁盤少是比較理想的狀態,因此越高越好?
    另外兩個越高讀磁盤次數越多,因此低點好?

    選出最占用資源的查詢?
    ???

    Sql代碼?

  • select?b.username?username,a.disk_reads?reads,a.executions?exec,??
  • ????a.disk_reads/decode(a.executions,0,1,a.executions)?rds_exec_ratio,??
  • ????a.sql_text?statement??
  • ????from?v$sqlarea?a,dba_users?b??
  • ????where?a.parsing_user_id=b.user_id??
  • ????and?a.disk_reads>100000??
  • ?

    下面是蓋國強的一篇博客對v$sqlarea的解釋:

    Oracle GV$SQLAREA / V$SQLAREA view Definition,Just record for myself.

    This is the definition from Oracle10g 10.2.0.3 :

    SELECT inst_id, kglnaobj, kglfnobj, kglobt03,
    ? ? ? kglobhs0 + kglobhs1 + kglobhs2 + kglobhs3 + kglobhs4 + kglobhs5
    ? ? ? + kglobhs6,
    ? ? ? kglobt08 + kglobt11, kglobt10, kglobt01, kglobccc, kglobclc, kglhdlmd,
    ? ? ? kglhdlkc, kglobt04, kglobt05, kglobt48, kglobt35, kglobpc6, kglhdldc,
    ? ? ? SUBSTR (TO_CHAR (kglnatim, 'YYYY-MM-DD/HH24:MI:SS'), 1, 19), kglhdivc,
    ? ? ? kglobt12, kglobt13, kglobwdw, kglobt14, kglobwap, kglobwcc, kglobwcl,
    ? ? ? kglobwui, kglobt42, kglobt43, kglobt15, kglobt02,
    ? ? ? DECODE (kglobt32,
    ? ? ? ? ? ? ? 0, 'NONE',
    ? ? ? ? ? ? ? 1, 'ALL_ROWS',
    ? ? ? ? ? ? ? 2, 'FIRST_ROWS',
    ? ? ? ? ? ? ? 3, 'RULE',
    ? ? ? ? ? ? ? 4, 'CHOOSE',
    ? ? ? ? ? ? ? 'UNKNOWN'
    ? ? ? ? ? ? ? ),
    ? ? ? kglobtn0, kglobcce, kglobcceh, kglobt17, kglobt18, kglobts4, kglhdkmk,
    ? ? ? kglhdpar, kglnahsh, kglobt46, kglobt30, kglobts0, kglobt19, kglobts1,
    ? ? ? kglobt20, kglobt21, kglobts2, kglobt06, kglobt07,
    ? ? ? DECODE (kglobt28, 0, NULL, kglobt28), kglhdadr,
    ? ? ? DECODE (BITAND (kglobt00, 64), 64, 'Y', 'N'),
    ? ? ? DECODE (kglobsta,
    ? ? ? ? ? ? ? 1, 'VALID',
    ? ? ? ? ? ? ? 2, 'VALID_AUTH_ERROR',
    ? ? ? ? ? ? ? 3, 'VALID_COMPILE_ERROR',
    ? ? ? ? ? ? ? 4, 'VALID_UNAUTH',
    ? ? ? ? ? ? ? 5, 'INVALID_UNAUTH',
    ? ? ? ? ? ? ? 6, 'INVALID'
    ? ? ? ? ? ? ? ),
    ? ? ? kglobt31, kglobtt0, DECODE (kglobt33, 1, 'Y', 'N'), kglhdclt, kglobts3,
    ? ? ? kglobt44, kglobt45, kglobt47, kglobt49, kglobcla, kglobcbca
    ? FROM x$kglcursor_child_sqlid
    WHERE kglobt02 != 0


    The fllowing is the definition from Oracle9iR2 9.2.0.4:

    SELECT? inst_id, kglnaobj,
    ? ? ? ? SUM (? kglobhs0
    ? ? ? ? ? ? ? + kglobhs1
    ? ? ? ? ? ? ? + kglobhs2
    ? ? ? ? ? ? ? + kglobhs3
    ? ? ? ? ? ? ? + kglobhs4
    ? ? ? ? ? ? ? + kglobhs5
    ? ? ? ? ? ? ? + kglobhs6
    ? ? ? ? ? ? ),
    ? ? ? ? SUM (kglobt08 + kglobt11), SUM (kglobt10), SUM (kglobt01),
    ? ? ? ? COUNT (*) - 1, SUM (DECODE (kglobhs6, 0, 0, 1)),
    ? ? ? ? DECODE (SUM (DECODE (kglhdlmd, 0, 0, 1)),
    ? ? ? ? ? ? ? ? 0, 0,
    ? ? ? ? ? ? ? ? SUM (DECODE (kglhdlmd, 0, 0, 1)) - 1
    ? ? ? ? ? ? ? ? ),
    ? ? ? ? SUM (kglhdlkc) / 2, SUM (kglobt04), SUM (kglobt05), SUM (kglobpc6),
    ? ? ? ? SUM (kglhdldc) - 1,
    ? ? ? ? SUBSTR (TO_CHAR (kglnatim, 'YYYY-MM-DD/HH24:MI:SS'), 1, 19),
    ? ? ? ? SUM (kglhdivc), SUM (kglobt12), SUM (kglobt13), SUM (kglobt14),
    ? ? ? ? SUM (kglobt15), SUM (DECODE (kglobt09, 0, kglobt02, 0)),
    ? ? ? ? DECODE (COUNT (*) - 1,
    ? ? ? ? ? ? ? ? 1, DECODE (SUM (DECODE (kglobt09, 0, kglobt32, 0)),
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0, 'NONE',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1, 'ALL_ROWS',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2, 'FIRST_ROWS',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3, 'RULE',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4, 'CHOOSE',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'UNKNOWN'
    ? ? ? ? ? ? ? ? ? ? ? ? ? ),
    ? ? ? ? ? ? ? ? 'MULTIPLE CHILDREN PRESENT'
    ? ? ? ? ? ? ? ? ),
    ? ? ? ? SUM (DECODE (kglobt09, 0, kglobt17, 0)),
    ? ? ? ? SUM (DECODE (kglobt09, 0, kglobt18, 0)),
    ? ? ? ? DECODE (SUM (DECODE (kglhdkmk, 0, 0, 1)),
    ? ? ? ? ? ? ? ? 0, 0,
    ? ? ? ? ? ? ? ? SUM (DECODE (kglhdkmk, 0, 0, 1)) - 1
    ? ? ? ? ? ? ? ? ),
    ? ? ? ? kglhdpar, kglnahsh, kglobts0, kglobt19, kglobts1, kglobt20,
    ? ? ? ? SUM (kglobt21), SUM (kglobt06), SUM (kglobt07),
    ? ? ? ? DECODE (kglobt33, 1, 'Y', 'N'), kglhdclt
    ? ? FROM x$kglcursor
    GROUP BY inst_id,
    ? ? ? ? kglnaobj,
    ? ? ? ? kglhdpar,
    ? ? ? ? kglnahsh,
    ? ? ? ? kglnatim,
    ? ? ? ? kglobts0,
    ? ? ? ? kglobt19,
    ? ? ? ? kglobts1,
    ? ? ? ? kglobt20,
    ? ? ? ? DECODE (kglobt33, 1, 'Y', 'N'),
    ? ? ? ? kglhdclt
    ? HAVING SUM (DECODE (kglobt09, 0, kglobt02, 0)) != 0

    下面是對上面的博客的評論,可以看到oracle對v$sqlarea的性能方面是在不斷改進的。?

    ?

    總結

    以上是生活随笔為你收集整理的Oracle v$SQLAREA的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。