diff --git a/src/tools/backend/backend_dirs.html b/src/tools/backend/backend_dirs.html index cc4e16d9aa2929b5c8bc1bbc8be9a1f481dc42c2..433324bff130a238138cc437eca5433ad6e0b3c7 100644 --- a/src/tools/backend/backend_dirs.html +++ b/src/tools/backend/backend_dirs.html @@ -3,18 +3,17 @@ <TITLE>PostgreSQL Backend Directories</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> -<H1 ALIGN=CENTER> +<H1> PostgreSQL Backend Directories </H1> -<H2 ALIGN=CENTER> +<H2> by Bruce Momjian </H2> -<P> -<P> <HR> +<P> <EM>Click on any of the section headings to see the source code for that section. </EM> -<P> +</P> <H2> <A NAME="bootstrap"></A> <A HREF="../../backend/bootstrap">bootstrap</A> @@ -94,7 +93,7 @@ This uses the parser output to generate an optimal plan for the executor. </P> <H3> -<A NAME="optimizer/path"></A> +<A NAME="optimizer_path"></A> <A HREF="../../backend/optimizer/path">optimizer/path</A> - creates path from parser output </H3> @@ -106,7 +105,7 @@ and optimizer table statistics to evaluate each possible execution method, and assigns a cost to each. </P> <H3> -<A NAME="optimizer/geqo"></A> +<A NAME="optimizer_geqo"></A> <A HREF="../../backend/optimizer/geqo">optimizer/geqo</A> - genetic query optimizer </H3> @@ -121,7 +120,7 @@ tables, it is faster. There is an option to control when this feature is used. </P> <H3> -<A NAME="optimizer/plan"></A> +<A NAME="optimizer_plan"></A> <A HREF="../../backend/optimizer/plan">optimizer/plan</A> - optimizes path output </H3> @@ -130,7 +129,7 @@ This takes the <I>optimizer/path</I> output, chooses the path with the least cost, and creates a plan for the executor. </P> <H3> -<A NAME="optimizer/prep"></A> +<A NAME="optimizer_prep"></A> <A HREF="../../backend/optimizer/prep">optimizer/prep</A> - handle special plan cases </H3> @@ -138,7 +137,7 @@ least cost, and creates a plan for the executor. This does special plan processing. </P> <H3> -<A NAME="optimizer/util"></A> +<A NAME="optimizer_util"></A> <A HREF="../../backend/optimizer/util">optimizer/util</A> - optimizer support routines </H3> @@ -190,31 +189,31 @@ that pre-format user requests into a predefined format. These allow uniform resource access by the backend. <BR> <BR> -<A NAME="storage/buffer"></A> +<A NAME="storage_buffer"></A> <A HREF="../../backend/storage/buffer">storage/buffer</A> - shared buffer pool manager <BR> -<A NAME="storage/file"></A> +<A NAME="storage_file"></A> <A HREF="../../backend/storage/file">storage/file</A> - file manager <BR> -<A NAME="storage/ipc"></A> +<A NAME="storage_ipc"></A> <A HREF="../../backend/storage/ipc">storage/ipc</A> - semaphores and shared memory <BR> -<A NAME="storage/large_object"></A> +<A NAME="storage_large_object"></A> <A HREF="../../backend/storage/large_object">storage/large_object</A> - large objects <BR> -<A NAME="storage/lmgr"></A> +<A NAME="storage_lmgr"></A> <A HREF="../../backend/storage/lmgr">storage/lmgr</A> - lock manager <BR> -<A NAME="storage/page"></A> +<A NAME="storage_page"></A> <A HREF="../../backend/storage/page">storage/page</A> - page manager <BR> -<A NAME="storage/smgr"></A> +<A NAME="storage_smgr"></A> <A HREF="../../backend/storage/smgr">storage/smgr</A> - storage/disk manager <BR> @@ -230,35 +229,35 @@ These control the way data is accessed in heap, indexes, and transactions. <BR> <BR> -<A NAME="access/common"></A> +<A NAME="access_common"></A> <A HREF="../../backend/access/common">access/common</A> - common access routines <BR> -<A NAME="access/gist"></A> +<A NAME="access_gist"></A> <A HREF="../../backend/access/gist">access/gist</A> - easy-to-define access method system <BR> -<A NAME="access/hash"></A> +<A NAME="access_hash"></A> <A HREF="../../backend/access/hash">access/hash</A> - hash <BR> -<A NAME="access/heap"></A> +<A NAME="access_heap"></A> <A HREF="../../backend/access/heap">access/heap</A> - heap is use to store data rows <BR> -<A NAME="access/index"></A> +<A NAME="access_index"></A> <A HREF="../../backend/access/index">access/index</A> - used by all index types <BR> -<A NAME="access/nbtree"></A> +<A NAME="access_nbtree"></A> <A HREF="../../backend/access/nbtree">access/nbtree</A> - Lehman and Yao's btree management algorithm <BR> -<A NAME="access/rtree"></A> +<A NAME="access_rtree"></A> <A HREF="../../backend/access/rtree">access/rtree</A> - used for indexing of 2-dimensional data <BR> -<A NAME="access/transam"></A> +<A NAME="access_transam"></A> <A HREF="../../backend/access/transam">access/transam</A> - transaction manager (BEGIN/ABORT/COMMIT) <BR> @@ -289,7 +288,7 @@ store requests and data. - support routines </H2> <H3> -<A NAME="utils/adt"></A> +<A NAME="utils_adt"></A> <A HREF="../../backend/utils/adt">utils/adt</A> - built-in data type routines </H3> @@ -297,7 +296,7 @@ store requests and data. This contains all the PostgreSQL builtin data types. </P> <H3> -<A NAME="utils/cache"></A> +<A NAME="utils_cache"></A> <A HREF="../../backend/utils/cache">utils/cache</A> - system/relation/function cache routines </H3> @@ -314,7 +313,7 @@ This last cache maintains information about all recently-accessed tables, not just system ones. </P> <H3> -<A NAME="utils/error"></A> +<A NAME="utils_error"></A> <A HREF="../../backend/utils/error">utils/error</A> - error reporting routines </H3> @@ -322,7 +321,7 @@ tables, not just system ones. Reports backend errors to the front end. </P> <H3> -<A NAME="utils/fmgr"></A> +<A NAME="utils_fmgr"></A> <A HREF="../../backend/utils/fmgr">utils/fmgr</A> - function manager </H3> @@ -331,7 +330,7 @@ This handles the calling of dynamically-loaded functions, and the calling of functions defined in the system tables. </P> <H3> -<A NAME="utils/hash"></A> +<A NAME="utils_hash"></A> <A HREF="../../backend/utils/hash">utils/hash</A> - hash routines for internal algorithms </H3> @@ -341,17 +340,17 @@ do quick lookups of dynamic data storage structures maintained by the backend. </P> <H3> -<A NAME="utils/init"></A> +<A NAME="utils_init"></A> <A HREF="../../backend/utils/init">utils/init</A> - various initialization stuff </H3> <H3> -<A NAME="utils/misc"></A> +<A NAME="utils_misc"></A> <A HREF="../../backend/utils/misc">utils/misc</A> - miscellaneous stuff </H3> <H3> -<A NAME="utils/mmgr"></A> +<A NAME="utils_mmgr"></A> <A HREF="../../backend/utils/mmgr">utils/mmgr</A> - memory manager(process-local memory) </H3> @@ -363,7 +362,7 @@ By doing this, the backend can easily free memory once a statement or transaction completes. </P> <H3> -<A NAME="utils/sort"></A> +<A NAME="utils_sort"></A> <A HREF="../../backend/utils/sort">utils/sort</A> - sort routines for internal algorithms </H3> @@ -372,7 +371,7 @@ When statement output must be sorted as part of a backend operation, this code sorts the tuples, either in memory or using disk files. </P> <H3> -<A NAME="utils/time"></A> +<A NAME="utils_time"></A> <A HREF="../../backend/utils/time">utils/time</A> - transaction time qualification routines </H3> @@ -419,13 +418,11 @@ This does processing for the rules system. - unused (array handling?) </H2> <BR> -<HR SIZE="2" NOSHADE> +<HR> <SMALL> -<ADDRESS> Maintainer: Bruce Momjian (<A HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> Last updated: Tue Dec 9 17:56:08 EST 1997 -</ADDRESS> </SMALL> </BODY> </HTML> diff --git a/src/tools/backend/index.html b/src/tools/backend/index.html index 78b8b8e5fac562846c81f50d56390273eacfc5e2..241c4bb5d57bf57fa3901256c0b7484dfeaf101e 100644 --- a/src/tools/backend/index.html +++ b/src/tools/backend/index.html @@ -3,42 +3,40 @@ <TITLE>How PostgreSQL Processes a Query</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> -<H1 ALIGN=CENTER> +<H1> How PostgreSQL Processes a Query </H1> -<H2 ALIGN=CENTER> +<H2> by Bruce Momjian </H2> <P> -<CENTER> -<IMG src="flow.gif" usemap="#flowmap" alt="flowchart" border=0> -</CENTER> -<MAP name="flowmap"> -<AREA COORDS="125,35,245,65" HREF="backend_dirs.html#main"> -<AREA COORDS="125,100,245,125" HREF="backend_dirs.html#postmaster"> -<AREA COORDS="325,65,450,95" HREF="backend_dirs.html#libpq"> -<AREA COORDS="125,160,245,190" HREF="backend_dirs.html#tcop"> -<AREA COORDS="325,160,450,190" HREF="backend_dirs.html#tcop"> -<AREA COORDS="125,240,245,265" HREF="backend_dirs.html#parser"> -<AREA COORDS="125,300,250,330" HREF="backend_dirs.html#tcop"> -<AREA COORDS="125,360,250,390" HREF="backend_dirs.html#optimizer"> -<AREA COORDS="125,425,245,455" HREF="backend_dirs.html#optimizer/plan"> -<AREA COORDS="125,490,245,515" HREF="backend_dirs.html#executor"> -<AREA COORDS="325,300,450,330" HREF="backend_dirs.html#commands"> -<AREA COORDS="75,575,195,605" HREF="backend_dirs.html#utils"> -<AREA COORDS="235,575,360,605" HREF="backend_dirs.html#catalog"> -<AREA COORDS="405,575,525,605" HREF="backend_dirs.html#storage"> -<AREA COORDS="155,635,275,665" HREF="backend_dirs.html#access"> -<AREA COORDS="325,635,450,665" HREF="backend_dirs.html#nodes"> -<AREA COORDS="75,705,200,730" HREF="backend_dirs.html#bootstrap"> +<IMG src="flow.gif" usemap="#flowmap" alt="flowchart"> +<MAP name="flowmap" id="flowmap"> +<AREA coords="125,35,245,65" HREF="backend_dirs.html#main" alt="main"></AREA> +<AREA coords="125,100,245,125" HREF="backend_dirs.html#postmaster" alt="postmaster"></AREA> +<AREA coords="325,65,450,95" HREF="backend_dirs.html#libpq" alt="libpq"></AREA> +<AREA coords="125,160,245,190" HREF="backend_dirs.html#tcop" alt="tcop"></AREA> +<AREA coords="325,160,450,190" HREF="backend_dirs.html#tcop" alt="tcop"></AREA> +<AREA coords="125,240,245,265" HREF="backend_dirs.html#parser" alt="parser"></AREA> +<AREA coords="125,300,250,330" HREF="backend_dirs.html#tcop" alt="tcop"></AREA> +<AREA coords="125,360,250,390" HREF="backend_dirs.html#optimizer" alt="optimizer"></AREA> +<AREA coords="125,425,245,455" HREF="backend_dirs.html#optimizer_plan" alt="plan"></AREA> +<AREA coords="125,490,245,515" HREF="backend_dirs.html#executor" alt="executor"></AREA> +<AREA coords="325,300,450,330" HREF="backend_dirs.html#commands" alt="commands"></AREA> +<AREA coords="75,575,195,605" HREF="backend_dirs.html#utils" alt="utils"></AREA> +<AREA coords="235,575,360,605" HREF="backend_dirs.html#catalog" alt="catalog"></AREA> +<AREA coords="405,575,525,605" HREF="backend_dirs.html#storage" alt="storage"></AREA> +<AREA coords="155,635,275,665" HREF="backend_dirs.html#access" alt="access"></AREA> +<AREA coords="325,635,450,665" HREF="backend_dirs.html#nodes" alt="nodes"></AREA> +<AREA coords="75,705,200,730" HREF="backend_dirs.html#bootstrap" alt="bootstrap"></AREA> </MAP> -<CENTER><EM> +<EM> Click on an item to see more detail or look at the full <A HREF="backend_dirs.html">index.</A> -</EM></CENTER> +</EM> <BR> <BR> - +</P> <P> A query comes to the backend via data packets arriving through TCP/IP or @@ -49,13 +47,13 @@ into tokens(words). The parser uses <A HREF="../../backend/parser/gram.y">gram.y</A> and the tokens to identify the query type, and load the proper query-specific structure, like <A HREF="../../include/nodes/parsenodes.h">CreateStmt</A> or <A -HREF="../../include/nodes/parsenodes.h">SelectStmt.</A><P> +HREF="../../include/nodes/parsenodes.h">SelectStmt.</A></P><P> The query is then identified as a <I>Utility</I> query or a more complex query. A <I>Utility</I> query is processed by a query-specific function in <A HREF="../../backend/commands"> commands.</A> A complex query, like -<I>SELECT, UPDATE,</I> and <I>DELETE</I> requires much more handling.<P> +<I>SELECT, UPDATE,</I> and <I>DELETE</I> requires much more handling.</P><P> The parser takes a complex query, and creates a @@ -67,7 +65,7 @@ Each table referenced in the query is represented by a <A HREF="../../include/nodes/parsenodes.h"> RangeTableEntry,</A> and they are linked together to form the <I>range table</I> of the query, which is generated by <A HREF="../../backend/parser/parse_clause.c"> -transformFromClause().</A> Query.rtable holds the query's range table.<P> +transformFromClause().</A> Query.rtable holds the query's range table.</P><P> Certain queries, like <I>SELECT,</I> return columns of data. Other @@ -78,16 +76,16 @@ placed in <A HREF="../../include/nodes/parsenodes.h">target list entries,</A> and linked together to make up the <I>target list</I> of the query. The target list is stored in Query.targetList, which is generated by <A -HREF="../../backend/parser/parse_target.c">transformTargetList().</A><P> +HREF="../../backend/parser/parse_target.c">transformTargetList().</A></P><P> Other query elements, like aggregates(<I>SUM()</I>), <I>GROUP BY,</I> -and <I>ORDER BY</I> are also stored in their own Query fields.<P> +and <I>ORDER BY</I> are also stored in their own Query fields.</P><P> The next step is for the Query to be modified by any <I>VIEWS</I> or <I>RULES</I> that may apply to the query. This is performed by the <A -HREF="../../backend/rewrite">rewrite</A> system.<P> +HREF="../../backend/rewrite">rewrite</A> system.</P><P> The <A HREF="../../backend/optimizer">optimizer</A> takes the Query @@ -96,18 +94,17 @@ HREF="../../include/nodes/plannodes.h">Plan,</A> which contains the operations to be performed to execute the query. The <A HREF="../../backend/optimizer/path">path</A> module determines the best table join order and join type of each table in the RangeTable, using -Query.qual(<I>WHERE</I> clause) to consider optimal index usage.<P> +Query.qual(<I>WHERE</I> clause) to consider optimal index usage.</P><P> The Plan is then passed to the <A HREF="../../backend/executor">executor</A> for execution, and the result returned to the client. The Plan actually as set of nodes, arranged in a tree structure with a top-level node, and various sub-nodes as -children.<P> - +children.</P><P> There are many other modules that support this basic functionality. They -can be accessed by clicking on the flowchart.<P> +can be accessed by clicking on the flowchart.</P> <HR><P> @@ -117,19 +114,20 @@ Another area of interest is the shared memory area, which contains data accessable to all backends. It has recently used data/index blocks, locks, backend process information, and lookup tables for these structures: +</P> <UL> -<LI>ShmemIndex - lookup shared memory addresses using structure names +<LI>ShmemIndex - lookup shared memory addresses using structure names</LI> <LI><A HREF="../../include/storage/buf_internals.h">Buffer -Descriptor</A> - control header for buffer cache block +Descriptor</A> - control header for buffer cache block</LI> <LI><A HREF="../../include/storage/buf_internals.h">Buffer Block</A> - -data/index buffer cache block +data/index buffer cache block</LI> <LI>Shared Buffer Lookup Table - lookup of buffer cache block addresses using table name and block number(<A -HREF="../../include/storage/buf_internals.h"> BufferTag</A>) +HREF="../../include/storage/buf_internals.h"> BufferTag</A>)</LI> <LI>MultiLevelLockTable (ctl) - control structure for each locking method. Currently, only multi-level locking is used(<A -HREF="../../include/storage/lock.h">LOCKMETHODCTL</A>). +HREF="../../include/storage/lock.h">LOCKMETHODCTL</A>).</LI> <LI>MultiLevelLockTable (lock hash) - the <A HREF="../../include/storage/lock.h">LOCK</A> structure, looked up using relation, database object ids(<A @@ -137,31 +135,29 @@ HREF="../../include/storage/lock.h">LOCKTAG)</A>. The lock table structure contains the lock modes(read/write or shared/exclusive) and circular linked list of backends (<A HREF="../../include/storage/proc.h">PROC</A> structure pointers) waiting -on the lock. +on the lock.</LI> <LI>MultiLevelLockTable (xid hash) - lookup of LOCK structure address using transaction id, LOCK address. It is used to quickly check if the current transaction already has any locks on a table, rather than having to search through all the held locks. It also stores the modes (read/write) of the locks held by the current transaction. The returned <A HREF="../../include/storage/lock.h">XIDLookupEnt</A> structure also -contains a pointer to the backend's PROC.lockQueue. +contains a pointer to the backend's PROC.lockQueue.</LI> <LI><A HREF="../../include/storage/proc.h">Proc Header</A> - information -about each backend, including locks held/waiting, indexed by process id +about each backend, including locks held/waiting, indexed by process id</LI> </UL> -Each data structure is created by calling <A +<P>Each data structure is created by calling <A HREF="../../backend/storage/ipc/shmem.c">ShmemInitStruct(),</A> and the lookups are created by <A -HREF="../../backend/storage/ipc/shmem.c">ShmemInitHash().</A><P> +HREF="../../backend/storage/ipc/shmem.c">ShmemInitHash().</A></P> -<HR SIZE="2" NOSHADE> +<HR> <SMALL> -<ADDRESS> Maintainer: Bruce Momjian (<A HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> Last updated: Mon Aug 10 10:48:06 EDT 1998 -</ADDRESS> </SMALL> </BODY> </HTML>