1. 程式人生 > >oracle一些需要了解的東西

oracle一些需要了解的東西

本次將會學習資料庫一些基本的知識(你需要了解的)
共享池--SGA
共享池是oracle快取程式資料的地方。執行過的每一句sql語句在共享池中都存在解析後的內容。
    也就是說在解析每一句sql之前,oracle都會檢查庫快取記憶體是否擁有相同的語句,如果有oracle直接從快取中
    讀取而不是再解析一次。非常好的是對於你執行plsql情況也是這樣。就算不管有多少個使用者執行相同的sql語句
    oracle通常都會解析一次,然後共享。快取記憶體區是有記憶體限制的,它內部有一個演算法,會讓新的sql覆蓋不常用的,
    和很久之前的sql,就像棧(這段話裡的棧都是一個代名詞不是真正的棧,不敢誤導了,這個例子也不準確)一樣,不同的是他可以把最
    近使用的放到棧前舉個例子現在棧(大小為5)裡有12345,這五個這時我們用了下5sql,再輸入一個6sql,這時棧裡的解析資料位65123.
    所以為了高效實用共享池,儘量不要寫那種獨立的sql。
庫快取記憶體

    就是上面說的執行每一句sql語句就是他必須解析並載入到庫快取記憶體中,庫快取記憶體是共享池用來儲存之前已經解析
    過的語句的區域。如果oracle取之前解析的資訊並重用這種解析是軟解析,如果該語句之前沒被執行過,那麼將執行所有
    的工作來為當前的語句生成振興計劃,並將它存在快取中以便將來重用,這種解析是硬解析。
    硬解析相對軟解析要複雜很多,oracle要收集所有資訊。為得到所需資訊,oracle需要對資料字典進行一連串的查詢。
    打個比方(真實資料)0.060374和0.000095,前者是硬解析後者是軟解析。
    select * from v$sql檢視快取記憶體的資料
完全相同的語句

    有時候快取記憶體會存相同的sql那是由於你可能這個加註釋那個沒加等等。。。
緩衝區快取(SGA)
查詢轉換
    就是當我們寫一個查詢語句到執行計劃的開發過程之前會進行一個查詢轉換,也就是說你寫的sql並不一定是執行計劃
    的sql,當然如果你的sql是最優的除外,不然查詢轉換器會對你的sql進行優化舉個簡單的例子
    select * fron ak001 where ac011 in (select ac002 from where ak002)轉換器會修改為
    select a.* from ak001 a,ak002 b where a.ac011=b.ac002

    你可以通過NO_QUERY_TRANSFORMATION提示來檢視是否轉換

最近沒時間看就先不更新了