【SQL】OracleSQLmonitor

【SQL】Oracle SQL monitor

創(chuàng)新互聯(lián)主營涪城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,涪城h5成都小程序開發(fā)搭建,涪城網(wǎng)站營銷推廣歡迎涪城等地區(qū)企業(yè)咨詢



第一章 被埋沒的SQL優(yōu)化利器——Oracle SQL monitor

DBAplus社群 | 2015-11-26 07:00

轉(zhuǎn)載聲明:本文為DBA+社群原創(chuàng)文章,轉(zhuǎn)載必須連同本訂閱號二維碼全文轉(zhuǎn)載,并注明作者名字及來源:DBA+社群(dbaplus)。

據(jù)說,在Oracle企業(yè)版數(shù)據(jù)庫中有一個免費(fèi)的工具,乃SQL優(yōu)化之利器,那就是Oracle SQL monitor。下面,由DBA+社群原創(chuàng)專家周俊,給大家科普一下這一被埋沒的神器。

周俊

DBA+社群原創(chuàng)專家

具有14年以上Oracle數(shù)據(jù)庫技術(shù)支持經(jīng)驗,在IBM的7年間擔(dān)任華東區(qū)非IBM logo產(chǎn)品技術(shù)支持團(tuán)隊team leader,同時是IBM中國區(qū)Oracle 軟件支持服務(wù)的技術(shù)負(fù)責(zé)人。目前任職于Oracle公司,專注于Oracle數(shù)據(jù)集成方案設(shè)計和實施。獲得Oracle 8i~11g OCP、Oracle 10g OCM、DB2 administrator、PMP等證書。

一前言

說實話,我以前也不太愛用花哨的圖形界面工具進(jìn)行SQL優(yōu)化,最近參加了Oracle RWP培訓(xùn),我發(fā)現(xiàn)Oracle 11g 引入的SQL monitor確實蠻好用的,是個被埋沒的SQL優(yōu)化利器。最重要的是Oracle SQL monitor在Oracle企業(yè)版數(shù)據(jù)庫中是免費(fèi)供大家使用的。下面我和大家分享如何利用SQL monitor簡化我們的SQL優(yōu)化工作。

二如何打開SQL monitor report

方法一

Step1:打開Oracle EM console主頁,切換到性能頁面,點(diǎn)擊右下角的SQL監(jiān)控。

【SQL】Oracle SQL monitor

【SQL】Oracle SQL monitor

Step2:選擇 時間范圍,可以按照持續(xù)時間或者數(shù)據(jù)庫時間對SQL語句進(jìn)行排序。

【SQL】Oracle SQL monitor

在Oracle 11g中,當(dāng)SQL滿足以下條件之一就會被sql monitor捕獲到,監(jiān)控數(shù)據(jù)被記錄在v$sql_monitor視圖中。

當(dāng)SQL并行執(zhí)行時,會立即被實時監(jiān)控到

當(dāng)SQL單進(jìn)程運(yùn)行時,如果消耗超過5秒的CPU或I/O時間,它也會被監(jiān)控到

使用/*+ monitor */提示的sql語句

Step3:選擇您想要進(jìn)行SQL優(yōu)化語句前,點(diǎn)擊第一列狀態(tài)欄中勾號,Oracle就會將該SQL語句的執(zhí)行情況華麗麗的展現(xiàn)在您面前。

【SQL】Oracle SQL monitor

方法二

在性能頁面左下角的頂級會話中,點(diǎn)擊您想要查看的SQL語句ID。

【SQL】Oracle SQL monitor

在SQL監(jiān)控頁面點(diǎn)擊第一列狀態(tài)欄中的圖標(biāo)。

【SQL】Oracle SQL monitor

方法三

如果您沒有配置Oracle EM,但是知道待優(yōu)化SQL語句對應(yīng)的SQLID,可以通過以下腳本利用SQL monitor查看SQL語句在數(shù)據(jù)庫中真實的執(zhí)行計劃。

在SecureCRT中啟用log跟蹤,選擇保存的日志文件(后綴html)

在SQLPLUS 中執(zhí)行

set trimspool on

set arraysize 512

set trim on

set pagesize 0

set linesize 1000

set long 1000000

set longchunksize 1000000

spool sqlmon.html

select /*+ noparallel */ dbms_sqltune.report_sql_monitor (sql_id=>'input your SQL ID', report_level=>'ALL', type=>'ACTIVE') from dual;

spool off

cat sqlmon.html

在SecureCRT中關(guān)閉log跟蹤,打開保存的文件就可以看到SQL執(zhí)行計劃了。

三如何利用SQL monitor進(jìn)行SQL優(yōu)化

使用SQL monitor打開SQL執(zhí)行計劃后,

我們通常會根據(jù)最右邊CPU和wait的activity,找到SQL執(zhí)行計劃中資源消耗較高的步驟。

然后查看一下Oracle估算的返回行數(shù)和實際的返回行數(shù)是否相差很大,如果估算的行數(shù)和實際的行數(shù)相差不大,至少表明目前對應(yīng)數(shù)據(jù)庫對象上的統(tǒng)計信息是準(zhǔn)確的。

本例中Oracle估算的返回行數(shù)和實際返回行數(shù)相差不大,Oracle優(yōu)化器采用了布隆過濾和HASH 右連的執(zhí)行計劃,接下去我們通常會檢查SQL的篩選條件,判斷是否使用了正確的索引等優(yōu)化手段,這里我就不一一展開了。

【SQL】Oracle SQL monitor

【SQL】Oracle SQL monitor

下面是我最近遇到的一個利用SQL monitor進(jìn)行快速SQL優(yōu)化的案例分享。

SQL Text:SQL語句比較長 ,我截選了其中部分有代表性的SQL。

【SQL】Oracle SQL monitor

利用SQL monitor我們可以在執(zhí)行計劃中快速的定位需要重點(diǎn)關(guān)注的步驟。

【SQL】Oracle SQL monitor

我們看到該SQL語句已經(jīng)運(yùn)行了5.4小時,Oracle估算的返回行數(shù)和實際行數(shù)相差非常大,表明相關(guān)表上的統(tǒng)計信息不準(zhǔn)確。

