oracle 記憶體與程序

2021-08-31 19:30:57 字數 2468 閱讀 7621

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...