v$sql檢視和v$sqlarea檢視的構建
通過v$fixed_view_definition檢視,可以查詢得到v$sql檢視和v$sqlarea檢視的構建語句:
select view_definition from v$fixed_view_definition where view_name='GV$SQL';
select view_definition from v$fixed_view_definition where view_name='GV$SQLAREA';
GV$SQL的定義結構如下(Oracle 10gR2環境):
select inst_id,kglnaobj,kglfnobj,kglobt03,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16,
kglobt08+kglob t11,kglobt10,kglobt01,decode(kglobhs6,0,0,1),
decode(kglhdlmd,0,0,1),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,
kglobtp0,kglnahsh,kglobt46,kglobt30,kglobt09,kglobts5,kglobt48,kglobts0,
kglobt19,kglobts1,kglobt20,kglobt21,kglobts2,kglobt06,kglobt07,
decode(kglobt28, 0, to_number(NULL), kglobt28),kglhdadr,kglobt29,
decode(bita nd(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,
substr(to_char(kglobtt0,'YYYY-MM-DD/HH24:MI:SS'),1,19),
decode(kglobt33, 1, 'Y', 'N'),kglhdclt,kglobts3,kglobt44,kglobt45,kglobt47,
kglobt49,kglobcla,kglobcbca
from x$kglcursor_child
而GV$SQLAREA的檢視結構如下(Oracle 10gR2環境):
select inst_id,kglnaobj,kglfnobj,kglobt03,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6,
kglobt08+kglobt11,k globt10,kglobt01,kglobccc,kglobclc,kglhdlmd,kglhdlkc,
kglobt04,kglobt05,kglobt48,kglobt35,kglobpc6,kglhdldc,
substr(to_c har(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,kgl obcla,kglobcbca
from x$kglcursor_child_sqlid
where kglobt02 != 0
在Oracle 10g中,這兩個檢視來自兩個獨立的底層X$表,v$sqlarea檢視也不再包含Group by子句,這使得以前版本中查詢v$sqlarea的效能得以緩解。那麼version_count和v$sql的差異應該就來自底層x$表的變更,在v$sqlarea中增加了一個“!=0”的條件過濾(kglobt02對應檢視中的COMMAND_TYPE定義)。
能夠發現,所有的子指標在x$kglob([K]ernel [G]eneric [L]ibrary Cache Manager [OB]ject)表中全部存在,也就是說,觀察到的變化是由於底層表的變更導致不同過濾演算法導致的。在我的一個測試環境中,這樣的情況也可以看到:
sys@NEI> select a.sql_id,a.version_count,a.hash_value,count(*)
2 from v$sqlarea a ,v$sql b
3 where a.version_count >10 and a.hash_value=b.hash_value
4 group by a.sql_id,a.version_count,a.hash_value
5 order by 4;
SQL_ID VERSION_COUNT HASH_VALUE COUNT(*)
-------------------------- ------------- ---------- ----------
4gb7r5dm6hnzs 22 1718113272 1
以其中一個SQL為例進行進一步分析:
sys@NEI> select sql_id,hash_value,buffer_gets,executions,parsing_user_id
2 from v$sql
3 where hash_value = 1718113272
4 order by buffer_gets desc;SQL_ID HASH_VALUE BUFFER_GETS EXECUTIONS PARSING_USER_ID
-------------------------- ---------- ----------- ---------- ---------------
4gb7r5dm6hnzs 1718113272 22 956 0
注意到,所有的SQL都是執行過的。而從x$kglob中查詢得到的SQL或者Oracle 9i的v$sql檢視中查詢得到的SQL包含未執行或者buffer_gets為0的SQL指標,這部分在Oracle 10g中被從v$sqlarea中過濾了出去:
sys@NEI> select kglobt03,kglnahsh,kglobt14,kglhdexc,kglobt17
2 from x$kglob
3 where kglnahsh = 1718113272
4 order by kglobt14 desc,4;
KGLOBT03 KGLNAHSH KGLOBT14 KGLHDEXC KGLOBT17
-------------------------- ---------- ---------- ---------- ----------
4gb7r5dm6hnzs 1718113272 22 956 0
4gb7r5dm6hnzs 1718113272 0 0 2147483644
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 10 0
4gb7r5dm6hnzs 1718113272 0 12 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
4gb7r5dm6hnzs 1718113272 0 16 0
23 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659588/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- v$sql,v$sqlarea,v$sqltext區別SQL
- 檢視V$DATAGUARD_STATS
- V$ACTIVE_SESSION_HISTORY檢視的使用Session
- 透過v$sql_bind_capture 檢視繫結變數。SQLAPT變數
- [20211019]V$DETACHED_SESSION檢視.txtSession
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- Oracle9i中v$sql、v$sqlarea、v$sqltext、v$sql_plan的聯絡與區別OracleSQL
- [20210528]V$INDEXED_FIXED_COLUMN檢視.txtIndex
- [20210418]查詢v$檢視問題.txt
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視.txtSQL
- sql-server檢視SQLServer
- Oracle普通檢視和物化檢視的區別Oracle
- [20181103]12c檢視V$EVENT_NAME.txt
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- [20201207]12c v$open_cursor檢視.txt
- [20200422]跟蹤特定sql語句以及v$open_cursor檢視(補充).txtSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視2.txtSQL
- django 的類檢視和函式檢視-雜談Django函式
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- v$parameter gv$parameter 檢視 DDL 與隱含引數
- Java物件導向系列[v1.0.0][索引與檢視]Java物件索引
- [20200424]跟蹤特定sql語句以及v$open_cursor檢視(再補充).txtSQL
- Django檢視之檢視類和中介軟體Django
- day04-檢視和檢視解析器
- drf : 通用檢視類和(GenericAPIView)5個檢視擴充套件類,九個檢視子類,檢視集。APIView套件
- 檢視sqlserver的某程式的sql文字SQLServer
- 透過v$wait_chains檢視診斷資料庫hang和ContentionAI資料庫
- Django的檢視和模板Django
- Oracle檢視歷史TOP SQLOracleSQL
- 控制檯實時檢視 sqlSQL
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- Metadata for Mac(影像後設資料檢視器)v1.7Mac
- 如何檢視SQL的執行計劃SQL
- MySQL檢視建表語句MySql
- 怎樣清除v$archived_log檢視中的過期資訊Hive
- [20200211]檢視v$db_object_cache的CHILD_LATCH欄位.txtObject
- ORACLE DBA必須記住的常用SQL命令和檢視OracleSQL
- sql大資料 基礎(檢視)SQL大資料