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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

張志國

合肥科技研發中心

Oracle數據庫服務器有兩個主要的組成部分:數據庫和實例(instance)。Oracle數據庫用于存儲和檢索信息,是數據的集合。Oracle實例是指數據庫服務器的內存及相關處理程序。

正因為如此,我們一般才會說關閉和啟動實例,加載卸載數據庫,就是這個道理。

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

一、Oracle數據庫的物理體系結構

如上圖,我們可知:

① Oracle由實例instance和數據庫database組成。

②?實例是由一個共享內存區SGA (G=Global)和一系列后臺進程組成。SGA劃分為共享池、數據緩沖區和日志緩沖區三類。后臺進程包括DBWR、LGWR、CKRT、ARCH等。

③?數據庫由數據文件、參數文件、日志文件、控制文件、歸檔日志等組成,其中歸檔日志最終會被轉移到存儲介質中,用于備份和恢復數據使用。

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

二、由物理體系結構探查SQL執行步驟

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

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

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

(3)帶著執行計劃的sql接下來進入第三個區域:數據緩存區,去獲得需要的數據,如果查到該數據,則返回給sql帶回到PGA。如果沒有,就要大費周章地去磁盤(增大IO降低速度)里面查找。查找的方式就是按照執行計劃來。讀出來的數據會被放回數據緩存區和PGA。

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

(1)因為會話沒有斷開,所以不需要再去數據庫讀取權限和用戶信息,少了很多物理讀。

(2)因為是第二次執行同一條語句,所以SGA的共享池里已經保存了相對應的hash值,比照一樣之后,不需要做語法語義的驗證,也不需要做硬解析獲得優化的執行計劃,只要把已經解析好的執行計劃拿來用就好。

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

三、由物理體系得到優化方案

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

優化前:

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;

/

以上為存儲過程的定義

?exec proc1; 執行耗時42.87s;

優化后:采用綁定變量方式,減少解析時間

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;

/

以上為存儲過程的定義

?exec proc2; 執行耗時8.41s

四、小? 結

因為Oracle有緩存的功能,如果有緩存SQL相應的連接信息、權限信息、執行計劃、數據等,不用去磁盤上讀取,可以減少物理讀。所以執行相同的SQL,第二次比第一次快。另外,采用綁定變量的方式,可以避免多次硬解析的操作,節約執行時間,也可以達到優化的效果。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。