溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【體系結(jié)構(gòu)】一條SQL語句經(jīng)歷了什么

發(fā)布時(shí)間:2020-08-16 01:39:41 來源:ITPUB博客 閱讀:132 作者:恩強(qiáng)Boy 欄目:關(guān)系型數(shù)據(jù)庫

我們都知道 Oracle 是通過 SQL 語句來查詢或者進(jìn)行修改的。那么 SQL 從客戶端執(zhí)行開始,經(jīng)歷了哪些進(jìn)程?哪些 SGA ?是怎么進(jìn)入到數(shù)據(jù)文件的呢?請往下看

情況一:在數(shù)據(jù)庫中查詢 select

【體系結(jié)構(gòu)】一條SQL語句經(jīng)歷了什么

如圖所示:

① 客戶端輸入 SQL,SQL 語句通過網(wǎng)絡(luò)到達(dá)數(shù)據(jù)庫實(shí)例,前臺(tái)進(jìn)程(服務(wù)器進(jìn)程)接受 SQL 語句, PGA 這時(shí)會(huì)分配一段空間給前臺(tái)進(jìn)程。

② 將 SQL 語句解析為“執(zhí)行計(jì)劃”,然后才能執(zhí)行

解析這部分消耗很多資源: CPU I/O 。

此時(shí) SQL 語句和執(zhí)行計(jì)劃都會(huì)被緩存在共享池 (shared pool)

③ 通過生成的執(zhí)行計(jì)劃在數(shù)據(jù)庫緩沖區(qū)( buffer cache )和 dbf 文件中找數(shù)據(jù)

此過程會(huì)涉及數(shù)據(jù)庫緩沖區(qū),數(shù)據(jù)庫緩沖區(qū)的作用就是緩存 dbf 的數(shù)據(jù)。所以是首先從數(shù)據(jù)庫緩沖區(qū)看是否有數(shù)據(jù),有的話就從數(shù)據(jù)庫緩沖區(qū)中獲取,如果沒有就從 dbf 文件中獲取。 dbf 中的數(shù)據(jù)首先會(huì)傳到數(shù)據(jù)庫緩沖區(qū)中。然后在通過前臺(tái)進(jìn)程將數(shù)據(jù)返回客戶端。

① ② ③過程都是有前臺(tái)進(jìn)程完成


情況二:修改某個(gè)表的數(shù)據(jù)

【體系結(jié)構(gòu)】一條SQL語句經(jīng)歷了什么

①  同查詢一樣,客戶端將要求前臺(tái)進(jìn)程傳輸?shù)焦蚕沓刂?,然后到?shù)據(jù)庫緩沖區(qū)讀數(shù)據(jù)。如果數(shù)據(jù)庫緩沖區(qū)中沒有數(shù)據(jù),那么就從 dbf 文件中找, dbf 中的數(shù)據(jù)會(huì)傳送到數(shù)據(jù)庫緩沖區(qū),由前臺(tái)進(jìn)程進(jìn)行讀取。

②  前臺(tái)進(jìn)程在數(shù)據(jù)庫緩沖區(qū)中對表進(jìn)行修改,提交,此時(shí),會(huì)產(chǎn)生日志。產(chǎn)生的日志會(huì)寫到日志緩沖區(qū)中。

③  在數(shù)據(jù)庫緩沖區(qū)中修改完數(shù)據(jù)后,此時(shí)內(nèi)存中的數(shù)據(jù)和數(shù)據(jù)文件中的數(shù)據(jù)不一致。需要將內(nèi)存中的數(shù)據(jù)寫到數(shù)據(jù)文件中。這個(gè)過程由數(shù)據(jù)庫寫進(jìn)程來完成。

④  內(nèi)存中日志緩沖區(qū)產(chǎn)生的日志需要寫到日志文件中,這個(gè)過程由日志寫進(jìn)程完成。




------------- end ---------------


 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI