日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...

發(fā)布時(shí)間:2025/3/20 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

張志國(guó)

合肥科技研發(fā)中心

Oracle數(shù)據(jù)庫服務(wù)器有兩個(gè)主要的組成部分:數(shù)據(jù)庫和實(shí)例(instance)。Oracle數(shù)據(jù)庫用于存儲(chǔ)和檢索信息,是數(shù)據(jù)的集合。Oracle實(shí)例是指數(shù)據(jù)庫服務(wù)器的內(nèi)存及相關(guān)處理程序。

正因?yàn)槿绱?#xff0c;我們一般才會(huì)說關(guān)閉和啟動(dòng)實(shí)例,加載卸載數(shù)據(jù)庫,就是這個(gè)道理。

從實(shí)例和數(shù)據(jù)庫的概念上來看,我們能知道,實(shí)例是暫時(shí)的,它不過是一組邏輯劃分的內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu),會(huì)隨著數(shù)據(jù)庫的關(guān)閉而消失,而數(shù)據(jù)庫其實(shí)就是一堆物理文件(控制文件,數(shù)據(jù)文件,日志文件等等),它是永久存在的(除非磁盤損壞)。數(shù)據(jù)庫和實(shí)例通常是一對(duì)一的,這種結(jié)構(gòu)我們稱為單實(shí)例體系結(jié)構(gòu)。當(dāng)然還有一些復(fù)雜的分布式的結(jié)構(gòu),一個(gè)數(shù)據(jù)庫可以對(duì)多個(gè)實(shí)例,像Oracle的RAC(有興趣的童鞋可以了解下)。

一、Oracle數(shù)據(jù)庫的物理體系結(jié)構(gòu)

如上圖,我們可知:

① Oracle由實(shí)例instance和數(shù)據(jù)庫database組成。

②?實(shí)例是由一個(gè)共享內(nèi)存區(qū)SGA (G=Global)和一系列后臺(tái)進(jìn)程組成。SGA劃分為共享池、數(shù)據(jù)緩沖區(qū)和日志緩沖區(qū)三類。后臺(tái)進(jìn)程包括DBWR、LGWR、CKRT、ARCH等。

③?數(shù)據(jù)庫由數(shù)據(jù)文件、參數(shù)文件、日志文件、控制文件、歸檔日志等組成,其中歸檔日志最終會(huì)被轉(zhuǎn)移到存儲(chǔ)介質(zhì)中,用于備份和恢復(fù)數(shù)據(jù)使用。

④ PGA也是一塊開辟出來的內(nèi)存區(qū),和SGA區(qū)別在于,PGA是私有的。作用主要包括:保存用戶的連接信息,如會(huì)話和綁定變量,保存用戶權(quán)限等信息,承擔(dān)一部分(排序尺寸太大的話,超出的部分放在臨時(shí)表空間進(jìn)行)排序功能。

二、由物理體系結(jié)構(gòu)探查SQL執(zhí)行步驟

一條查詢語句:SELECT T.OBJECT_ID FROM DBA_OBJECTS T WHERE T.OBJECT_ID = 12;Oracle會(huì)執(zhí)行如下步驟:

(1)這個(gè)時(shí)候先完成PGA的3步驟中的頭2步:保存會(huì)話信息,用戶權(quán)限信息,然后將sql語句hash出一條hash值。

(2)帶著hash值,sql進(jìn)入了第二個(gè)區(qū)域:共享池,在這里首先查找是否有同樣的hash值。如果沒有,那么就比較辛苦:首先查詢語法是否正確,然后查詢語義(表和字段有沒有寫錯(cuò))是否正確,是否有權(quán)限等,確認(rèn)完這些,將hash值存儲(chǔ)下來。接下來進(jìn)行硬解析,經(jīng)過優(yōu)化器分析以后Oracle會(huì)選擇一個(gè)低成本的執(zhí)行計(jì)劃。

(3)帶著執(zhí)行計(jì)劃的sql接下來進(jìn)入第三個(gè)區(qū)域:數(shù)據(jù)緩存區(qū),去獲得需要的數(shù)據(jù),如果查到該數(shù)據(jù),則返回給sql帶回到PGA。如果沒有,就要大費(fèi)周章地去磁盤(增大IO降低速度)里面查找。查找的方式就是按照?qǐng)?zhí)行計(jì)劃來。讀出來的數(shù)據(jù)會(huì)被放回?cái)?shù)據(jù)緩存區(qū)和PGA。

但是,執(zhí)行同樣一條查詢語句,第二次的時(shí)間明顯變少了。第一次執(zhí)行耗時(shí):2.547S,第二次執(zhí)行耗時(shí):0.141S。前后兩次執(zhí)行同一條語句,第二次比第一次少很多時(shí)間。原因是第二次少做了一些事情:

(1)因?yàn)闀?huì)話沒有斷開,所以不需要再去數(shù)據(jù)庫讀取權(quán)限和用戶信息,少了很多物理讀。

(2)因?yàn)槭堑诙螆?zhí)行同一條語句,所以SGA的共享池里已經(jīng)保存了相對(duì)應(yīng)的hash值,比照一樣之后,不需要做語法語義的驗(yàn)證,也不需要做硬解析獲得優(yōu)化的執(zhí)行計(jì)劃,只要把已經(jīng)解析好的執(zhí)行計(jì)劃拿來用就好。

(3)數(shù)據(jù)被取到SGA的數(shù)據(jù)緩存區(qū)里面,也不需要去硬盤讀。

三、由物理體系得到優(yōu)化方案

由以上的訪問步驟可以知道,只要理解好數(shù)據(jù)庫的物理結(jié)構(gòu),就可以得到一些優(yōu)化思路:采用綁定變量的方式,可以避免多次硬解析。

優(yōu)化前:

create table t (x int);

create or replace procedure proc1

as

begin

for i in 1..100000

loop

????????execute immediate

????????‘insert into t values(‘||i||’)’;

commit;

end loop;

end;

/

以上為存儲(chǔ)過程的定義

?exec proc1; 執(zhí)行耗時(shí)42.87s;

優(yōu)化后:采用綁定變量方式,減少解析時(shí)間

drop table t purge;

create table t (x int);

create or replace procedure proc2

as

begin

for i in 1..100000

loop

????????execute immediate

????????'insert into t values( :x )' using i;

commit;

end loop;

end;

/

以上為存儲(chǔ)過程的定義

?exec proc2; 執(zhí)行耗時(shí)8.41s

四、小? 結(jié)

因?yàn)镺racle有緩存的功能,如果有緩存SQL相應(yīng)的連接信息、權(quán)限信息、執(zhí)行計(jì)劃、數(shù)據(jù)等,不用去磁盤上讀取,可以減少物理讀。所以執(zhí)行相同的SQL,第二次比第一次快。另外,采用綁定變量的方式,可以避免多次硬解析的操作,節(jié)約執(zhí)行時(shí)間,也可以達(dá)到優(yōu)化的效果。

總結(jié)

以上是生活随笔為你收集整理的oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。