1 常用系统表与视图
1.1 系统表
1.2 视图
堆内存(区分线程)
SELECT * FROM gs_thread_memory_context ORDER BY totalsize DESC;堆内存(不区分线程)
SELECT * FROM gs_shared_memory_detail ORDER BY totalsize DESC;会话
SELECT * FROM pg_stat_activity;
1 新增系统表
获取空闲的oid
cd src/include/catalog/ chmod +x unused_oids ./unused_oids
2 读取系统表
创建表时涉及的系统表操作:
heap_create_with_catalog()
Relation pg_class_desc = heap_open(RelationRelationId)
Oid old_type_oid = GetSysCacheOid2(TYPENAMENSP)
Oid relid = GetNewRelFileNode(pg_class_desc)
Relation new_rel_desc = heap_create(relname)
ObjectAddress new_type_addr = AddNewRelationType(relname)
AddNewRelationTuple(pg_class_desc, new_rel_desc)
AddNewAttributeTuples(relid, new_rel_desc->rd_att)
ObjectAddress myself, referenced;
myself.objectId = relid
referenced.objectId = relnamespace
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL)
recordDependencyOnOwner(RelationRelationId, relid)
recordDependencyOnNewAcl(RelationRelationId, relid)
recordDependencyOnCurrentExtension(&myself)
StoreConstraints(new_rel_desc, cooked_constraints)
打开系统表
Relation heap_open(Oid relationId, LOCKMODE lockmode)
Relation r = relation_open(relationId, lockmode)
LockRelationOid(relationId, lockmode)
Relation r = RelationIdGetRelation(relationId)
Relation rd
RelationIdCacheLookup(relationId, rd)
RelIdCacheEnt hentry = hash_search(RelationIdCache, relationId)
rd = hentry->reldesc
RelationIncrementReferenceCount(rd)
/* find cache, return */
if !rd->rd_isvalid:
if (rd->rd_rel->relkind == RELKIND_INDEX)
RelationReloadIndexInfo(rd);
else:
RelationClearRelation(rd)
return rd;
/* no cache, so build */
rd = RelationBuildDesc(relationId)
HeapTuple pg_class_tuple = ScanPgRelation(targetRelId)
relid = HeapTupleGetOid(pg_class_tuple)
Form_pg_class relp = (Form_pg_class) GETSTRUCT(pg_class_tuple)
relation = AllocateRelationDesc(relp)
RelationGetRelid(relation) = relid
RelationBuildTupleDesc(relation)
if ..:
RelationBuildRuleLock(relation)
if ..:
RelationBuildTriggers(relation)
if ..:
RelationBuildRowSecurity(relation)
RelationParseRelOptions(relation, pg_class_tuple)
RelationInitLockInfo(relation)
RelationInitPhysicalAddr(relation)
heap_freetuple(pg_class_tuple)
RelationIncrementReferenceCount(rd)
pgstat_initstats(r)
typedef struct {
Oid reloid;
Relation reldesc;
} RelIdCacheEnt;
扫描系统表
ScanPgRelation()