我們對DMS_CONTAINERS和DMS_CONTAINER_JN表進(jìn)行了統(tǒng)計信息收集,統(tǒng)計信息重新收集后Oracle馬上使用了DMS_CONTAINER_JN表上正確的IYC_CNTRID字段的索引,但是DMS_CONTAINERS表上仍舊使用了選擇度不高TYPE字段索引。

進(jìn)一步查看SQL語句,我們發(fā)現(xiàn)該SQL是通過視圖YMS_GUI_LOAD_CONTAINERS_VW訪問DMS_CONTAINERS表,該視圖的定義如下:

【SQL】Oracle SQL monitor

由于在視圖where條件中有IYC_TYPE字段,Oracle優(yōu)先選用IYC_TYPE字段上的索引對DMS_CONTAINERS表進(jìn)行訪問,在CBO下,Oracle不會再去自動選擇其他字段上單獨(dú)的索引進(jìn)行訪問(除非手工設(shè)定AND-EQUAL提示),因此沒有選擇篩選度更高的YC_LSTUPDDT字段上的索引。 如果需要Oracle使用到其他字段上的索引,最簡單的方法就是在IYC_TYPE和YC_LSTUPDDT字段上創(chuàng)建聯(lián)合索引,Oracle在分析索引列的時候自動會分析兩個列的組合情況,從而選擇該復(fù)合索引。

【SQL】Oracle SQL monitor

四總結(jié)

通過前面的介紹相信大家對Oracle SQL monitor華麗、直觀的界面留下了深刻的印象,下面我再總結(jié)一下使用Oracle SQL monitor進(jìn)行SQL優(yōu)化的步驟:

通過SQL monitor監(jiān)控我們可以快速地發(fā)現(xiàn)異常運(yùn)行的SQL語句,如果您知道SQL對應(yīng)的SQL ID也可以通過腳本利用SQL monitor查看SQL語句在數(shù)據(jù)庫中真實的執(zhí)行計劃。

查看SQL執(zhí)行計劃,通過CPU和WAIT的活動比重快速找到SQL執(zhí)行計劃中的關(guān)鍵步驟。

通過比較Oracle估算的行數(shù)和實際返回行數(shù)能夠快速判斷是否需要重新收集統(tǒng)計信息,幫助我們分析Oracle優(yōu)化器選擇的SQL執(zhí)行計劃有無問題。

具體的SQL優(yōu)化方法大家可以參考之前丁俊大師在DBA+社群分享過的Oracle SQL優(yōu)化專題(關(guān)注DBA+社群微信公眾號:dbaplus,回復(fù)“001”即可查看此文),我在這就不做進(jìn)一步展開啦。

工欲善其事,必先利其器。小伙伴們,還等什么呢,趕緊去試試Oracle SQL monitor這個被埋沒的SQL優(yōu)化利器吧!




 SQL Monitor,你值得掌握的一個特性 

原文地址:SQL Monitor,你值得掌握的一個特性 作者:jeanron100


第一章  掌握SQL Monitoring這些特性,SQL優(yōu)化通通不在話下

DBAplus社群 | 2015-12-29 07:01

轉(zhuǎn)載聲明:本文為DBA+社群原創(chuàng)文章,轉(zhuǎn)載必須連同本訂閱號二維碼全文轉(zhuǎn)載,并注明作者名字及來源:DBA+社群(dbaplus)。

目錄

術(shù)語說明

概述

什么SQL會被SQL MONITORING監(jiān)控到

找到Real Time SQL Monitoring入口

詳解Real Time SQL Monitoring

1術(shù)語說明

在正式介紹Real Time SQL Monitoring之前,我們先對接下來要用到一些術(shù)語做集中的介紹。

Table Queue,消息緩沖區(qū),在并行操作中使用,用于PX進(jìn)程之間的通信,或者PX進(jìn)程與QC進(jìn)程之間的通信,是內(nèi)存中的一些page,每個消息緩沖區(qū)的大小由參數(shù)parallel_execution_message_size控制,11GR2版本默認(rèn)為16K,之前的各個大版本這個值都不一樣,詳細(xì)請參考ORACLE官方文檔。

墻面時間、持續(xù)時間指的是物理時間、鐘表時間。

HASH JOIN左邊,the build side of hash join,一般為小表。

HASH JOIN右邊,the probe side of hash join,一般為大表。

M代表百萬

行源 row source,指的是執(zhí)行計劃特定的一行操作,例如:

【SQL】Oracle SQL monitor

上面執(zhí)行計劃的第一列,Id列0-5,每一行都是一個行源

2概述

Oracle每個版本總有一些新特性驚艷到我們,SQL MONITORING對我來說就是這樣一個新特性,雖然它還未廣為人知,它在11GR1版本被提供,而且后續(xù)的幾個版本(11GR2,12CR1)這個功能也被不斷的加強(qiáng),說明ORACLE對它非常的重視,它能夠把查詢涉及到的所有關(guān)鍵性能統(tǒng)計信息集中在一個頁面上,特別是對于并行查詢的語句會自動啟用這個特性。這個功能在國外的ORACLE 用戶組被多次的分享,但是目前國內(nèi)對它的介紹還非常少,本文主要介紹Oracle Real Time SQL Monitoring的核心特性,意圖使DBA能夠有一種新的手段(更先進(jìn)的手段)來診斷SQL性能,進(jìn)而提升優(yōu)化效率。

SQL優(yōu)化是一個DBA必備的技能,然而即使一個有豐富SQL優(yōu)化經(jīng)驗的老DBA估計碰到幾十行甚至上百行的執(zhí)行計劃也要皺皺眉頭,他如何能快速知道:

在這么龐大的執(zhí)行計劃中哪一行源消耗的資源最多。如果一個SQL的執(zhí)行計劃包含5個行源,行源1消耗的DB TIME占取了3%,那你即使把這3%的DB TIME全部消滅掉,也只讓SQL的性能提升了3%,對于整體的DB TIME提升效果并不明顯。

如何知道整個SQL執(zhí)行過程中消耗的哪一類資源最多,IO?CPU?,這讓我們對SQL的性能有一個整體的認(rèn)識,你可能觀察性能指標(biāo)后會說,奧,這是一個IO比較重的SQL,如果需要大幅提升SQL性能,也許要考慮提升數(shù)據(jù)庫系統(tǒng)IO的能力。

對于一個正在執(zhí)行的SQL語句,如何知道它當(dāng)前執(zhí)行到哪一步了?甚至知道執(zhí)行完這一步還需要多久?

