PL/SQL Program Units即PL/SQL程序单元,常被叫做”library units”或lib-units.
参考以下模块类型:
- package spec
- package body
- top-level function or procedure
- type spec
- type body
- trigger
- anonymous blocks.
PL/SQL 虚拟机的内存使用主要体现在4个方面:
- PGA
- PL/SQL stack call,用于保存本地变量和其他一些状态结构
- NCOMP生成的动态链接库文件
- CGA
- 二级内存(secondary memory),分配的堆和大的可收缩本地变量如大的strings、Lob或collections
- UGA
- 程度单元的实例(library-unit instantiations),如package global variables, DL0/ DL1 dependency vectors, display frame等
- SGA
共享池中的MCODE子堆
KGL – Kernel Generic Library Manager
该layer管理会话间需要共享的资源,如PL/SQL MCODE,Diana,Source,SQL cursor,SQL Plan)
KGI – Kernel Generic Instantiation Layer.
该layer管理特定会话非共享的资源,如实例化的包含了包全局变量状态信息的PL/SQL程序单元
KOH/KGH 该layer用以管理heap service堆服务
PLSQL MCODE Heap的属性
- machine dependent binary format for a compiled PL/SQL library-unit.
- to execute code in a lib-unit, its MCODE heap must be loaded in memory.
- MCODE is loaded in SGA and is “pinned” for CALL duration.
- once unpinned, the heap may be aged; hence, may need to get re-loaded.
- important to page large data structures in SGA.
MCODE Heap: Subcomponents
- EntryPoint Piece (PL_UEP)
- Code Segment or Byte Code Piece (PL_UCP)
- Constant Pool:
- Data Segment (PL_UKP)
- Handle Segment (PL_UHS)
- SQL Strings Table (PL_USP)
PL/SQL Instantiations
- When a lib-unit is first referenced by a program (session) an instantiation of the lib unit is created.
- PL/SQL relies on KGI for inst obj mgmt.
- A PL/SQL lib-unit instantiation consists of:
- PLIO struct (the handle of the PL/SQL inst obj)
- Static Frame
- Secondary (Heap) Memory for package globals
- PLIO Struct
- first portion of PLIO struct is the KGIOB struct (kgi’s portion of the object handle)
- points to the static frame struct (PLIOST)
- also contains other book-keeping info (such as memory duration of instantiation’s work area, etc.)
- Static Frame:
- represents that part of instantiation’s work area whose size is compile-time determined.
- the root of the static frame is PLIOST struct which leads the following sub-pieces:
- depends-on array to global variable vectors (DL0)
- depends-on array to other instantiations (DL1)
- Display Frame (DPF)
- global variable vector for this unit (GF)
- primary memory for global variables.
- Secondary Memory for package globals
- used to allocate data types that are stored out-of-line (heap allocated)e.g., collections, large strings, large records, LOBs, datetime types, etc.