Oracle效能優化筆記之sql共享

2021-09-29 12:48:46 字數 1303 閱讀 6848

本文介紹oracle效能優化中的sql共享

首先介紹一下sql共享的原理

sql共享原理

在第一次解析sql語句之後,oracle將會sql語句放入記憶體中。這塊記憶體位於sga的共享池(shared buffer pool1)中。它可以被所有資料庫使用者所共享。因此當乙個使用者執行乙個sql語句(游標)時候,如果它和之前執行過的語句完全相同。oracle就能很快獲得已經被解析的語句和最好的執行方案。

sql共享的三個條件:

當前被執行語句和共享池中的語句必須完全相同(包括大小寫、空格、換行等)

兩個語句所指物件必須完全相同,即兩條sql語句操作的資料庫物件必須相同

兩個sql語句中必須使用相同的名字繫結變數

對於第乙個條件很好理解:

select  *from atable

select * from atable;

這兩個sql雖然執行的是相同的操作,但是無法使用sql共享原理進行進行優化,因此這對我們sql**的格式提出了非常嚴格的要求。

第二個條件也很好理解,即操作的資料庫物件一致。

第三個條件意味著使用的繫結變數的名字也需要一致。先大概瞅一瞅什麼是繫結變數名一致

--組一

select pin,name from people where pin = :blk1.pin;

select pin,name from people where pin = :blk1.pin;

--組二

select pin,name from people where pin =:blk1.ot_jnd;

select pin,name from people where pin = :blk1.ov_jnd;

第一組的sql是相同的。第二組sql是不同的,哪怕在執行的過程中這兩個不同的繫結變數被賦予相同的值也是無法共享sql的。

接下來介紹一下什麼是繫結變數

oracle的繫結變數:

繫結變數能夠替代sql語句中的常量變數。

為什麼要使用繫結變數:

下面的sql語句每執行一次就需要被硬解析一次,一百萬使用者就需要被硬解析一百萬次,極大的消耗了cpu資源,甚至引起宕機。但是如果使用繫結變數,則該語句只需要被硬解析一次,然後重複呼叫即可。

select * from table1 where id = 32013484095139

Oracle效能優化的學習筆記

記憶體優化 sga包括三個部分組成。資料緩衝區 日誌緩衝區及共享池 資料緩衝區 大小由db cache size引數決定。select name,value from v parameter where name in db cache size db block size shared pool ...

Oracle效能優化的學習筆記

記憶體優化 sga包括三個部分組成。資料緩衝區 日誌緩衝區及共享池 資料緩衝區 大小由db cache size引數決定。select name,value from v parameter where name in db cache size db block size shared pool ...

oracle之date 查詢效能優化

建立測試表 created table test id varchar2 20 not null,dtime date 插入6000000資料 declare i number k number begin k 0 for i in 1 6000000 loop insert into test i...