資料庫執行過程及原理

2021-10-06 01:32:50 字數 1758 閱讀 9673

第一步:應用程式將sql傳送給資料庫伺服器執行

在資料庫執行sql時,應用程式會連線到相應的資料庫伺服器,將sql傳送給伺服器處理

第二步:伺服器解析sql語句

1:sql計畫快取

1):伺服器在接收到查詢請求後,並不會馬上去資料庫查詢,而是在資料庫中的計畫快取中找是否有相對應的執行計畫,如果存在,就直接呼叫已經編譯好的執行計畫,節省了執行計畫的編譯時間。

2):如果所查詢的行已經存在於資料緩衝儲存區中,就不用查詢物理檔案了,而是從快取中取資料,這樣從記憶體中取資料就會比從硬碟上讀取資料快很多,提高了查詢效率.資料緩衝儲存區會在後面提到。

3)如果在sql計畫快取中沒有對應的執行計畫,伺服器首先會對使用者請求的sql語句進行語法效驗,如果有語法錯誤,伺服器會結束查詢操作,並用返回相應的錯誤資訊給呼叫它的應用程式。

4)語法符合後,就開始驗證它的語義是否正確,例如,表名,列名,儲存過程等等資料庫物件是否真正存在,如果發現有不存在的,就會報錯給應用程式,同時結束查詢。

5)獲得物件的解析鎖,我們在查詢乙個表時,首先伺服器會對這個物件加鎖,這是為了保證資料的統一性,如果不加鎖,此時有資料插入,但因為沒有加鎖的原因,查詢已經將這條記錄讀入,而有的插入會因為事務的失敗會回滾,就會形成髒讀的現象

6)校驗資料庫使用者許可權

對資料庫使用者許可權的驗證,sql語句語法,語義都正確,此時並不一定能夠得到查詢結果,如果資料庫使用者沒有相應的訪問許可權

7)語法,語義,許可權都驗證後,伺服器並不會馬上給你返回結果,而是會針對你的sql進行優化,選擇不同的查詢演算法以最高效的形式返回給應用程式

8)當確定好執行計畫後,就會把這個執行計畫儲存到sql計畫快取中

第三步:執行sql

伺服器對該sql解析完成後,才知道這個sql是否正確、表達什麼意思,才會真正的去執行它。

1):若查詢的資料已經讀取到資料快取儲存區的話,就直接去儲存區拿資料,避免從物理檔案中讀取,提高速率。

2):若快取區沒有該資料則從物理檔案中讀取並儲存到緩衝區。

說明:sql快取分好幾種,在sql調優時候,有時因為資料快取的存在沒辦法看出優化效果,需要先清除資料的快取。

具體流程見下圖:

拿oracle舉例,oracle總體結構分成三個部分:

1.記憶體結構:包括sga、pga。使用記憶體最多的是sga,同時也是影響資料庫效能的最大引數。

系統全域性區又稱sga (system global area)是oracle instance的 基本組成部分,在例項啟動時分配。是一組包含乙個oracle例項的資料和控制資訊的共享記憶體結構。主要是用於儲存資料庫資訊的記憶體區,該資訊為資料庫進 程所共享(pga不能共享的)。它包含oracle 伺服器的資料和控制資訊,它是在oracle伺服器所駐留的計算機的實際記憶體中得以分配,如果實際記憶體不夠再往虛擬記憶體中寫。

oracle為每個使用者程序建立乙個pga(program global area,程式全域性區),用於儲存與該使用者程序相關的資訊(如繫結變數、會話變數等)。

2.程序結構:包括前台程序,後台程序。前台程序是指服務程序,使用者程序。前台程序是根據實際需要執行的,並在需要結束是立即結束。後台程序是指在oracle資料庫啟動後自動啟動的幾個作業系統程序。

3.儲存結構:包括控制檔案、資料檔案、日誌檔案等作業系統檔案。

oracle資料庫例程由sga(system global area)和後台程序組成。

資料庫原理 儲存過程

什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...

MapReduce的原理及執行過程

hadoop mapreduce是乙個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上tb級別的海量資料集。mapreduce是一種分布式計算模型,是google提出的,主要用於搜尋領域,解決海量資料的計...

資料庫原理及應用 2

單一的資料結構 關係 現實世界的實體以及實體間的各種聯絡均用關係來表示 邏輯結構 二維表 從使用者角度,關係模型中資料的邏輯結構是一張二維表 建立在集合代數的基礎上一組具有相同資料型別的值的集合 笛卡爾積可表示為乙個二維表 表中的每行對應乙個元組,表中的每列對應乙個域 d1 d2 dn的子集叫作在域...