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数据库物理体系结构及其对应优化策略...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 一分钟内_MySQL语句需要
- 下一篇: python框架 mysql数据库_在P