1、首先我们来了解一下基本概念
数据字典(Dictionary)是指系统中的一些系统表,保存了用户信息、表结构、统计信息等元数据信息。
DC的全称是Dictionary Cache,元数据信息的缓存,DC对应的内存为DC Pool。
为什么需要使用单独的DC Pool乱缓存数据字典信息,而不是直接查询系统表呢?主要是基于效率考虑。执行SQL需要访问数据字典的频率非常高,如果每次访问系统表,即使是逻辑读,也有page解析的开销,比直接访问结构体的效率低很多。由于需要再结构体中缓存数据字典数据,那么就需要实现对象级的淘汰。
2、DC的内存管理
DC的内存从share pool中申请,初始申请2048个page,单位是16K,上限是share pool的一半。DC内存可以查询视图DV_DC_POOLS,其中POOL_OPT_COUNT为内存上限,POO;_PAGE_COUNT为当前使用的内存大小,DV_DC_RANKINGS可以查看那些对象占用的内存多。
3、Guass数据库中怎样查询DC Pool的大小
SQL> show parameters SHARE_POOL_SIZE:
NAME DATATYPE VALUE RUNTIME_VALUE EFFECTIVE
-----------------------------------------------------------------------------------------------------------------------------
SHARE_POOL_SIZE GS_TYPE_INTEGER 512M 512M reboot
SQL> select * from DV_DC_POOLS;
POOL_OPT_COUNT POOL_PAGE_COUNT POOL_FREE_PAGE_COUNT LRU_COUNT LRU_PAGE_COUNT LRU_LOOKED_COUNT LRU_LOOKED_PAGE_COUNT LRU_RECYCLABLE_COUNT LRU_RECYCLABLE_PAGE_COUNT
-------------------------------------------------------------------------------------------------------------------------------
16384 2048 614 410 650 0 0
172 174
4、查询那个对象站哟呵的内存多?
SQL> SLECT USER_NAME,sum(PAGES) as SUM_PAGES FROM DV_DC_RANKINGS GROUP BY USER_NAME order by SUM_PAGES;