如何知道執(zhí)行這個SQL語句都經(jīng)歷了哪些等待事件,甚至知道這些等待里哪一類等待最為嚴(yán)重?

要想知道這些問題的答案,在11G之前都是非常不容易的,要通過各種V$視圖的關(guān)聯(lián)去獲取,而且展示的結(jié)果不夠一目了然。 11G以后這些信息全部可以在SQL MONITORING中找到答案,SQL MONITORING提供的功能還不僅僅是上面提到的這些,通過SQL MONITORING還可以輕松獲取語句的綁定變量、監(jiān)控索引的整個創(chuàng)建過程及創(chuàng)建完索引剩余的工作量。 文本會著重講解SQL MONITORING的核心功能,其他的相關(guān)信息就請讀者們?nèi)ケM情挖掘吧。

3什么SQL會被SQL MONITORING監(jiān)控到

對于絕大多數(shù)OLTP系統(tǒng)來說,SQL相對比較簡單,每次的運(yùn)行時間都非???,絕大部分SQL的響應(yīng)時間都應(yīng)該在10MS以下,優(yōu)化的復(fù)雜度也比較低,SQL MONITORING功能的出現(xiàn)并不是為了幫助DBA發(fā)現(xiàn)、診斷OLTP SQL的性能問題,而是為了加快DBA優(yōu)化數(shù)據(jù)倉庫類SQL的效率,這些SQL是偏OLAP系統(tǒng)的,特點(diǎn)是并發(fā)量低、運(yùn)行時間久、SQL復(fù)雜度高。滿足以下條件的任意SQL都會被SQL MONITORING監(jiān)控到:

如果串行執(zhí)行的SQL,消耗的CPU時間或IO時間超過5秒,那么這些SQL 將會被監(jiān)控到,通過修改隱含參數(shù)_sqlmon_threshold可以控制這一行為,默認(rèn)為5秒,如果設(shè)置為0將關(guān)閉SQL MONITORING功能 。注意我這里提到的是SQL消耗的CPU時間或IO時間,而不是SQL的執(zhí)行時間,之所以需要限制CPU時間或IO時間是為了防止數(shù)據(jù)庫某一時刻如果有大量lock/latch的話,那么將有大量的SQL滿足5秒執(zhí)行時間的條件,而SQL監(jiān)控本身比較消耗資源,需要拷貝運(yùn)行時的性能統(tǒng)計信息到SGA,每一個受監(jiān)控的SQL都有一個單獨(dú)的內(nèi)存結(jié)構(gòu),在11G可能會導(dǎo)致大量的latch競爭,CPU飆高,12C對這個問題做了優(yōu)化不存在該問題了。如果你發(fā)現(xiàn)你的SQL運(yùn)行時間明顯超過了5秒但是卻沒被SQL MONITORING監(jiān)控到,那么你該仔細(xì)檢查是否是由于SQL本身消耗的CPU或IO并沒有超過5秒(由于鎖、網(wǎng)絡(luò)?)。

并行執(zhí)行的SQL將全部被監(jiān)控到,不需要等待CPU或IO時間超過5秒。對于這一點(diǎn)也比較好理解,一般并行查詢的SQL都是報表類或比較重的任務(wù)類的SQL,因此會自動打開SQL MONITORING的功能。

增加HINT /+ monitor /的SQL會立即開啟SQL MONITORING功能。

除了以上條件外,你還需要檢查一些系統(tǒng)參數(shù)是否設(shè)置正確:

statistics_level需要為TYPICAL(默認(rèn))或者ALL.

control_management_pack_access需要為DIAGNOSTIC+TUNING(默認(rèn))

SQL MONITORING并不會監(jiān)控非常大的執(zhí)行計劃,默認(rèn)不會監(jiān)控超過300行的執(zhí)行計劃,可以通過隱含參數(shù)_sqlmon_max_planlines來控制。具體請參照MOS ID:1613163.1

4找到Real Time SQL Monitoring入口

可以從這幾個位置找到、使用SQL Monitoring的功能:

Enterprise Manager

Enterprise Manager Cloud Control(EMCC)

SQL Developer

DBMS_SQLTUNE包

這里我們主要介紹通過Enterprise Manager Cloud Control(EMCC)頁面來使用Real Time SQL Monitoring,文章的后面也會有單獨(dú)一節(jié)簡單介紹如何通過SQL包DBMS_SQLTUNE來獲取Real Time SQL Monitoring的輸出。

首先登陸Oracle EMCC,進(jìn)入到【數(shù)據(jù)庫】頁面,選擇你需要監(jiān)控的數(shù)據(jù)庫,這里以clouddb1為例:

【SQL】Oracle SQL monitor

進(jìn)入到clouddb1數(shù)據(jù)庫后,選擇【性能】下的SQL監(jiān)視功能。

【SQL】Oracle SQL monitor

然后就進(jìn)入到了SQL MONTORING的主界面,這里包含了最近被監(jiān)控到的SQL,查看狀態(tài)列,可以知道SQL當(dāng)前的執(zhí)行狀態(tài)。

【SQL】Oracle SQL monitor

狀態(tài)列一般包含以下4種狀態(tài):運(yùn)行、完成、排隊、錯誤,將鼠標(biāo)放在狀態(tài)列的符號上面,會看到符號所代表的狀態(tài)。這幾個狀態(tài)除了【排隊】狀態(tài)都比較好理解,排隊這個狀態(tài)只會在大于11GR2版本出現(xiàn)。ORACLE 11GR2在并行設(shè)置方面起了很大變化:自動并行度調(diào)整、并行語句隊列、內(nèi)存并行執(zhí)行,啟用此三項新特性需要設(shè)置參數(shù)parallel_degree_policy為auto,默認(rèn)值為MANUAL。設(shè)置為auto后,三項新特性全部被打開,這里我們主要說下并行語句隊列,啟用該特性后,通過設(shè)置parallel_servers_target來指定總的可用的并行子進(jìn)程的目標(biāo)數(shù),運(yùn)行語句時,如果發(fā)現(xiàn)可用的并行進(jìn)程數(shù)已經(jīng)小于待運(yùn)行語句的目標(biāo)數(shù),那么語句將會放入隊列中等待直到擁有足夠可用的并行進(jìn)程。一旦被加入隊列,你就會在SQL MONITORING的監(jiān)控頁面上看到,語句的當(dāng)前運(yùn)行狀態(tài)為【排隊】。

