1-shared pool之SQL執(zhí)行過程剖析

一姜钳、SQL解析執(zhí)行主要包括三個(gè)步驟:

? ? ? ? ? 1藤树、客戶端輸入SQL語句;

? ? ? ? ? 2算吩、SQL語句通過網(wǎng)絡(luò)到達(dá)數(shù)據(jù)庫實(shí)例留凭;

? ? ? ? ? 3、server process(前臺(tái)進(jìn)程)接收SQL語句:

? ? ? ? ? ? ? ? 1)解析:解析主要做兩件事情偎巢,SQL語法蔼夜、權(quán)限、訪問對象是否存在等压昼;SQL該如何執(zhí)行---找個(gè)最優(yōu)的執(zhí)行方案生成執(zhí)行計(jì)劃

? ? ? ? ? ? ? ? 2)執(zhí)行:根據(jù)生成的執(zhí)行計(jì)劃求冷,執(zhí)行SQL

? ? ? ? ? ? ? ? 其中瘤运,SQL語句和執(zhí)行計(jì)劃都需要緩存,即shared pool

二匠题、基本概念

? ? ? ? ? 1拯坟、Logic read:server process從buffer cache中讀取數(shù)據(jù)返回給用戶。

? ? ? ? ? 2韭山、Physics read:server process先把dbf(數(shù)據(jù)庫文件)數(shù)據(jù)從磁盤讀到buffer cache中似谁,然后再從buffer cache中讀取數(shù)據(jù)返回給用戶。

? ? ? ? ? 3掠哥、命中率:指的是巩踏,對于所有數(shù)據(jù)塊的讀取,buffer cache讀的塊數(shù)占buffer cache讀和dbf讀總塊數(shù)的比率续搀。即L/(L+P)

? ? ? ? ? 在這里塞琼,命中率低一定有問題,命中率高的話禁舷,不一定沒問題彪杉。例如:一定時(shí)間邏輯讀10萬次,物理讀1萬牵咙。雖然命中率很高派近,但是物理讀也很多。那么洁桌,對于數(shù)據(jù)塊的讀取渴丸,需要關(guān)注每秒的物理讀次數(shù),即查看IO是否繁忙另凌,可以通過以下命令:

linux:vmstat 1 10? ? ? iostat 1 10? ? sar 1 10? mpstat(查看多處理器狀況)

三谱轨、進(jìn)程之間的協(xié)同工作

? ? ? ? 考慮到最復(fù)雜情況,以修改和物理讀操作為例:

? ? ? ? ? 1吠谢、server process將dbf讀到buffer cache中進(jìn)行修改土童;

? ? ? ? ? 2吝羞、server process對數(shù)據(jù)的修改產(chǎn)生日志(server process產(chǎn)生)济丘,日志將被server process寫到log buffer(內(nèi)存空間)中;

? ? ? ? ? 3资厉、commit之后王污,后臺(tái)進(jìn)程LGWR將日志實(shí)時(shí)寫到log file中罢吃;

? ? ? ? ? 4、在一定的觸發(fā)條件下玉掸,DBWR將臟的數(shù)據(jù)塊從buffer cache寫到磁盤中刃麸。

? ? ? ? ? 整個(gè)過程,server process不負(fù)責(zé)寫(datafile)而只負(fù)責(zé)讀(buffer cache)的原因:server process直接為用戶服務(wù)司浪,接收到用戶的SQL之后泊业,首先對SQL進(jìn)行解析把沼,然后執(zhí)行SQL,最后獲取數(shù)據(jù)將結(jié)果返回給用戶吁伺。如果server process慢的話饮睬,用戶會(huì)感到數(shù)據(jù)庫很慢。所以篮奄,server process并不關(guān)心什么時(shí)候?qū)⑿薷牡臄?shù)據(jù)寫到磁盤(交由后臺(tái)進(jìn)程DBWR捆愁、LGWR來完成)。

數(shù)據(jù)庫主要進(jìn)程的作用:

? ? ? CKPT:周期性運(yùn)行窟却,比較輕松昼丑,將數(shù)據(jù)庫當(dāng)前的狀態(tài)信息寫到control file和datafile header中,即更新控制文件和數(shù)據(jù)文件頭部夸赫。

? ? ? SMON:負(fù)責(zé)對數(shù)據(jù)庫實(shí)例(SGA)內(nèi)部進(jìn)行清理和維護(hù)菩帝。例如:共享池的碎片整理

? ? ? PMON:負(fù)責(zé)對數(shù)據(jù)庫實(shí)例外部(server process)進(jìn)行維護(hù)和清理。例如:客戶端網(wǎng)絡(luò)斷掉茬腿,server process一直被用戶啟用著呼奢,PMON會(huì)周期性的啟動(dòng),發(fā)現(xiàn)server process的客戶端已經(jīng)斷掉切平,PMON會(huì)清理該server process:關(guān)掉server process的進(jìn)程握础,清理所對應(yīng)PGA的內(nèi)存空間。

? ? ? ARCH:歸檔log file

緩沖區(qū)的主要狀態(tài):

? ? ? 干凈悴品、未使用禀综、臟、連接(pin)---server process讀寫數(shù)據(jù)塊的瞬間

? ? ? 如果所有的buffer都被使用他匪,優(yōu)先使用干凈的buffer(datafile中有相同的block)菇存;如果所有的buffer都是臟的,則會(huì)觸發(fā)DBWR將臟的buffer寫到磁盤邦蜜,buffer變?yōu)楦蓛舻模軌虮恢赜谩?/p>

