ORACLE SQL效能調優系列一

2021-06-14 07:49:04 字數 2096 閱讀 2143

oracle的記憶體結構

sga和sql

ü當使用者訪問的

sql語句已經快取在

sga中,那麼該

sql就很

不用再解析

了,縮短

sql的執行時間。 ü

當使用者訪問的資料已經快取在

sga中,那麼就不用再從磁碟讀取,減少磁碟

io次數。 ü

sga越大快取的資料

(包含表和索引

)越多,執行的磁碟

io越少,效能越好。

sql執行過程ü1

、語法檢查

(syntaxcheck) •

語法是否合法; ü

2、語義檢查

(semanticcheck) •

表字段以及許可權檢驗; ü

硬解析:

sql初次執行 1.

根據where

子句和object

的統計資訊

(optimizer

),選擇相關的優化器

(cbo/rbo),

建立解析樹。 2.

根據解析樹,生成執行計畫,放入

sga共享池的

library cache中。

ü軟解析:

sql及執行計畫已在

sga中 執行

sql,

返回結果

sql軟解析要求 ü

sql文字必須完全一樣,包括空格,大小寫和換行。 1.

select

* from ware_info(

基準sql); 2.

select

* from  ware_info(

多乙個空格);

3.select *

from ware_info(有換行);

ü兩個語句所指的物件必須完全相同。 1.

select

* from ware_info;

和同義詞

ware_info: select

* from ware_info

是不一樣的。 ü

兩個sql

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

(bindvariables)。

sql訪問行資料

通過索引訪問

全表掃瞄訪問

sql訪問基礎 ü

oracle

讀取資料是以塊為單位的,每塊預設大小是

8k,小表指的就是表的塊數比較少。 ü

對應小表全表掃瞄比索引掃瞄要快,減少一致性讀次數和磁碟

io讀取次數,除非資料都在索引中。 –

全表掃瞄運用多塊載入,預設一次載入

16塊,磁碟

io=tbl_blocks

/16。 –

索引掃瞄獲取表資料把全表索引和表載入到記憶體次數

=index_blocks

*degree+

tbl_blocks。

– 一致性讀次數上索引掃瞄比全表掃瞄要至少多一次索引掃瞄。 –

一次一致性讀至少需要獲取兩次

latch(cachelatch ,

lrulatch).

• cpu

負載的瓶頸在於

latch

的競爭。 ø

全表載入記憶體比使用索引需要更少的

latch ø

全表載入只讀取一次磁碟,以後不需要讀取,索引需要讀取至少兩次磁碟,讀取時間的加長更加劇了

latch

的競爭等待。

說明對於小表,oracle沒有索引的效能優化有索引的查詢原理。

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.資料庫技術經驗篇 sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列...

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列基礎篇 並行運算總...

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列基礎篇 並行運算總...