SQL監(jiān)視頁面顯示的SQL列表不是針對特定的SQL文本的,而是針對特定SQL語句的一次特定的執(zhí)行,因此如果兩個會話運(yùn)行相同的語句,你會在此列表中看到兩個單獨(dú)的條目,因此它與v$sql的表現(xiàn)行為不一樣,如果2個會話在運(yùn)行同一個SQL,在 v$sql里只能對應(yīng)到匯總了SQL執(zhí)行統(tǒng)計信息的一個記錄。針對SQL MONITOR的這個特點(diǎn),允許你針對一個特定的用戶(他正在抱怨性能問題)檢查這個語句到底出了什么問題,而不是首先觀察匯總了所有用戶的語句級的性能指標(biāo),像v$sql里的,再試著從中發(fā)現(xiàn)你所關(guān)注的用戶問題。

5詳解Real Time SQL Monitoring

找到Real Time SQL Monitoring的入口后,可以點(diǎn)擊SQL_ID進(jìn)入到Real Time SQL Monitoring的展示頁面,是不是很炫酷?

【SQL】Oracle SQL monitor

也許你對頁面上的很多指標(biāo)還感覺很陌生,別著急,我接下來會對頁面上的核心部分進(jìn)行介紹。

5.1 一般信息

【SQL】Oracle SQL monitor

一般信息部分顯示了SQL執(zhí)行的一些基本的細(xì)節(jié),例如SQL的文本,SQL語句采用的并行度,SQL的執(zhí)行開始時間,本次統(tǒng)計值最后一次的刷新時間,執(zhí)行SQL的用戶、取數(shù)操作等。注意【SQL文本】后帶有…的標(biāo)記(紅色框標(biāo)記),點(diǎn)擊它,你會獲得完整的SQL語句文本,從版本11.2.0.2開始,你還會看到綁定變量的值。

例如:

【SQL】Oracle SQL monitor

上面的代碼我對一個帶有綁定變量的SQL以并行度6執(zhí)行了查詢,然后通過EMCC的SQL MONITORING頁面點(diǎn)擊【SQL文本】后面部分的…,這時會出現(xiàn)一個新窗口:

點(diǎn)擊show SQL Binds:

【SQL】Oracle SQL monitor

這時就可以看到綁定變量的列表,是不是非常的方便?

當(dāng)然就像上面提到的,SQL MONITORING主要用于監(jiān)控數(shù)據(jù)倉庫類型的SQL,對于長時間運(yùn)行查詢,是否應(yīng)該使用綁定變量是另外一個單獨(dú)的話題,在數(shù)據(jù)倉庫中,一般的最佳實踐為:不該為長時間運(yùn)行的查詢使用綁定變量,因為相對于整個SQL的運(yùn)行時間,SQL解析只占到可以忽略不計的時間,而且數(shù)據(jù)倉庫的系統(tǒng)本身的SQL執(zhí)行頻率也非常低,因此我們可以考慮對所有查詢都進(jìn)行硬解析,即使這樣會消耗掉一些響應(yīng)時間(可以忽略不計),但我們盡可能保證每一組參數(shù)組合都能生成一個最優(yōu)的執(zhí)行計劃,因為就綁定變量和文本常量來說,文本常量是最適合產(chǎn)生最優(yōu)執(zhí)行計劃的。

言歸正傳,就像上面已經(jīng)演示的,得到被監(jiān)控查詢的綁定變量值在Oracle 11.2.0.2或更高版本上變得容易,以前你可能需要查詢v$sql_bind_capture,dba_hist_sqlbind來獲取綁定變量的值(歷史綁定值),甚至通過oradebug errorstack這類命令來獲得當(dāng)前運(yùn)行SQL的正在使用的綁定變量的值,現(xiàn)在你終于可以拋棄這些方法了。

【一般信息】模塊還包含了取數(shù)操作(fetch calls)的次數(shù),簡單來說它代表了數(shù)據(jù)庫和應(yīng)用端網(wǎng)絡(luò)交互的次數(shù),如果是count,sum這類操作,一般這個值為1,只需要一次網(wǎng)絡(luò)交互,但是對于select *這樣的查詢,返回的數(shù)據(jù)量越大,這個值也會越大。

【SQL】Oracle SQL monitor

例如從上圖我們知道,返回1000條記錄一共分了11次才傳輸完成。每次傳輸90條記錄。

取數(shù)操作我們在后面的章節(jié)還會繼續(xù)講到,這里先點(diǎn)到為止。

5.2 時間和等待統(tǒng)計信息

【SQL】Oracle SQL monitor

這一部分內(nèi)容非常少,但是信息量非常大,顯示的是持續(xù)時間、數(shù)據(jù)庫時間和等待活動百分比。把鼠標(biāo)移動到數(shù)據(jù)庫時間的條狀圖上,會看到消耗在各類等待事件和CPU上的時間,這讓你知道你的SQL時間都花哪了,是IO操作多,還是CPU操作多,這非常的棒。等待活動百分比條狀圖則顯示了詳細(xì)的等待事件分布,例如上圖中藍(lán)色部分代表整個語句執(zhí)行過程中,45%的等待發(fā)生在direct path read temp這個等待事件上,注意這里等待活動百分比條狀圖的100(100%)指的是數(shù)據(jù)庫里的等待事件時間,而不是整個數(shù)據(jù)庫時間,即并不包括CPU時間,這部分的信息可以告訴DBA在SQL執(zhí)行過程中,遭遇了哪些等待事件,以及這些等待事件占取的比例,當(dāng)然,你應(yīng)該關(guān)注這些等待事件里最為惹眼的。

你可能對持續(xù)時間和數(shù)據(jù)庫時間的含義感到疑惑,沒關(guān)系,我們接下來就會著重介紹這兩個時間代表的含義和兩者的差異:

5.3 持續(xù)時間

