PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 49. ���ݿ�����洢 | Fast Forward | Next |
�����ṩһ�� PostgreSQL �ı��������ʹ�õ�ҳ���ʽ�ĸ����� [1] ���к�TOAST�ĸ�ʽ����ͨ��һ����
����������У��ٶ�һ���ֽ����� 8 ��λ�� ���⣬�item��ָ���Ǵ洢��һ��ҳ����Ķ�������ֵ�� ��һ�����һ������һ���У���һ�������һ������һ��������¼��
ÿ�������������һ���̶��ߴ磨ͨ���� 8K����Ȼ���ǿ����ڱ����ʱ��ѡ�������ijߴ磩�� pages ����洢�� �ڱ������ҳ�����϶���ͬ������һ���ض�����У����Դ洢���κ�ҳ��� ���������һ��ҳ��ͨ������ΪԪҳ���������ſ�����Ϣ�� �������������ʷ����IJ�ͬ��������������в�ͬ���͵�ҳ�档
Table 49-2��ʾһ��ҳ������岼�֡�ÿ��ҳ����������֡�
Table 49-2. ����ҳ�沼��
�� | ���� |
---|---|
PageHeaderData | 20 �ֽڳ�����������ҳ���һ����Ϣ���������ɿռ�ָ�롣 |
ItemPointerData | һ����¼��ƫ���������ȣ���ԶԵ����飬ָ��ʵ���ÿ���� 4 �ֽڡ� |
Free space�����ɿռ䣩 | δ����Ŀռ䡣����ָ����������Ŀ�ͷ��ʼ���䣬����ӽ�β��ʼ���䡣 |
Items��� | ʵ�ʵ���� |
Special Space������ռ䣩 | ��������ģʽ��ص����ݡ���ͬ���������ʷ�ʽ��Ų�ͬ�����ݡ�����ͨ����Ϊ�ա� |
ÿ��ҳ���ͷ20���ֽ����ҳͷ��PageHeaderData�������ĸ�ʽ�� Table 49-3 ����ϸ���ܡ� ͷ�����ֽڸ������ҳ����ص������ WAL � Ȼ��������� 2 �ֽڵ������ֶ� ��pd_lower��pd_upper�� �� pd_special���� ��Щ�ֶηֱ����ҳ�濪ʼλ����δ����ռ俪ͷ���ֽ�ƫ�ƣ���δ����ռ��β���ֽ�ƫ�ƣ� �Լ�������ռ俪ͷ���ֽ�ƫ�ơ� ҳ��ͷ����� 2 �ֽڣ�pd_pagesize_version�� �洢ҳ��ߴ�Ͱ汾ָʾ������ PostgreSQL 8.0 ��ʼ�� �汾���� 2��PostgreSQL 7.3 �� 7.4 ʹ�ð汾�� 1�� ��ǰ�İ汾ʹ�ð汾�� 0�� ������ҳ�沼�ֺ�ͷ��ʽ����Щ�汾�ﶼû�иı䣬���Ƕѵ���ͷ�����������仯���� ҳ���С��Ҫ���ڽ����飻Ŀǰ��һ�ΰ�װ���û��֧�ֶ���һ��ҳ���С�Ķ�����
Table 49-3. PageHeaderData ����
�ֶ� | ���� | ���� | ���� |
---|---|---|---|
pd_lsn | XLogRecPtr | 8 �ֽ� | LSN: ��������ҳ��� xlog ��¼���һ���ֽں����һ���ֽ� |
pd_tli | TimeLineID | 4 �ֽ� | ����ĵ� TLI |
pd_lower | LocationIndex | 2 �ֽ� | �����ɿռ俪ͷ��ƫ���� |
pd_upper | LocationIndex | 2 �ֽ� | �����ɿռ��β��ƫ���� |
pd_special | LocationIndex | 2 �ֽ� | ������ռ俪ͷ��ƫ���� |
pd_pagesize_version | uint16 | 2 �ֽ� | ҳ���С�Ͳ��ְ汾����Ϣ |
����ϸ�ڶ������� src/include/storage/bufpage.h ���ҵ���
��ҳͷ���������ʶ����ItemIdData����ÿ����Ҫ�ĸ��ֽڡ� һ�����ʶ������һ�����ͷ���ֽ�ƫ���������Լ����ֽڼƵij��ȣ� �Լ�һ������λ����Щ����λӰ�����Ľ��͡� �µ����ʶ��������Ҫ��δ����ռ�Ŀ�ͷ���䡣 ���ʶ������Ŀ����ͨ���鿴 pd_lower ���жϣ��ڷ����±�ʶ����ʱ�������� ��Ϊһ�����ʶ�������ͷ�ǰ���Բ����ƶ����������������������ڳ�ʱ�������һ��� ��ʹ�������Ϊѹ�����ɿռ���ҳ���ڲ��������ƶ�Ҳ��ˡ�ʵ���ϣ�PostgreSQL ������ÿ��ָ�����ָ�루ItemPointer��Ҳ���� CTID������һ��ҳ�ź�һ�����ʶ����������ɡ�
���洢�ڴ�δ����ռ�ĩβ��ʼ�Ӻ���ǰ����Ŀռ�� ���ǵ�ʵ�ʽṹ�����������ݲ�ͬ����ͬ��������ж�ʹ��һ�ֽ��� HeapTupleHeaderData �Ľṹ��������������
���һ����"�����"�����������κη��ʷ������ŵĶ����� ���磬b-tree �����洢ָ��ҳ�������ͬ�ڵ����ӣ��Լ�����һЩ�������ṹ��ص����ݡ� ��ͨ����ʹ������Σ�ͨ������ pd_special ����ҳ���С����ʾ����
���б��ж���ͬ���������졣������һ��������ͷ���ڴ����������ռ�� 27 ���ֽڣ��� �������һ����ѡ�� null λͼ��һ����ѡ�Ķ��� ID �ֶΣ��Լ��û����ݡ� ͷ�� Table 49-4 ����ϸ������ ʵ���û����ݣ��е��ֶΣ��� t_hoff ��ʶ��ƫ������ʼ�� �������Ǹ�ƽ̨�� MAXALIGN ����ı�����null λͼֻ���� t_infomask ����� HEAP_HASNULL λ�����˵�ʱ��ų��֡� ����������ˣ���ô�������ڶ���ͷ���棬 ռ���㹻����ÿ�������ֶζ�Ӧһ��λ���ֽ�����Ҳ����˵���ܹ� t_natts λ���� �����λ�����棬Ϊ 1 ��λ��ʾ�ǿգ���Ϊ 0 ��λ��ʾ�ա� ���û�г������λͼ����ô���������ֶζ�����Ϊ�ǿյġ� ���� ID ֻ���������� t_infomask ����� HEAP_HASOID λ��ʱ��ų��֡� ������֣������ó����� t_hoff ��Χ֮ǰ�� �����Ҫ���� t_hoff��ʹ֮��Ϊ MAXALIGN �ı�������ô��Щ��佫������ null λͼ�Ͷ��� ID ֮�䡣 ������Ҳ��֤�˶��� ID �õ�ǡ���Ķ��롣��
Table 49-4. HeapTupleHeaderData ����
�ֶ� | ���� | ���� | ���� |
---|---|---|---|
t_xmin | TransactionId | 4 �ֽ� | ���� XID ���� |
t_cmin | CommandId | 4 �ֽ� | ���� CID ���� |
t_xmax | TransactionId | 4 �ֽ� | ɾ�� XID ���� |
t_cmax | CommandId | 4 �ֽ� | ɾ�� CID ���ǣ��� t_xvac �ص��� |
t_xvac | TransactionId | 4 �ֽ� | �����ƶ��а汾������ VACUUM �� XID |
t_ctid | ItemPointerData | 6 �ֽ� | ����������еĵ�ǰ ID |
t_natts | int16 | 2 �ֽ� | �ֶ���Ŀ |
t_infomask | uint16 | 2 �ֽ� | ���ֱ�־λ |
t_hoff | uint8 | 1 �ֽ� | ���û����ݵ�ƫ���� |
����ϸ�ڶ������� src/include/access/htup.h ���ҵ���
�Ծ������ݵĽ���ֻ���ڴ��������л�ȡ����Ϣ������½��У� ��Щ��Ϣ������� pg_attribute � ��ʶ�ֶ�λ�õĹؼ���ֵ�� attlen �� attalign�� ����û�а취ֱ�ӻ�ȡij���ֶΣ����������Ƕ�����û�� NULL �ġ� ������Щ���ӵIJ�������װ�ں��� heap_getattr�� fastgetattr �� heap_getsysattr �
Ҫ��ȡ���ݵĻ�������Ҫ�������ÿ���ֶΡ����ȸ��� null λͼ�����ֶ��Ƿ�Ϊ NULL�� ����ǣ���ô������һ���ֶΡ�Ȼ��֤��Ķ�������ȷ�ġ� ����ֶ���һ�������ֶΣ���ô�����ֽڶ��ط������ �������һ���䳤�ֶΣ�attlen = -1������ô���ͻ���Ӹ���һЩ�� ���б䳤�������Ͷ�ʹ��һ��ͨ�õ�ͷ�ṹ varattrib�� ���������洢�����ݵ�ȫ���Լ�һЩ��־λ�� ���ݱ�־�IJ�ͬ�����ݿ����������Ļ��������������У�TOAST������������ѹ���ģ�����Section 49.2����
[1] | ʵ���ϣ���������ģʽ������Ҫʹ����Щҳ���ʽ��Ŀǰ�� ��������������ȷ��ʹ�����������ʽ�� ������������Ԫ����ҳ�������ͨ������ȷ����ѭ��ֹ��� |