? ? ? 有些人可能會(huì)問:數(shù)據(jù)從磁盤被讀到buffer cache中亥至,在內(nèi)存中是依據(jù)什么原則悼沈,如何組織的呢?DBWR寫臟數(shù)據(jù)塊到磁盤姐扮,又是依據(jù)什么規(guī)則呢絮供?buffer cache使用了LRU chain和checkpoint queue來保證數(shù)據(jù)塊讀的命中率和臟數(shù)據(jù)塊是如何寫入磁盤的。在后續(xù)《buffer_cache內(nèi)存組織結(jié)構(gòu)剖析》和《檢查點(diǎn)隊(duì)列》章節(jié)中有詳細(xì)介紹茶敏。

四壤靶、SQL解析類型---硬解析與軟解析

? ? ? ? ? 1、shared pool的主要作用:緩存SQL語句和SQL語句的執(zhí)行計(jì)劃惊搏。它是由三塊區(qū)域組成:free贮乳、library cache忧换、row cache(dictionary cache)。

? ? ? ? ? ? ? ? ? ? 1)library cache:緩存SQL語句以及SQL語句的執(zhí)行計(jì)劃

? ? ? ? ? ? ? ? ? ? 2)dictionary cache:oracle數(shù)據(jù)庫自身的信息向拆。例如亚茬,數(shù)據(jù)庫中有多少表、多少用戶浓恳、表有多少列刹缝、列名是什么、列的數(shù)據(jù)類型颈将、每個(gè)表多大等信息梢夯。其中,所有的數(shù)據(jù)字典信息可在官方文檔中查找books--->reference--->dba_tables

? ? ? ? ? 2晴圾、查看shared pool大谐怼:select a.pool,sum(a.bytes) as sum_bytes from v$sgastat a where a.pool_name='shared pool' group by a.pool;

查看shared pool大小

? ? ? ? ? 3、SQL解析(hard parse,soft parse):

? ? ? ? ? 硬解析主要由四個(gè)階段完成:

? ? ? ? ? ? ? ? ? 1)server process判斷SQL語句語法是否有錯(cuò)誤

? ? ? ? ? ? ? ? ? 2)查看SQL語句所涉及的對象是否存在

? ? ? ? ? ? ? ? ? 3)執(zhí)行SQL的用戶對對象是否有相應(yīng)權(quán)限(系統(tǒng)權(quán)限疑务、對象全向)

? ? ? ? ? ? ? ? ? 4)生成執(zhí)行計(jì)劃沾凄,即在N個(gè)執(zhí)行方案中挑選出最優(yōu)的一個(gè)方案作為這條SQL的執(zhí)行計(jì)劃---最消耗資源

? ? ? ? ? 軟解析:不包含第四步,僅僅做常規(guī)判斷

? ? ? ? ? 那么知允,什么時(shí)候發(fā)生硬解析呢撒蟀?server process拿著SQL語句在library cache中找,如果這條SQL語句在library cache中沒有温鸽,說明該語句和它的執(zhí)行計(jì)劃在library cache中沒有保屯,此時(shí)發(fā)生硬解析,如果有則發(fā)生軟解析涤垫。無論是硬解析還是軟解析姑尺,解析過程中用到很多數(shù)據(jù)庫自身信息(權(quán)限信息、對象信息蝠猬、對象統(tǒng)計(jì)信息---字典信息)切蟋,即對SQL語句進(jìn)行解析的時(shí)候,都要頻繁的訪問數(shù)據(jù)字典信息榆芦。所以柄粹,row cache放在shared pool和library cache在一起。

? ? ? ? ? 軟硬解析的具體情況:

查看解析次數(shù)


? ? ? ? ? ? 本節(jié)主要以SQL的執(zhí)行過程為線索匆绣,初步認(rèn)識(shí)了shared pool的相關(guān)知識(shí)驻右。下一節(jié)主要說明shared pool內(nèi)存塊是如何組織的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崎淳,一起剝皮案震驚了整個(gè)濱河市堪夭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖森爽,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恨豁,死亡現(xiàn)場離奇詭異,居然都是意外死亡拗秘,警方通過查閱死者的電腦和手機(jī)圣絮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雕旨,“玉大人扮匠,你說我怎么就攤上這事》采” “怎么了棒搜?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長活箕。 經(jīng)常有香客問我力麸,道長,這世上最難降的妖魔是什么育韩? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任克蚂,我火速辦了婚禮,結(jié)果婚禮上筋讨,老公的妹妹穿的比我還像新娘埃叭。我一直安慰自己,他們只是感情好悉罕,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布赤屋。 她就那樣靜靜地躺著,像睡著了一般壁袄。 火紅的嫁衣襯著肌膚如雪类早。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天嗜逻,我揣著相機(jī)與錄音涩僻,去河邊找鬼。 笑死变泄,一個(gè)胖子當(dāng)著我的面吹牛令哟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妨蛹,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晴竞!你這毒婦竟也來了蛙卤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颤难,沒想到半個(gè)月后神年,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡行嗤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年已日,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栅屏。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飘千,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栈雳,到底是詐尸還是另有隱情护奈,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布哥纫,位于F島的核電站霉旗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛀骇。R本人自食惡果不足惜厌秒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擅憔。 院中可真熱鬧鸵闪,春花似錦、人聲如沸雕欺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屠列。三九已至啦逆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笛洛,已是汗流浹背夏志。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛让,地道東北人沟蔑。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像狱杰,于是被迫代替她去往敵國和親瘦材。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容