溫馨提示×

溫馨提示×

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

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

Oracle之SQL執(zhí)行

發(fā)布時(shí)間:2020-07-14 12:13:09 來源:網(wǎng)絡(luò) 閱讀:593 作者:live_in_present 欄目:關(guān)系型數(shù)據(jù)庫

1、Oracle Concepts Guide一書中詳細(xì)地講解了SQL語言和數(shù)據(jù)庫的每個(gè)部分。建議使用Oracle的人都去讀一讀《Oracle Concepts Guide》。

2、共享池和數(shù)據(jù)庫高速緩存

2.1 SGA共享池:共享SQL/PL/SQL代碼在用戶之間

共享池存放的內(nèi)容:SQL語句和Oracle使用的系統(tǒng)參數(shù)(在一塊被稱為數(shù)據(jù)字典高速緩存的區(qū)域)Oracle將你能想到的幾乎所有東西都存在共享池中。

    分配給共享池的內(nèi)存區(qū)域是有限的,所以當(dāng)新語句執(zhí)行時(shí),原先已經(jīng)加載的語句就不

能長時(shí)間的放在其中。有一種算法叫做最近最少使用(Least Recently Used, LRU),它可以用來管理共享池中的對象。

2.2 庫高速緩存

解析:庫高速緩存主要是存在已經(jīng)解析過的語句的區(qū)域。

軟解析:Oracle 取回之前解析的信息并重用。

硬解析:語句之前沒有執(zhí)行過,那么Oracle將執(zhí)行所有的工作來為當(dāng)前的語句生成執(zhí)行計(jì) 劃,并且將它存在緩存中以便將來重用。

每次進(jìn)行硬解析時(shí),在能夠?qū)嶋H執(zhí)行語句之前,Oralce必須收集它的所有信息。多次查詢數(shù)據(jù)字典。

****硬解析干了什么?

  打開追蹤數(shù)據(jù)。擴(kuò)展的SQL追蹤能抓取執(zhí)行過程中發(fā)生的每個(gè)活動(dòng),你能看到所執(zhí)行的語句和Oracle必須執(zhí)行的每個(gè)語句。

2.3 完全相同的語句

    通過查詢v$sql視圖可以看到存在庫高速緩存中執(zhí)行過的sql語句:

select sql_text, sql_id, child_number, hash_value, executions from v$sql where upper(sql_text) like '%EMPLOYEESS%';

     如何檢查sql語句是否完全相同,oracle會(huì)首先將字符串轉(zhuǎn)換為散列值。這個(gè)散列值就作為該語句存放到庫高速緩存是的關(guān)鍵字。通過比較散列值來尋找匹配。

      任何的不同都會(huì)導(dǎo)致散列值的不同,這也是為什么在你的sql語句中使用綁定變量而不是常量會(huì)如此重要的原因。當(dāng)使用綁定變量時(shí),即使你改變了綁定變量的值,Oracle還是可以共享這個(gè)語句。

      在獲取庫高速緩存中的任何信息之前,Oracle都會(huì)獲得一個(gè)鎖存器,其他所有繪畫都必須等待,直到該鎖存器被釋放它們才能獲得鎖存器已完成工作。

       互斥鎖,是一個(gè)序列化組件,用來阻止多個(gè)線程同時(shí)訪問一個(gè)共享結(jié)構(gòu)。

與鎖存器相比,互斥鎖最大的優(yōu)勢在于:占用的內(nèi)存較少,并且可以快速釋放。

       需要注意的是:語法解析仍然需要使用庫高速緩存鎖存器。使你的代碼較少使用鎖存器(也就是硬解析)是非常關(guān)鍵的。


向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