close

SQL語句執行分3階段:解析(Parse)、執行(Execution)、獲取數據(Fetch) 

  

 我們主要關注Shared pool3大塊:freeLibrary cacherow cache

Free

空閒空間

Library cache

又叫庫緩存,主要緩存SQL語句,以及對應的SQL執行計畫

row cache

又叫字典緩存,緩存字典信息,Oracle DB自身的信息都放在這裡面

(例:DB有多少table、有多少USERtable有多少列、table有多大、列的名字是什麼)

 

 查看Oracle 有多少數據字典與其內容涵意

 

 1.開啟官方文檔

文檔連結  http://www.oracle.com/technetwork/cn/indexes/documentation/index.html(這使用10g 第二版)

 

 2.上方Books

Ctrl + F 搜尋Reference HTML進入

 

 3.2 Static Data Dictionary Views: ALL_ALL_TABLES to ALL_MVIEWS開始後面都是數據字典

 

▌ 數據字典實例:

 

 1.創建一個table,叫做t1,跟dba_objects一樣

create table t1 as select * from dba_objects;

 

 2.假如我現在要找DB裡有沒有t1,所用到的dba_tables就是數據字典,desc是描述table有多少列,知道有什麼列以後就可以 select更多內容

desc dba_tables;

 

select table_name,OWNER from dba_tables where table_name like 't1%'

 

查看library cache有多大

select * from v$sgastat a where a.NAME = 'library cache';

 

 

查看free空間

select * from v$sgastat a where a.pool = 'shared pool' and a.NAME = 'free memory';

 

 

查看row cache空間

select * from v$sgastat a where a.NAME = 'row cache';

 

硬解析(hard parse)與軟解析(soft parse)

一條SQL語句進入DB後,server process會拿著SQL語句到Shared pool裡的Library cache,到Library cache裡面去看這個SQL語句以前有沒有被解析過,也就是Library cache裡面有沒有這條SQL語句與其對應的執行計畫,如果有的話就進行軟解析,沒有的話進行硬解析

 

硬解析流程(hard parse)

 

 1.判斷語法是否有錯誤

 

 2.SQL語句所涉及的對象存不存在

 

 3.SQLUSER是否有相關的權限

 

 4.產生具體的執行計畫

 

執行計畫(execution plan)

一條SQL語句有多種執行方案,有的消耗資源大速度慢,有的消耗資源小速度快,所以Oracle要在這條SQL語句所對應的多個執行方案,選出最好的方案,作為執行計畫,此為硬解析最重要且最消耗資源的一步

 顯示SQL_IDSQL語句、執行次數

select SQL_ID,sql_text,EXECUTIONS from v$sql where SQL_TEXT like '%放入剛所輸入的SQL語句%';

 

查看執行計畫

select * from table(dbms_xplan.display_cursor('放入SQL_ID'));

 

軟解析流程(soft parse)

1.2.3.步驟和硬解析相同,軟解析只是做一些常規判斷,並不用從SQL語句所對應的多個執行方案,選出最好的方案,最消耗資源的那步,它沒有執行

 

▌ 所以我們希望軟解析越多越好,以提升效能

 

 為什麼row cache要放入Shared pool裡面??

我們在解析的時候,不論是硬解析還是軟解析,驗證了很多自身信息(例:權限信息、對象信息、對象存不存在信息、對象裡面的統計信息等等.....),這些都是字典信息,也就是說會頻繁的訪問數據字典,所以Oracle 乾脆將數據字典信息放進Shared pool裡面去,讓它和Library cache在一起

▌ 顯示軟硬解析的具體狀況

select name,value from v$sysstat where name like 'parse%'

 

 

parse time cpu

解析花費cpu時間

parse time elapsed

解析花費時間

parse count (total)

總共解析次數

parse count (hard)

硬解析次數

parse count (failures)

解析失敗(例:可能是SQL語句寫錯了等等.....)

 

 

 所有資源作為教學用,無任何商業用途!!

 

    歡迎轉載,但務必註明出處!!

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 arkai 的頭像
    arkai

    Game & Web Design

    arkai 發表在 痞客邦 留言(0) 人氣()