page.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <chapter id="page">
  2. <title>Page Files</title>
  3. <abstract>
  4. <para>
  5. A description of the database file default page format.
  6. </para>
  7. </abstract>
  8. <para>
  9. This section provides an overview of the page format used by <productname>Postgres</productname>
  10. classes.  User-defined access methods need not use this page format.
  11. </para>
  12. <para>
  13. In the following explanation, a
  14. <firstterm>byte</firstterm>
  15. is assumed to contain 8 bits.  In addition, the term
  16. <firstterm>item</firstterm>
  17. refers to data which is stored in <productname>Postgres</productname> classes.
  18. </para>
  19. <sect1>
  20. <title>Page Structure</title>
  21. <para>
  22. The following table shows how pages in both normal <productname>Postgres</productname> classes
  23.  and <productname>Postgres</productname> index
  24. classes (e.g., a B-tree index) are structured.
  25. <table tocentry="1">
  26. <title>Sample Page Layout</title>
  27. <titleabbrev>Page Layout</titleabbrev>
  28. <tgroup cols="1">
  29. <thead>
  30. <row>
  31. <entry>
  32. Item
  33. </entry>
  34. <entry>
  35. Description
  36. </entry>
  37. </row>
  38. </thead>
  39. <tbody>
  40. <row>
  41. <entry>
  42. itemPointerData
  43. </entry>
  44. </row>
  45. <row>
  46. <entry>
  47. filler
  48. </entry>
  49. </row>
  50. <row>
  51. <entry>
  52. itemData...
  53. </entry>
  54. </row>
  55. <row>
  56. <entry>
  57. Unallocated Space
  58. </entry>
  59. </row>
  60. <row>
  61. <entry>
  62. ItemContinuationData
  63. </entry>
  64. </row>
  65. <row>
  66. <entry>
  67. Special Space
  68. </entry>
  69. </row>
  70. <row>
  71. <entry>
  72. ``ItemData 2''
  73. </entry>
  74. </row>
  75. <row>
  76. <entry>
  77. ``ItemData 1''
  78. </entry>
  79. </row>
  80. <row>
  81. <entry>
  82. ItemIdData
  83. </entry>
  84. </row>
  85. <row>
  86. <entry>
  87. PageHeaderData
  88. </entry>
  89. </row>
  90. </tbody>
  91. </tgroup>
  92. </table>
  93. </para>
  94. <!--
  95. ." Running
  96. ." .q .../bin/dumpbpages
  97. ." or
  98. ." .q .../src/support/dumpbpages
  99. ." as the postgres superuser
  100. ." with the file paths associated with
  101. ." (heap or B-tree index) classes,
  102. ." .q .../data/base/<database-name>/<class-name>,
  103. ." will display the page structure used by the classes.
  104. ." Specifying the
  105. ." .q -r
  106. ." flag will cause the classes to be
  107. ." treated as heap classes and for more information to be displayed.
  108. -->
  109. <para>
  110. The first 8 bytes of each page consists of a page header
  111. (PageHeaderData).
  112. Within the header, the first three 2-byte integer fields
  113. (<firstterm>lower</firstterm>,
  114. <firstterm>upper</firstterm>,
  115. and
  116. <firstterm>special</firstterm>)
  117. represent byte offsets to the start of unallocated space, to the end
  118. of unallocated space, and to the start of <firstterm>special space</firstterm>.
  119. Special space is a region at the end of the page which is allocated at
  120. page initialization time and which contains information specific to an
  121. access method.  The last 2 bytes of the page header,
  122. <firstterm>opaque</firstterm>,
  123. encode the page size and information on the internal fragmentation of
  124. the page.  Page size is stored in each page because frames in the
  125. buffer pool may be subdivided into equal sized pages on a frame by
  126. frame basis within a class.  The internal fragmentation information is
  127. used to aid in determining when page reorganization should occur.
  128. </para>
  129. <para>
  130. Following the page header are item identifiers
  131. (<firstterm>ItemIdData</firstterm>).
  132. New item identifiers are allocated from the first four bytes of
  133. unallocated space.  Because an item identifier is never moved until it
  134. is freed, its index may be used to indicate the location of an item on
  135. a page.  In fact, every pointer to an item
  136. (<firstterm>ItemPointer</firstterm>)
  137. created by <productname>Postgres</productname> consists of a frame number and an index of an item
  138. identifier.  An item identifier contains a byte-offset to the start of
  139. an item, its length in bytes, and a set of attribute bits which affect
  140. its interpretation.
  141. </para>
  142. <para>
  143. The items themselves are stored in space allocated backwards from
  144. the end of unallocated space.  Usually, the items are not interpreted.
  145. However when the item is too long to be placed on a single page or
  146. when fragmentation of the item is desired, the item is divided and
  147. each piece is handled as distinct items in the following manner.  The
  148. first through the next to last piece are placed in an item
  149. continuation structure
  150. (<firstterm>ItemContinuationData</firstterm>).
  151. This structure contains
  152. itemPointerData
  153. which points to the next piece and the piece itself.  The last piece
  154. is handled normally.
  155. </para>
  156. </sect1>
  157. <sect1>
  158. <title>Files</title>
  159. <para>
  160. <variablelist>
  161. <varlistentry>
  162. <term>
  163. <filename>data/</filename>
  164. </term>
  165. <listitem>
  166. <para>
  167. Location of shared (global) database files.
  168. </para>
  169. </listitem>
  170. </varlistentry>
  171. <varlistentry>
  172. <term>
  173. <filename>data/base/</filename>
  174. </term>
  175. <listitem>
  176. <para>
  177. Location of local database files.
  178. </para>
  179. </listitem>
  180. </varlistentry>
  181. </variablelist>
  182. </para>
  183. </sect1>
  184. <sect1>
  185. <title>Bugs</title>
  186. <para>
  187. The page format may change in the future to provide more efficient
  188. access to large objects.
  189. </para>
  190. <para>
  191. This section contains insufficient detail to be of any assistance in
  192. writing a new access method.
  193. </para>
  194. </sect1>
  195. </chapter>