持續(xù)時間(墻面時間)是用戶非常關(guān)注的時間,它顯示一個語句已經(jīng)處于活動狀態(tài)多久,它代表著語句從開始執(zhí)行直到結(jié)束的時間跨度,對于正在運(yùn)行的語句,則是從開始執(zhí)行到當(dāng)前的時間。當(dāng)然,最終用戶可能還要等待更長的時間,因為除了數(shù)據(jù)庫的響應(yīng)時間之外,時間還可能會被花在應(yīng)用系統(tǒng)上,或者是數(shù)據(jù)庫和應(yīng)用服務(wù)器之間的網(wǎng)絡(luò)上。例如SQL的持續(xù)時間為5秒,但是應(yīng)用本身處理這些數(shù)據(jù)需要1秒,那么用戶端感受到的時間就可能是6秒,而不是數(shù)據(jù)庫端看到的持續(xù)時間5秒。

需要再次強(qiáng)調(diào)的是,持續(xù)時間衡量的是從SQL開始執(zhí)行即游標(biāo)打開直到游標(biāo)被關(guān)閉或取消的時間跨度,這意味著如果數(shù)據(jù)庫1分鐘內(nèi)完成一個查詢,但隨后產(chǎn)生的數(shù)百萬結(jié)果每次只能返回幾行,從應(yīng)用的角度看,這個查詢將需要很長的時間(需要數(shù)百萬次的網(wǎng)絡(luò)傳輸)才能完成,但是數(shù)據(jù)庫端只花了一點(diǎn)時間來處理。對于網(wǎng)絡(luò)傳輸?shù)那闆r,SQL MONITORING會有一個指標(biāo)進(jìn)行反應(yīng),就是上面已經(jīng)提到過的取數(shù)操作(fetch calls),如果網(wǎng)絡(luò)傳輸量比較大的話,這個值會比較大。

【SQL】Oracle SQL monitor

例如我通過monitor這個hint強(qiáng)制讓ORACLE監(jiān)控這個SQL,這個SQL會返回大量的結(jié)果集給客戶端,我們通過EMCC來監(jiān)控這個SQL的相關(guān)監(jiān)控信息:

【SQL】Oracle SQL monitor

取數(shù)操作值非常大,因為數(shù)據(jù)庫要跟應(yīng)用(我們這里是SQLPLUS客戶端)有大量的網(wǎng)絡(luò)交互。

5.4 數(shù)據(jù)庫時間

數(shù)據(jù)庫時間即DB Time,顯示的是一個查詢在數(shù)據(jù)庫中執(zhí)行花費(fèi)的總時間,就DML操作來說,一般數(shù)據(jù)庫時間基本等于持續(xù)時間,因為DML操作不用返回結(jié)果集,沒有網(wǎng)絡(luò)交互時間,但是如果運(yùn)行的是一個SELECT語句并返回很多行,那么持續(xù)時間一般會大于數(shù)據(jù)庫時間,因為很多的網(wǎng)絡(luò)時間會被統(tǒng)計在持續(xù)時間中,數(shù)據(jù)庫會把數(shù)據(jù)分批發(fā)送給應(yīng)用程序,因此對于一個select語句你可能會看到數(shù)據(jù)庫時間只有30秒,而持續(xù)時間卻有50秒,其中30秒用于服務(wù)你的請求,其余的時間數(shù)據(jù)庫則是空閑的,等待應(yīng)用取下一批數(shù)據(jù)。我們再次看一下上面已經(jīng)使用過的一張圖,對于這個查詢來說,由于要返回大量的結(jié)果集給客戶端,因此持續(xù)時間遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)庫時間。

【SQL】Oracle SQL monitor

對于串行查詢來說,持續(xù)時間都是大于等于數(shù)據(jù)庫時間的,但是對于并行查詢來說,情況有所改變:當(dāng)運(yùn)行一個并行查詢時,會有多個服務(wù)器進(jìn)程(甚至可能是多個服務(wù)器上的服務(wù)器進(jìn)程)參與進(jìn)來,每個服務(wù)器進(jìn)程都可以使用單獨(dú)的CPU資源,也就是1分鐘的墻面時間(wall time),但是數(shù)據(jù)庫時間可能有1*N分鐘(N為CPU邏輯核數(shù)),并行查詢最終的數(shù)據(jù)庫時間可能會比持續(xù)時間(wall time)長的多。

【SQL】Oracle SQL monitor

這個語句的持續(xù)時間只有19秒,而數(shù)據(jù)庫時間則有1.8分鐘,從【一般信息】的Execution Plan部分可以看到這個語句是以并行度6來運(yùn)行,這意味著數(shù)據(jù)庫里有多個進(jìn)程同時服務(wù)于這個查詢,所有這些會話的數(shù)據(jù)庫時間加上協(xié)調(diào)進(jìn)程的時間都被匯總到了數(shù)據(jù)庫時間中。數(shù)據(jù)庫時間代表著大致有多少時間必須在數(shù)據(jù)庫中完成,但是因為該語句是并行的,因此你其實不必等待那么長的時間。

5.5 IO統(tǒng)計信息

【SQL】Oracle SQL monitor

顯示了語句執(zhí)行時的一些關(guān)鍵的IO統(tǒng)計信息。

緩沖區(qū)獲取數(shù),即buffer gets,顯示了數(shù)據(jù)庫層的邏輯IO總數(shù)。IO請求包含了總的IO請求次數(shù),例如db file sequential read,db file scattered read,direct path read等等的次數(shù),IO字節(jié)代表了讀取/寫入的IO的總字節(jié)數(shù)。通過條狀圖的不同有顏色部分,能獲取到更詳細(xì)的統(tǒng)計值,例如上圖中顯示10GB的IO字節(jié),其中有42%是讀取請求產(chǎn)生的,等等。 需要注意的是,這里的IO請求次數(shù)和IO字節(jié)數(shù)統(tǒng)計可能超出你的預(yù)期,例如針對一個1G表的全表掃描按照某個字段排序,不但要統(tǒng)計表本身的IO,而且還要統(tǒng)計排序產(chǎn)生的讀、寫臨時段的IO。

5.6 詳細(xì)信息

【SQL】Oracle SQL monitor

詳細(xì)信息頁本身包含了一些子tab頁面,例如上圖中包含了【計劃統(tǒng)計信息】、【計劃】、【并行】、【活動】、【度量】子tab頁。詳細(xì)信息頁主要包含了執(zhí)行計劃在在行源(rowsource)細(xì)節(jié)上的一些統(tǒng)計信息。

