本文原创为freas_1990,转载请标明出处:http://www.jb51.cc/article/p-ewxqwdbv-yu.html
postgresql的共享内存维护主要依靠以下三个结构体:
HHDR:
typedef struct hashhdr { long bsize; /* Bucket/Page Size */ long bshift; /* Bucket shift */ long dsize; /* Directory Size */ long ssize; /* Segment Size */ long sshift; /* Segment shift */ long max_bucket; /* ID of Maximum bucket in use */ long high_mask; /* Mask to modulo into entire table */ long low_mask; /* Mask to modulo into lower half of table */ long ffactor; /* Fill factor */ long nkeys; /* Number of keys in hash table */ long nsegs; /* Number of allocated segments */ long keysize; /* hash key length in bytes */ long datasize; /* elem data length in bytes */ long max_dsize; /* 'dsize' limit if directory is fixed size */ BUCKET_INDEX freeBucketIndex; /* index of first free bucket */ #ifdef HASH_STATISTICS long accesses; long collisions; #endif } HHDR;
这个结构体定义了hash结构的目录。
HTAB:
typedef struct htab { HHDR *hctl; /* shared control information */ long (*hash)(); /* Hash Function */ char *segbase; /* segment base address for * calculating pointer values */ SEG_OFFSET *dir; /* 'directory' of segm starts */ long *(*alloc)(); /* memory allocator * (long * for alignment reasons) */ } HTAB;
这个结构体定义了hash table(动态、静态属性)。
HASHCTL:
typedef struct hashctl { long bsize; /* Bucket Size */ long ssize; /* Segment Size */ long dsize; /* Dirsize Size */ long ffactor; /* Fill factor */ long (*hash)(); /* Hash Function */ long keysize; /* hash key length in bytes */ long datasize; /* elem data length in bytes */ long max_size; /* limit to dsize if directory size is limited */ long *segbase; /* base for calculating bucket + seg ptrs */ long * (*alloc)(); /* memory allocation function */ long *dir; /* directory if allocated already */ long *hctl; /* location of header information in shd mem */ } HASHCTL;
其中,HHDR是HTAB的一个元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。