我們都知道 Oracle 是通過 SQL 語句來查詢或者進(jìn)行修改的。那么 SQL 從客戶端執(zhí)行開始,經(jīng)歷了哪些進(jìn)程?哪些 SGA ?是怎么進(jìn)入到數(shù)據(jù)文件的呢?請往下看
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供東城網(wǎng)站建設(shè)、東城做網(wǎng)站、東城網(wǎng)站設(shè)計、東城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、東城企業(yè)網(wǎng)站模板建站服務(wù),10年東城做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
如圖所示:
① 客戶端輸入 SQL,SQL 語句通過網(wǎng)絡(luò)到達(dá)數(shù)據(jù)庫實例,前臺進(jìn)程(服務(wù)器進(jìn)程)接受 SQL 語句, PGA 這時會分配一段空間給前臺進(jìn)程。
② 將 SQL 語句解析為“執(zhí)行計劃”,然后才能執(zhí)行
解析這部分消耗很多資源: CPU 和 I/O 。
此時 SQL 語句和執(zhí)行計劃都會被緩存在共享池 (shared pool) 中
③ 通過生成的執(zhí)行計劃在數(shù)據(jù)庫緩沖區(qū)( buffer cache )和 dbf 文件中找數(shù)據(jù)
此過程會涉及數(shù)據(jù)庫緩沖區(qū),數(shù)據(jù)庫緩沖區(qū)的作用就是緩存 dbf 的數(shù)據(jù)。所以是首先從數(shù)據(jù)庫緩沖區(qū)看是否有數(shù)據(jù),有的話就從數(shù)據(jù)庫緩沖區(qū)中獲取,如果沒有就從 dbf 文件中獲取。 dbf 中的數(shù)據(jù)首先會傳到數(shù)據(jù)庫緩沖區(qū)中。然后在通過前臺進(jìn)程將數(shù)據(jù)返回客戶端。
① ② ③過程都是有前臺進(jìn)程完成
① 同查詢一樣,客戶端將要求前臺進(jìn)程傳輸?shù)焦蚕沓刂校缓蟮綌?shù)據(jù)庫緩沖區(qū)讀數(shù)據(jù)。如果數(shù)據(jù)庫緩沖區(qū)中沒有數(shù)據(jù),那么就從 dbf 文件中找, dbf 中的數(shù)據(jù)會傳送到數(shù)據(jù)庫緩沖區(qū),由前臺進(jìn)程進(jìn)行讀取。
② 前臺進(jìn)程在數(shù)據(jù)庫緩沖區(qū)中對表進(jìn)行修改,提交,此時,會產(chǎn)生日志。產(chǎn)生的日志會寫到日志緩沖區(qū)中。
③ 在數(shù)據(jù)庫緩沖區(qū)中修改完數(shù)據(jù)后,此時內(nèi)存中的數(shù)據(jù)和數(shù)據(jù)文件中的數(shù)據(jù)不一致。需要將內(nèi)存中的數(shù)據(jù)寫到數(shù)據(jù)文件中。這個過程由數(shù)據(jù)庫寫進(jìn)程來完成。
④ 內(nèi)存中日志緩沖區(qū)產(chǎn)生的日志需要寫到日志文件中,這個過程由日志寫進(jìn)程完成。
------------- end ---------------
文章標(biāo)題:【體系結(jié)構(gòu)】一條SQL語句經(jīng)歷了什么
分享URL:http://chinadenli.net/article38/ipccsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、標(biāo)簽優(yōu)化、網(wǎng)站排名、面包屑導(dǎo)航、網(wǎng)站制作、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)