首先我們先看下頁面的最左側(cè)一列,如果某個行源操作是被并行執(zhí)行的,會用多個小人的圖標(biāo)標(biāo)識,相反如果是被串行執(zhí)行的會用一個小人的圖標(biāo)標(biāo)識,如果你觀察仔細(xì)的話,會發(fā)現(xiàn)多個小人的圖標(biāo)有時也會有顏色的區(qū)分(下圖),這是因為并行執(zhí)行中,生產(chǎn)者和消費(fèi)者角色的不同導(dǎo)致的。例如圖中的紅色是生產(chǎn)者負(fù)責(zé)掃描表,而圖中藍(lán)色的進(jìn)程是消費(fèi)者負(fù)責(zé)把接收過來的數(shù)據(jù)做排序。

再者,我們會看到多人小圖標(biāo)的后面有向右箭頭的指示,這個代表了目前的查詢正在進(jìn)行,執(zhí)行計劃正在執(zhí)行到這個(些)行源(右箭頭所在的行源),也就是通過SQL MONITORING可以知道目前執(zhí)行計劃執(zhí)行到了哪一個行源,nice job!如果SQL執(zhí)行結(jié)束,或者這個(些)行源執(zhí)行結(jié)束,這些向右的小箭頭也會消失。

【SQL】Oracle SQL monitor

然后我們關(guān)注下【估計行數(shù)】和【實際行數(shù)】,如果兩者差異巨大,可能是由于你的數(shù)據(jù)庫系統(tǒng)統(tǒng)計信息缺失或者陳舊,或者是優(yōu)化器自身的算法導(dǎo)致。這里我并不會介紹CBO優(yōu)化的相關(guān)信息,讀者可以自行參閱相關(guān)文章?!緦嶋H行數(shù)】列真實的反應(yīng)了掃描進(jìn)程需要產(chǎn)生的工作量。

雖然Oracle CBO技術(shù)發(fā)展了這么久,相關(guān)書籍、文章也非常多,但是筆者認(rèn)為,閱讀、了解CBO最好的書籍仍然是jonathon lewis的基于成本的ORACLE優(yōu)化法則,不過中文版貌似已經(jīng)買不到了。


【時間表列】(Timeline)是一個很重要的列,通過它可以知道這個SQL執(zhí)行計劃每一行活躍的時間段。上圖中的Timeline列基于執(zhí)行計劃每一行的活動構(gòu)造出了一個可視化的時間進(jìn)度圖,它基于ASH的采樣,從ORACLE 11G開始,ASH基于SQL執(zhí)行計劃的每一行源收集信息,觀察上圖中Timeline列標(biāo)題里的括號內(nèi)的數(shù)字,它顯示了這個SQL總的運(yùn)行持續(xù)時間,在這里是21秒,現(xiàn)在很容易根據(jù)這個,然后觀察每個行源上的條狀圖和條狀圖位置進(jìn)行可視化的解析。 然后將我們的目光移動到【臨時】列,它代表了SQL運(yùn)行過程中消耗的臨時表空間大小,如果發(fā)現(xiàn)SQL消耗的臨時表空間非常大,可以查看是否并行度不夠或者PGA參數(shù)設(shè)置過小,不過對于創(chuàng)建索引、大表HASH JOIN、SQL排序等操作來說,完全避免臨時段的使用也是一件可望不可即的事。


【IO請求】列代表了每一個行源所產(chǎn)生的IO請求數(shù),根據(jù)可視化的條形圖,很容易發(fā)現(xiàn)哪一個行源產(chǎn)生了最多的IO請求。


【活動百分比】列代表了在此行源產(chǎn)生的等待,CPU也會被統(tǒng)計在內(nèi),它的數(shù)據(jù)是從ASH的基表v$active_session_history獲取的,也就是說數(shù)據(jù)是采樣而來的(1秒采樣一次)。例如:


【SQL】Oracle SQL monitor


【SQL】Oracle SQL monitor


【SQL】Oracle SQL monitor


11G的v$active_session_history視圖新增了SQL_PLAN_LINE_ID、SQL_PLAN_OPERATION、SQL_PLAN_OPERATION列,可以跟蹤到具體發(fā)生等待的行源信息,非常有利用與DBA做性能診斷。上面SQL執(zhí)行過程中,ASH共采樣到了6條數(shù)據(jù),其中五次等待事件為direct path read,一次為空,即為CPU操作。 SQL_PLAN_LINE_ID 代表產(chǎn)生等待的行源,這里為6,觀察下圖【行ID】列,ID為6的行源執(zhí)行的正是全表掃描操作,【活動百分比】條狀圖顯示了產(chǎn)生了5次的direct path read等待,與我們從ASH視圖里查詢的結(jié)果完全相符。


【SQL】Oracle SQL monitor


因此【活動百分比】列非常重要,通過此列,我們能夠知道DB TIME的去向,例如上圖中,絕大部分的DB TIME都會花在了全表掃描階段。除了全表掃描行源,其他行源都為空,但是這并不代表其他行源沒有花取數(shù)據(jù)庫時間,而是因為這塊的內(nèi)容是依據(jù)ASH采樣而來的,如果行源操作執(zhí)行比較快的話,ASH就不容易捕獲到。通過【活動百分比】列,我們可以定位到最消耗資源的行源,然后可以有針對性的做優(yōu)化,達(dá)到事半功倍的效果。


我們來看【詳細(xì)信息】 的【并行】tab頁,這個頁面匯集了每一個并行進(jìn)程完成的工作,由于ORACLE的并行采用了生產(chǎn)者消費(fèi)者模型,首先是按照實例做的分組,然后再按照生產(chǎn)者和消費(fèi)者把進(jìn)程做了分組,我的測試?yán)永?,只有一個RAC節(jié)點(diǎn)實例,另一個節(jié)點(diǎn)被關(guān)閉了。


【SQL】Oracle SQL monitor


切換到【詳細(xì)信息】的【活動】頁,展示了從開始執(zhí)行到結(jié)束執(zhí)行時間跨度內(nèi),有多少進(jìn)程處于活躍狀態(tài)。由于我們設(shè)置了并行度6,因此可以從頁面上看到SQL執(zhí)行的后期大部分時間有6個進(jìn)程處于活躍狀態(tài)。


【SQL】Oracle SQL monitor


【詳細(xì)信息】的【度量】頁顯示了查詢 過程中對CPU、內(nèi)存、IO的占用率。


【SQL】Oracle SQL monitor


這里我們基本上把SQL MONITORING的核心內(nèi)容做了減少,這個頁面包含了大量的信息,而且這個頁面本身具有非常大的互動性,對這個頁面你可以充分發(fā)揮你的好奇心,把你的鼠標(biāo)盡情的放在任何一個可以放的位置,盡情發(fā)掘里面的寶藏。


5.7 通過SQL MONITORING監(jiān)控索引創(chuàng)建過程


之所以專門寫一節(jié)通過SQL MONITORING監(jiān)控索引創(chuàng)建過程是源于一個客戶的需求,他由于業(yè)務(wù)上的需要想要知道重建索引大概需要多久,即使不能知道準(zhǔn)確的時間,也希望能大概知道索引創(chuàng)建開始后,已經(jīng)完成了多少的工作,大約還有多少工作未完成 。如果是使用的11G版本 ,可以很輕松的通過SQL MONITORING實現(xiàn)這個需求。


索引的創(chuàng)建大體上分為兩個階段:第一,全表掃描過程 第二,排序創(chuàng)建索引過程。


我們這里給出一個索引創(chuàng)建的例子,為了保證可以讓SQL MONITORING監(jiān)控到這個語句,我使用了并行語句,當(dāng)然也可以造取一個足夠大的表來確保索引創(chuàng)建語句運(yùn)行的時間足夠長來開啟SQL MONITOR功能 。


alter index tt rebuild online parallel 6;


【SQL】Oracle SQL monitor


索引創(chuàng)建開始后,我們觀察SQL MONITORING頁面的【詳細(xì)信息】部分,【詳細(xì)信息】頁面的最左邊列的多人圖標(biāo)顯示了這是一個并行執(zhí)行的語句,這里紅色為生產(chǎn)者,負(fù)責(zé)掃描HASH_T1表,根據(jù)全表掃描行源(ID=8)的父操作PX BLOCK ITERATOR可以知道,PX SLAVE按照ROWID劃分工作,每個PX SLAVE負(fù)責(zé)一部分?jǐn)?shù)據(jù)塊的掃描(我這里為分區(qū)表,并沒有按照分區(qū)劃分工作),掃描后的數(shù)據(jù)寫入TQ10000 table queue,消費(fèi)者PX SLAVE進(jìn)程從table queue TQ10000讀取數(shù)據(jù),這樣通過table queue TQ10000表,兩組并行進(jìn)程完成了數(shù)據(jù)的傳遞。消費(fèi)者PX SLAVE把接收到的數(shù)據(jù)做排序并創(chuàng)建索引。


【SQL】Oracle SQL monitor


從上圖可以看出,向右的箭頭處于排序創(chuàng)建索引階段(行源3,4,5),全表掃描階段已經(jīng)結(jié)束,正在進(jìn)行排序和創(chuàng)建索引,根據(jù)【實際行數(shù)】列可以知道目前排序已經(jīng)完成的行數(shù)是531K,而真正需要的排序量為47M,從其他行源可以知道需要排序的總量(ID=5-8的實際行數(shù)列都顯示了這個信息)。接下來的工作就是刷新頁面看排序的實際行數(shù)什么時候能夠到47M了?!具M(jìn)度百分比】列顯示了已經(jīng)完成的百分比,這個對于工作量的估算非常的有意義。有一點(diǎn)比較遺憾,【進(jìn)度百分比】對于很多操作都不能進(jìn)行顯示,很多時候【進(jìn)度百分比】會在SQL運(yùn)行過程中動態(tài)出現(xiàn)。不過對于索引創(chuàng)建來說,這個并不重要,根據(jù)真正的數(shù)據(jù)量和已經(jīng)完成的排序量就能大概知道剩余的工作量。


【SQL】Oracle SQL monitor



刷新后已經(jīng)完成了28M的排序工作。



【SQL】Oracle SQL monitor



再次刷新,發(fā)現(xiàn)索引創(chuàng)建已經(jīng)完成,因為最左邊的已經(jīng)沒有向右的箭頭,而且實際行數(shù)(行源4)已經(jīng)為47M,完成了所有數(shù)據(jù)的排序。我們觀察【活動百分比】這一列,整個索引創(chuàng)建過程中,絕大部分的時間都消耗在ID=4這個行源上,即排序和創(chuàng)建索引操作上,從【時間表】(Timeline)列也可以看出它的活躍時間跨度也最長。



5.8 一個例子



上面介紹了相關(guān)的SQL MONITORING的核心特性,但是它只能協(xié)助我們發(fā)現(xiàn)性能問題,如何解決問題它并不能幫助到我們,解決問題的過程還需要我們具備各種SQL優(yōu)化的技能,如CBO的知識,操作系統(tǒng)的知識等等。



我們來通過一個小例子來進(jìn)階我們對于SQL MONITORING的理解:



表的物理信息:



hash_t1 大小 4416M



查詢語句



SQL運(yùn)行時間2分鐘,由于使用了并行我們從上圖可以看到DB TIME 12.6分鐘遠(yuǎn)大于SQL運(yùn)行時間2分鐘。



【SQL】Oracle SQL monitor



根據(jù)【活動百分比】這一列看到HASH JOIN本身占取的數(shù)據(jù)庫時間最多,達(dá)到了51%(ASH采樣的結(jié)果),再仔細(xì)觀察執(zhí)行計劃的相關(guān)內(nèi)容,HASH JOIN的左邊使用了廣播的分發(fā)方式PX SEND BROADCAST,但是需要廣播的數(shù)據(jù)量非常的大,有40M,由于采用了6個并發(fā),因此廣播之后,每一個PX進(jìn)程都接收到了40M的數(shù)據(jù)量,因此總共的數(shù)據(jù)量為240M。HASH JOIN右邊的表的數(shù)據(jù)量也是40M,跟HASH JOIN左邊的表大小一樣,數(shù)據(jù)的分發(fā)方式一般包括廣播和HASH,12C新增加了replicat方式,對于HASH JOIN左邊是小表的情況一般使用廣播方式的分發(fā),對于HASH JOIN的左邊、右邊都是大表的情況,一般使用HASH分發(fā)比較好。這里由于每個PX消費(fèi)者進(jìn)程都需要完整持有HASH JOIN左邊表的數(shù)據(jù),因此消耗的臨時段的空間也比較大,達(dá)到了4GB。



【SQL】Oracle SQL monitor



