shared pool
1 庫快取 library cache
游標和pl/sql游標不是乙個概念
在找bucket
根據shared_pool_size 指定的尺寸,可以計算出bucket個數
每乙個bucket都有乙個物件制定
2 資料字典緩衝
記憶體塊組成 chunk
chunk是shared pool 中記憶體分配的最小單元,在記憶體中是連續的
chunk分類
1. free 2.recreatable 3.freeable 4. perm
一條sql語句
1.進入共享池 shared pool
2.轉為為ascii值
3.對ascii 進行hash運算,得到乙個數值(對應的bucket的號碼)
對bucket進行遍歷,遍歷bucket 的時候,
有:直接返回可以使用的sql
沒有:獲取shared pool latch,硬解析開始。
硬解析的過程:
1 對sql語句進行 語法檢查, 如果有錯,馬上退出。
select * form emps
2 檢查sql語句涉及到的物件是否存在
3 檢查許可權
4 獲取free bucket中當空的chunk以及相關的latch
5 通過優化器,建立執行計畫,最優的。
6 執行計畫以及sql文字進入 library cache,在解析的過程中,
程序一直持有library cache的latch,一直到硬解析結束。
軟解析:
1.a select * from emp;
b select * from emp; 省略5 6
2.a select * from emp;
select * from emp;省略2 4 5 6
4.將物件放進對應的bucket中
sql 語句解析過程
select * from emp where empno=7369
硬解析軟解析
latch 閂鎖
1.latch 是保護 鏈的
2.簡單 只有兩個狀態 0 1 記憶體鎖
latch 是保護 鏈的,不是保護資料的
要訪問修改 鏈,首先有鏈的latch
latch爭用
例子:2 cpu
a 程序
b 程序
c 程序
a程序 獲取到cpu時間片 讀取鏈 需要獲取latch 將0改為1
b程序 獲取到另乙個cpu,b去讀取這個鏈
b有兩種選擇:
1 馬上退出cpu 讓其他程序工作 ====》 c程序進入cpu
2 b程序知道這時乙個閂鎖 latch,知道很快就被釋放,在cpu等會。閂自旋 空轉cpu。
嘗試3次,如果嘗試3次之後,還沒有等到latch,退出cpu.
發現shared pool latch 被大量爭用,說明有 大量的sql語句, 需要被硬解析,
select * from emp where empno=7369
select * from emp where empno=7369
父子游標
一條sql被解析,被解析後,放到庫快取中。產生父游標和子游標
父:sql語句 比較小
子:執行計畫 比較大
select * from emp where id=1;
select * from emp where id=10000;
記住:動態效能檢視:
v$sql 每一行 對應乙個子游標
v$sqlarea 每一行 對應乙個父游標
游標在硬解析結束後
當session 開啟游標以後,就會鎖定父游標。
oracle 根據父游標 構建子游標 reload
1 顯示shared pool 中的自由空間
desc v$sgastat
select * from v$sgastat where name='free memory'
show parameter shared_pool_size;
alter system set shared_pool_size=100m;
select * from v$librarycache
select * from v$sysstat where name='parse count(hard)'
shared_pool 的sql命中率
1 hash value
2 有的話 軟解析
3 沒有 硬解析
4 查詢命中率
select namespace,pins,pinhists,reloads,invalidations from v$librarycache ;
select sum(pinhits)/sum(pins) from v$libraryccache
execute dbms_stats.gather_table_stats()
Oracle程序和記憶體剖析 一
在學習oracle之前,我們必須先清楚oracle本身運作機制,我們才能深入的去了解和應用它,下面我們一系列的文章來講解oracle是怎麼運作的,文章由淺入深,一步步去深入了解oracle.本章主要介紹內容 一,程序的基本組成結構及分類 二,每種程序的負責功能 三,記憶體的基本結構 本章講解有些內容...
記憶體管理與程序排程
一 記憶體管理 1 核心 使用alloc pages申請物理頁幀 使用kmalloc申請專用 通用記憶體塊 vmalloc申請物理不連續,邏輯相連記憶體 使用kmap建立高階位址對映 外碎片 空閒記憶體零散分布,無法滿足大記憶體需求 夥伴系統解決 內碎片 申請一塊記憶體真正使用的只有小部分 slab...
共享記憶體 3 0 程序鎖 與 程序鎖
include include include include include include include include include include include include include include include include include include includ...