我們來看下嘗試使用HASH 分布效果怎么樣:SQL運(yùn)行時間從2分鐘縮減到了1.3分鐘,DB TIME也從12.6分鐘縮減到了8.3分鐘。



【SQL】Oracle SQL monitor



查看執(zhí)行計劃發(fā)現(xiàn)數(shù)據(jù)分發(fā)方式已經(jīng)變?yōu)镻X SEND HASH,使用了HASH分發(fā)的方式,觀察【實際行數(shù)列】數(shù)據(jù)量也和表的記錄數(shù)相同,臨時表空間也從4GB大小縮減為966MB。HASH JOIN操作本身占取的活動百分比也從51%下降為22%。



【SQL】Oracle SQL monitor



5.9 相關(guān)視圖



Grid Control上所有漂亮的圖表都來源于v$或DBA_視圖或許沒有必要為日常監(jiān)控和調(diào)優(yōu)任務(wù)經(jīng)常去訪問這些v$視圖,但知道這些信息來自哪里仍然是很有用處的,因為這會讓自定義監(jiān)控和對問題的高級診斷變得更方便,例如我所在的沃趣科技就在自動研發(fā)一套監(jiān)控系統(tǒng),也在考慮將SQL MONITORING這個功能增加到我們的監(jiān)控產(chǎn)品里,如果能了解到這些功能的底層視圖就對我們開發(fā)這個功能非常有好處。下面是一些要知道的關(guān)鍵視圖:



GV$SQL_MONITOR視圖包含了語句執(zhí)行時的監(jiān)控數(shù)據(jù)。當(dāng)有多個會話在運(yùn)行相同的語句時,這個視圖會有多個記錄與之對應(yīng),所以請確保使用了正確的搜索過濾條件來獲得你所關(guān)注的SQL執(zhí)行情況。例如,應(yīng)該注意SID和INST_ID是不是你正在尋找的會話,對于并行執(zhí)行則是PX_QCSID和PX_QCINST_ID,如果在診斷一條當(dāng)前正在運(yùn)行的查詢,則要檢查列status是否顯示為executing狀態(tài)。



GV$SQL_PLAN_MONITOR 視圖包含了執(zhí)行計劃每一行的性能指標(biāo),這些指標(biāo)會被實時監(jiān)控和更新。



GV$ACTIVE_SESSION_HISTORY 視圖從ORACLE 11GR1開始包含了如SQL_PLAN_LINE_ID、SQL_PLAN_OPERATION和SQL_PLAN_OPTIONS這些列。通過查詢這些列,加上SQL_ID,就可以找到一個SQL執(zhí)行計劃中最顯著的行源,而不僅僅找到最顯著的執(zhí)行計劃。



5.10 控制SQL監(jiān)控



對于并行執(zhí)行的SQL,SQL監(jiān)控會馬上對他們啟用,而不管他們運(yùn)行的時間有多久。對于串行執(zhí)行的SQL,SQL監(jiān)控不會馬上啟用,因為SQL監(jiān)控并不是用來監(jiān)控通常運(yùn)行速度很快的OLTP查詢的,這類查詢每秒都會被執(zhí)行很多遍。然而,如果一個SQL串行查詢消耗多余5S的CPU和IO等待時間,他將會被認(rèn)為是一個長查詢,SQL監(jiān)控也會對此類查詢啟用。這是自動發(fā)生的,查詢語句不需要重新運(yùn)行。



可以使用提示MONITOR和NO_MONITOR來控制對一個語句的監(jiān)控與否。如果你對某一個運(yùn)行時間比較長的SQL不想做監(jiān)控,可以使用NO_MONITOR這個HINT。需要注意有一個跟NO_MONITOR非常相像的HINT NO_MONITORING,它是與SQL MONITORING功能完全不相關(guān)的東西,通過NO_MONITORING這個HINT可以禁止對表里先關(guān)字段的謂詞使用情況進(jìn)行監(jiān)控,這些監(jiān)控數(shù)據(jù)會被放入到sys.col_usage$中。



【SQL】Oracle SQL monitor



5.11 使用SQL獲取SQL MONITORING的輸出



經(jīng)過上面一系列的介紹,我們再來看通過SQL包獲取SQL MONITORING的輸出就變得極為簡單,這里我不會再花費(fèi)筆墨來對輸出做詳細(xì)的解釋,大部分的信息上面我都已經(jīng)講到過了。



這個主要是通過dbms_sqltune.report_sql_monitor來進(jìn)行的。下面的SQL的含義是,把SQL_ID為4vnz8232nugv9的查詢,最近的SQL MONITORING的信息以text格式打印出來:



【SQL】Oracle SQL monitor



【SQL】Oracle SQL monitor



【SQL】Oracle SQL monitor



【SQL】Oracle SQL monitor



【SQL】Oracle SQL monitor



dbms_sqltune.report_sql_monitor包的type除了我例子給出的text外,還可以有HTML,ACTIVE(11GR2),XML。如果你想查看某個SQL歷史的執(zhí)行統(tǒng)計信息而不是最近一次的,可以通過指定SQL_EXEC_ID 參數(shù)來進(jìn)行。詳細(xì)可以參考:



https://oracle-base.com/articles/11g/real-time-sql-monitoring-11gr1#active_html_reports_offline



About Me

...............................................................................................................................

● 本文整理自網(wǎng)絡(luò)

● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 數(shù)據(jù)庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯(lián)系我請加QQ好友(646634621),注明添加緣由

● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章內(nèi)容來源于小麥苗的學(xué)習(xí)筆記,部分整理自網(wǎng)絡(luò),若有侵權(quán)或不當(dāng)之處還請諒解

● 版權(quán)所有,歡迎分享本文,轉(zhuǎn)載請保留出處

...............................................................................................................................

拿起手機(jī)使用微信客戶端掃描下邊的左邊圖片來關(guān)注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學(xué)習(xí)最實用的數(shù)據(jù)庫技術(shù)。

【SQL】Oracle SQL monitor【SQL】Oracle SQL monitor

【SQL】Oracle SQL monitor
【SQL】Oracle SQL monitor
【SQL】Oracle SQL monitor

網(wǎng)頁標(biāo)題:【SQL】OracleSQLmonitor
文章起源:http://muchs.cn/article46/jehgeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、定制開發(fā)、App開發(fā)商城網(wǎng)站、虛擬主機(jī)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)