Our documentation explains many details about commands, tools, parameters in detail and with high accuracy. Nevertheless my impression is that we neglect the 'big picture': why certain processes exist and what their relation to each other is, summary of strategies, visualization of key situations, ... . People with mature knowledge don't miss this information because they know all about it. But for beginners such explanations would be a great help. In the time before GSoD 2019 we had similar discussions.

I plan to extend over time the part 'Tutorial' by an additional chapter with an overview about key design decisions and basic features. The typical audience should consist of persons with limited pre-knowledge in database systems and some interest in PostgreSQL. In the attachment you find a patch for the first sub-chapter. Subsequent sub-chapters should be: MVCC, transactions, VACUUM, backup, replication, ... - mostly with the focus on the PostgreSQL implementation and not on generic topics like b-trees.

There is a predecessor of this patch: https://www.postgresql.org/message-id/974e09b8-edf5-f38f-2fb5-a5875782ffc9%40purtz.de . In the meanwhile its glossary-part is separated and commited. The new patch contains two elements: textual descriptions and 4 figures. My opinion concerning figures is set out in detail in the previous patch.

Kind regards, Jürgen Purtz


diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml
index ae5f3fac75..965eb751c0 100644
--- a/doc/src/sgml/advanced.sgml
+++ b/doc/src/sgml/advanced.sgml
@@ -1,7 +1,7 @@
 <!-- doc/src/sgml/advanced.sgml -->
 
  <chapter id="tutorial-advanced">
-  <title>Advanced Features</title>
+  <title>Advanced SQL Features</title>
 
   <sect1 id="tutorial-advanced-intro">
    <title>Introduction</title>
diff --git a/doc/src/sgml/architecture.sgml b/doc/src/sgml/architecture.sgml
new file mode 100644
index 0000000000..bbed0c3466
--- /dev/null
+++ b/doc/src/sgml/architecture.sgml
@@ -0,0 +1,449 @@
+<!-- doc/src/sgml/architecture.sgml -->
+
+ <chapter id="tutorial-architecture">
+  <title>The Architecture</title>
+
+  <para>
+   Every DBMS implements basic strategies to achieve a fast and
+   robust system. This chapter provides an overview of what
+   techniques <productname>PostgreSQL</productname> uses to
+   reach this aim.
+  </para>
+
+  <sect1 id="tutorial-ram-proc-file">
+   <title>Collabortion of Processes, RAM, and Files</title>
+   <para>
+    As is a matter of course, in a client/server architecture
+    clients do not have direct access to the database. Instead,
+    they merely send requests to the server side and receives
+    resulting information from there. In the case of
+    <productname>PostgreSQL</productname>, at the server
+    side there is one process per client, the so-called
+    <glossterm linkend="glossary-backend">Backend process</glossterm>.
+    He acts in close cooperation with the
+    <glossterm linkend="glossary-instance">Instance</glossterm> which
+    is a group of tightly coupled other server side processes plus a
+    <glossterm linkend="glossary-shared-memory">Shared Memory</glossterm>
+    area.
+   </para>
+
+   <para>
+    At start time, an instance is initiated by the
+    <glossterm linkend="glossary-postmaster">Postmaster</glossterm> process.
+    He loads the configuration files, allocates the
+    <firstterm>Shared Memory</firstterm>
+    and starts the comprehensive network of processes:
+    <glossterm linkend="glossary-background-writer">Background Writer</glossterm>,
+    <glossterm linkend="glossary-checkpointer">Checkpointer</glossterm>,
+    <glossterm linkend="glossary-wal-writer">WAL Writer</glossterm>,
+    <glossterm linkend="glossary-wal-archiver">WAL Archiver</glossterm>,
+    <glossterm linkend="glossary-autovacuum">Autovacuum processes</glossterm>,
+    <glossterm linkend="glossary-stats-collector">Statistics Collector</glossterm>,
+    <glossterm linkend="glossary-logger">Logger</glossterm>, and more.
+    <xref linkend="tutorial-ram-proc-file-figure"/> visualizes
+    main aspects of their collaboration.
+   </para>
+
+   <figure id="tutorial-ram-proc-file-figure">
+    <title>Architecture</title>
+    <mediaobject>
+     <imageobject role="html">
+      <!-- attribute 'width=..px' is necessary to keep font-size of SVG text
+           in correlation with font-size of surrounding HTML  -->
+      <imagedata fileref="images/ram-proc-file-raw.svg" format="SVG" width="900px" />
+     </imageobject>
+     <imageobject role="fo">
+      <!-- For PDF attribute 'width=100%' is necessary to keep complete SVG visible
+           on the page, which has a fixed width. Font sizes will be adopted.  -->
+      <imagedata fileref="images/ram-proc-file-raw.svg" format="SVG" width="100%" />
+     </imageobject>
+    </mediaobject>
+   </figure>
+
+   <para>
+    Whenever a client application tries to connect to a
+    <glossterm linkend="glossary-database">database</glossterm>, this request is handled
+    in a first step by the <firstterm>Postmaster
+    process</firstterm>. He checks the authorization, starts a
+    new <firstterm>Backend process</firstterm>,
+    and instructs the client application to connect to him. All further
+    client requests go to this process and are handled
+    by him.
+   </para>
+
+   <para>
+    Client requests (SELECT, UPDATE, ...) usually leads to the
+    necessity to read or write some data. In an first attempt
+    the client's <firstterm>Backend process</firstterm> tries
+    to get the information out of <firstterm>Shared
+    Memory</firstterm>. This <firstterm>Shared
+    Memory</firstterm> is a mirror of parts of the
+    <glossterm linkend="glossary-heap">heap</glossterm> and
+    <glossterm linkend="glossary-index">index</glossterm> files. Because files are
+    much huger than memory, it's likely that
+    the desired information is not (completely) available
+    in the RAM. In this case the <firstterm>Backend process
+    </firstterm> must transfer additional file pages to
+    <firstterm>Shared Memory</firstterm>. Files are physically
+    organized in pages. Every transfer between files and
+    RAM is performed in units of complete pages while retaining
+    their size and layout.
+   </para>
+
+   <para>
+    Reading file pages is notedly slower than reading
+    RAM. This is the main motivation for the existence of
+    <firstterm>Shared Memory</firstterm>. As soon as one
+    of the <firstterm>Backend processes</firstterm> has done
+    the job those pages are available for all other
+    <firstterm>Backend processes</firstterm> for direct
+    access in RAM.
+   </para>
+
+   <para>
+    <firstterm>Shared Memory</firstterm> is limited in size.
+    Sooner or later it is necessary to overwrite old RAM
+    pages. As long as the content of such pages hasn't
+    changed this is not a problem. But in
+    <firstterm>Shared Memory</firstterm> also write
+    actions take place
+    - performed by any of the <firstterm>Backend
+    processes</firstterm> (or an
+    <glossterm linkend="glossary-autovacuum">autovacuum process</glossterm>,
+    or other processes). Such modified pages are called
+    <firstterm>dirty pages</firstterm>.
+    Before <firstterm>dirty pages</firstterm> can be overwritten,
+    they must be transfered back to disk. This is a two-step process.
+   </para>
+
+   <para>
+    First, whenever the content of a page changes, a
+    <glossterm linkend="glossary-wal-record">WAL record</glossterm> is created out
+    of the delta-information (difference between old and
+    new content) and stored in another area of the
+    <firstterm>Shared Memory</firstterm>. These
+    <firstterm>WAL records</firstterm> are read by the
+    <firstterm>WAL Writer</firstterm> process,
+    who runs in parallel to the <firstterm>Backend
+    processes</firstterm> and all other processes of
+    the <firstterm>Instance</firstterm>. He writes
+    the continuously arising <firstterm>WAL records</firstterm> to
+    the end of the current
+    <glossterm linkend="glossary-wal-record">WAL file</glossterm>.
+    Because of the sequential nature of this writing, it is much
+    faster than the more or less random access
+    to data files with <firstterm>heap</firstterm>
+    and <firstterm>index</firstterm> information.
+    As mentioned, this WAL-writing happens
+    in an independent process. Nevertheless all
+    <firstterm>WAL records</firstterm> created out of one
+    <firstterm>dirty page</firstterm> must be transfered
+    to disk before the <firstterm>dirty page</firstterm>
+    itself can be transfered to disk (???).
+   </para>
+
+   <para>
+    Second, the transfer of <firstterm>dirty pages</firstterm>
+    from <firstterm>Shared Memory</firstterm> to files must
+    take place. This is the primarily duty of the
+    <firstterm>Background Writer</firstterm> process. Because
+    huge I/O activities can block other processes significantly,
+    he starts periodically and acts only for a short period.
+    Doing so, his expensive I/O activities are spread over
+    time avoiding huge I/O peaks. Also the <firstterm>
+    Checkpointer</firstterm> process transfers
+    <firstterm>dirty pages</firstterm> to files, see next
+    paragraph.
+   </para>
+
+   <para>
+    The <firstterm>Checkpointer</firstterm> has a special
+    duty. As its name suggests, he has to create
+    <firstterm>Checkpoints</firstterm>. Such a
+    <glossterm linkend="glossary-checkpoint">Checkpoint</glossterm> is a point in time
+    when all older <firstterm>dirty pages</firstterm>,
+    all older <firstterm>WAL records</firstterm>, and
+    lastly a special <firstterm>Checkpoint record
+    </firstterm> have been written and flushed to disk.
+    In consequence, after a <firstterm>Checkpoint</firstterm>
+    data files and <firstterm>WAL files</firstterm> are in sync.
+    In case of a recovery (after a crash of the instance)
+    it is known that the information of all
+    <firstterm>WAL records</firstterm> preceding
+    the last <firstterm>Checkpoint record</firstterm>
+    is already integrated into the data files. This
+    speeds up a possibly occurring recovery.
+   </para>
+
+   <para>
+    In correlation with data changes,
+    <firstterm>WAL records</firstterm> arise and are writen
+    to <firstterm>WAL files</firstterm>.
+    Those <firstterm>WAL files</firstterm> - in combination with
+    a previously taken <firstterm>Base Backup</firstterm> -
+    are necessary to restore a database after a crash of the
+    disk, where data files have been stored. Therefore it is
+    recommended to transfer a copy of the <firstterm>
+    WAL files</firstterm>
+    to a second, independent place. The purpose of the
+    <firstterm>WAL Archiver</firstterm> process is to perform
+    this copy action.
+   </para>
+
+   <para>
+    The <glossterm linkend="glossary-stats-collector">Stats Collector</glossterm>
+    collects counter about accesses to <firstterm>SQL
+    objects</firstterm> like tables, rows, indexes, pages,
+    and others. He stores the obtained information in system
+    tables.
+   </para>
+
+   <para>
+    The <glossterm linkend="glossary-logger">Logger</glossterm> writes
+    text lines about serious and non-serious events which can happen
+    during database access, e.g.: wrong password, no permission,
+    long-running queries, ... .
+   </para>
+
+  </sect1>
+
+  <sect1 id="tutorial-cluster-db-schema">
+   <title>Cluster, Database, Schema</title>
+
+   <para>
+    On a <glossterm linkend="glossary-server">Server</glossterm>
+    exists one or more <glossterm linkend="glossary-cluster">Cluster</glossterm>,
+    each of them contains three or more
+    <glossterm linkend="glossary-database">databases</glossterm>, each
+    database contains many <glossterm linkend="glossary-schema">schema</glossterm>,
+    a schema contains <glossterm linkend="glossary-table">tables</glossterm>,
+    <glossterm linkend="glossary-view">views</glossterm>, and a lot of other objects.
+    Each <firstterm>table</firstterm> or <firstterm>view</firstterm>
+    belongs to a certain <firstterm>schema</firstterm>, they cannot
+    belong to another <firstterm>schema</firstterm>. The same is
+    true for the schema/database and database/cluster relation.
+    <xref linkend="tutorial-cluster-db-schema-figure"/> visualizes
+    this hierarchy.
+   </para>
+
+   <figure id="tutorial-cluster-db-schema-figure">
+    <title>Cluster, Database, Schema</title>
+    <mediaobject>
+     <imageobject role="html">
+      <!-- attribute 'width=..px' is necessary to keep font-size of SVG text
+           in correlation with font-size of surrounding HTML  -->
+      <imagedata fileref="images/cluster-db-schema-raw.svg" format="SVG" width="900px" />
+     </imageobject>
+     <imageobject role="fo">
+      <!-- For PDF attribute 'width=100%' is necessary to keep complete SVG visible
+           on the page, which has a fixed width. Font sizes will be adopted.  -->
+      <imagedata fileref="images/cluster-db-schema-raw.svg" format="SVG" width="100%" />
+     </imageobject>
+    </mediaobject>
+   </figure>
+
+   <para>
+    A <firstterm>Cluster</firstterm> is the outer frame for a
+    collection of databases. Clusters are created by the command
+    <xref linkend="app-initdb"/>.
+   </para>
+
+   <para>
+    <literal>template0</literal> is the very first
+    <firstterm>database</firstterm> of any
+    <firstterm>cluster</firstterm>. C-routines create
+    <literal>template0</literal> during the initialization phase of
+    the <firstterm>cluster</firstterm>.
+    In a second step <literal>template1</literal> is generated
+    as a copy of <literal>template0</literal> and finally
+    <literal>postgres</literal> as a copy of
+    <literal>template1</literal>. All other
+    <glossterm linkend="app-createdb">new databases</glossterm>
+    of this <firstterm>cluster</firstterm>,
+    such as <literal>my_db</literal>, are also copied from
+    <literal>template1</literal>. Due to the special
+    role of <literal>template0</literal> as the origin
+    of all other <firstterm>databases</firstterm>, no client
+    can connect to it.
+   </para>
+
+   <para>
+    Every database contains <glossterm linkend="glossary-schema">
+    schemas</glossterm>, and
+    <firstterm>schemas</firstterm> contain the other
+    <glossterm linkend="glossary-sql-object">SQL Objects</glossterm>.
+    <firstterm>Schemas</firstterm> are namespaces for
+    their <firstterm>SQL objects</firstterm> and ensure - with one
+    exception - that within their scope names are used only once across all
+    types of <firstterm>SQL objects</firstterm>. E.g.: it is not possible
+    to have a table <literal>employee</literal> and a view
+    <literal>employee</literal> within the same
+    <firstterm>schema</firstterm>. But it is possible to have
+    two tables <literal>employee</literal> in different
+    <firstterm>schemas</firstterm>. In this case the two tables
+    are different objects and absolutely independent from each
+    other. The only exception to this cross-type uniqueness is that
+    <glossterm linkend="glossary-unique-constraint">unique constraints
+    </glossterm> and the according <firstterm>unique index</firstterm>
+    use the same name.
+   </para>
+
+   <para>
+    Some <firstterm>schemas</firstterm> are predefined.
+    <literal>public</literal> acts as the default
+    <firstterm>schema</firstterm> and contains all such
+    <firstterm>SQL objects</firstterm>, which are created
+    within <literal>public</literal> or without using any schema
+    name. <literal>public</literal> shall not contain user defined
+    <firstterm>SQL objects</firstterm>. Instead, it is recommended to
+    create a separate <firstterm>schema</firstterm> which
+    holds individual objects like application-specific tables or
+    views. <literal>pg_catalog</literal> is a schema for all tables
+    and views of the <glossterm linkend="glossary-system-catalog">
+    System Catalog</glossterm>.
+    <literal>information_schema</literal> is a schema for several
+    tables and views of the <firstterm>System Catalog</firstterm>
+    in a way which conforms to the SQL standard.
+   </para>
+
+   <para>
+    There are a lot of different <firstterm>SQL object</firstterm>
+    types: <firstterm>database, schema, table, view, materialized
+    view, index, constraint, sequence, function, procedure,
+    trigger, role, data type, operator, tablespace, extension,
+    foreign data wrapper</firstterm>, and more. A few of them, the
+    <glossterm linkend="glossary-global-sql-object">Global SQL Objects</glossterm>,
+    are outside of the strict hierarchy: 
+    All database names, all tablespace names, and all role names
+    are automatically known and available throughout the
+    complete <firstterm>cluster</firstterm>, independent from
+    the database or schema in which they where originally
+    defined. <xref linkend="tutorial-internal-objects-hierarchy-figure"/>
+    shows the relation between the object types.
+   </para>
+
+   <figure id="tutorial-internal-objects-hierarchy-figure">
+    <title>Hierarchy of Internal Objects</title>
+    <mediaobject>
+     <imageobject role="html">
+      <!-- attribute 'width=..px' is necessary to keep font-size of SVG text
+           in correlation with font-size of surrounding HTML  -->
+      <imagedata fileref="images/internal-objects-hierarchy-raw.svg" format="SVG" width="720px" />
+     </imageobject>
+     <imageobject role="fo">
+      <!-- For PDF attribute 'width=100%' is necessary to keep complete SVG visible
+           on the page, which has a fixed width. Font sizes will be adopted.  -->
+      <imagedata fileref="images/internal-objects-hierarchy-raw.svg" format="SVG" width="100%" />
+     </imageobject>
+    </mediaobject>
+   </figure>
+
+  </sect1>
+
+  <sect1 id="tutorial-directories">
+   <title>Directory Structure</title>
+
+   <para>
+    <productname>PostgreSQL</productname> organizes long lasting
+    data as well as volatile state information about transactions
+    or replication actions in the file system. Every
+    <firstterm>Cluster</firstterm> has its own root directory
+    anywhere in the file system. In many cases, the environment
+    variable <literal>PGDATA</literal> points to this directory.
+    The example of the following survey, which is shown in
+    <xref linkend="tutorial-directories-figure"/>, uses
+    <literal>data</literal> as the name of this root directory.
+   </para>
+
+   <figure id="tutorial-directories-figure">
+    <title>Directory Structure</title>
+    <mediaobject>
+     <imageobject role="html">
+      <!-- attribute 'width=..px' is necessary to keep font-size of SVG text
+           in correlation with font-size of surrounding HTML  -->
+      <imagedata fileref="images/directories-raw.svg" format="SVG" width="900px" />
+     </imageobject>
+     <imageobject role="fo">
+      <!-- For PDF attribute 'width=100%' is necessary to keep complete SVG visible
+           on the page, which has a fixed width. Font sizes will be adopted.  -->
+      <imagedata fileref="images/directories-raw.svg" format="SVG" width="100%" />
+     </imageobject>
+    </mediaobject>
+   </figure>
+
+   <para>
+    <literal>data</literal> contains many subdirectories and
+    some files, all of which are necessary to store long lasting
+    as well as temporary data. The following paragraphs
+    describe the files and subdirectories in
+    <literal>data</literal>.
+   </para>
+
+   <para>
+    <literal>base</literal> is a subdirectory in which one
+    subdirectory per <firstterm>database</firstterm> exists.
+    The names of those sudirectories consists of numbers.
+    These are the internal
+    <firstterm>Object Identifiers (OID)</firstterm>, which are
+    numbers to identify the database definition in the
+    <glossterm linkend="glossary-system-catalog">System Catalog</glossterm>.
+   </para>
+
+   <para>
+    Within the <firstterm>database</firstterm>-specific
+    subdirectories there are many files. Primarily they contain
+    the <firstterm>heap</firstterm> and <firstterm>
+    index</firstterm>. But there are also optimization information
+    like <link linkend="storage-fsm">Free Space Maps</link> or
+    <link linkend="storage-vm">Visibility Maps</link>.
+   </para>
+
+   <para>
+    Another important subdirectory is <literal>global</literal>.
+    In analogy to the <firstterm>database</firstterm>-specific
+    subdirectories, there are files containing information about
+    <glossterm linkend="glossary-global-sql-object">Global SQL objects</glossterm>.
+    One type
+ of such <firstterm>Global Objects</firstterm> are
+    <firstterm>tablespaces</firstterm>. In
+    <literal>global</literal> there are information about
+    the <firstterm>tablespaces</firstterm>, not the
+    <firstterm>tablespaces</firstterm> itself.
+   </para>
+
+   <para>
+    The subdirectory <literal>pg_wal</literal> contains the
+    <glossterm linkend="glossary-wal-file">WAL files</glossterm>.
+    They arise and grow parallel to data changes in the
+    <firstterm>cluster</firstterm> and remain alive as long as
+    they are required for recovery, archiving, or replication.
+   </para>
+
+   <para>
+    The subdirectory <literal>pg_xact</literal> contains
+    information about the status of each transaction
+    (IN_PROGRESS, COMMITTED, ABORTED, or SUB_COMMITTED).
+   </para>
+
+   <para>
+    In <literal>pg_tblspc</literal> there are symbolic links
+    that point to directories containing such<firstterm>
+    SQL objects</firstterm> that are created within
+    <firstterm>tablespaces</firstterm>.
+   </para>
+
+   <para>
+    In the directory <literal>data</literal>
+    there are also some files.
+    In many cases, the configuration
+    files of this <firstterm>cluster</firstterm>
+    are stored here. As long as the <firstterm>
+    cluster</firstterm> is up and running, the file
+    <literal>postmaster.pid</literal> exists here
+    and contains the ID of the
+    <firstterm>Postmaster</firstterm> process.
+   </para>
+
+  </sect1>
+
+ </chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 68179f71cd..ca29c8bc4e 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -8,9 +8,10 @@
 <!ENTITY problems   SYSTEM "problems.sgml">
 
 <!-- tutorial -->
-<!ENTITY advanced   SYSTEM "advanced.sgml">
-<!ENTITY query      SYSTEM "query.sgml">
-<!ENTITY start      SYSTEM "start.sgml">
+<!ENTITY start         SYSTEM "start.sgml">
+<!ENTITY architecture  SYSTEM "architecture.sgml">
+<!ENTITY query         SYSTEM "query.sgml">
+<!ENTITY advanced      SYSTEM "advanced.sgml">
 
 <!-- user's guide -->
 <!ENTITY array      SYSTEM "array.sgml">
diff --git a/doc/src/sgml/glossary.sgml b/doc/src/sgml/glossary.sgml
index 8c6cb6e942..25762b7c3a 100644
--- a/doc/src/sgml/glossary.sgml
+++ b/doc/src/sgml/glossary.sgml
@@ -208,15 +208,6 @@
    </glossdef>
   </glossentry>
 
-  <glossentry id="glossary-checkpointer">
-   <glossterm>Checkpointer (process)</glossterm>
-   <glossdef>
-    <para>
-     A specialized process responsible for executing checkpoints.
-    </para>
-   </glossdef>
-  </glossentry>
-
   <glossentry id="glossary-checkpoint">
    <glossterm>Checkpoint</glossterm>
    <glossdef>
@@ -244,6 +235,15 @@
    </glossdef>
   </glossentry>
 
+  <glossentry id="glossary-checkpointer">
+   <glossterm>Checkpointer (process)</glossterm>
+   <glossdef>
+    <para>
+     A specialized process responsible for executing checkpoints.
+    </para>
+   </glossdef>
+  </glossentry>
+
   <glossentry>
    <glossterm>Class (archaic)</glossterm>
    <glosssee otherterm="glossary-relation" />
@@ -761,25 +761,6 @@
    </glossdef>
   </glossentry>
 
-  <glossentry id="glossary-logger">
-   <glossterm>Logger (process)</glossterm>
-   <glossdef>
-    <para>
-     If activated, the
-     <glossterm linkend="glossary-logger">Logger</glossterm> process
-     writes information about database events into the current
-     <glossterm linkend="glossary-log-file">log file</glossterm>.
-     When reaching certain time- or
-     volume-dependent criteria, a new log file is created.
-     Also called <firstterm>syslogger</firstterm>.
-    </para>
-    <para>
-     For more information, see
-     <xref linkend="runtime-config-logging"/>.
-    </para>
-   </glossdef>
-  </glossentry>
-
   <glossentry id="glossary-log-record">
    <glossterm>Log Record</glossterm>
     <glossdef>
@@ -803,6 +784,25 @@
    </glossdef>
   </glossentry>
 
+  <glossentry id="glossary-logger">
+   <glossterm>Logger (process)</glossterm>
+   <glossdef>
+    <para>
+     If activated, the
+     <glossterm linkend="glossary-logger">Logger</glossterm> process
+     writes information about database events into the current
+     <glossterm linkend="glossary-log-file">log file</glossterm>.
+     When reaching certain time- or
+     volume-dependent criteria, a new log file is created.
+     Also called <firstterm>syslogger</firstterm>.
+    </para>
+    <para>
+     For more information, see
+     <xref linkend="runtime-config-logging"/>.
+    </para>
+   </glossdef>
+  </glossentry>
+
   <glossentry>
    <glossterm>Master (server)</glossterm>
    <glosssee otherterm="glossary-primary-server" />
@@ -1651,6 +1651,11 @@
    </glossdef>
   </glossentry>
 
+  <glossentry>
+   <glossterm>WAL</glossterm>
+   <glosssee otherterm="glossary-wal" />
+  </glossentry>
+
   <glossentry id="glossary-wal-archiver">
    <glossterm>WAL Archiver (process)</glossterm>
    <glossdef>
@@ -1696,11 +1701,6 @@
    </glossdef>
   </glossentry>
 
-  <glossentry>
-   <glossterm>WAL</glossterm>
-   <glosssee otherterm="glossary-wal" />
-  </glossentry>
-
   <glossentry id="glossary-wal-record">
    <glossterm>WAL Record</glossterm>
    <glossdef>
@@ -1728,8 +1728,8 @@
   <glossdef>
    <para>
     A process that writes <glossterm linkend="glossary-wal-record">WAL records</glossterm>
-    from <glossterm id="linkend-shared-memory">shared memory</glossterm> to
-    <glossterm id="linkend-wal-file">WAL files</glossterm>.
+    from <glossterm linkend="glossary-shared-memory">shared memory</glossterm> to
+    <glossterm linkend="glossary-wal-file">WAL files</glossterm>.
    </para>
    <para>
     For more information, see
diff --git a/doc/src/sgml/images/cluster-db-schema-ink-svgo.svg b/doc/src/sgml/images/cluster-db-schema-ink-svgo.svg
new file mode 100644
index 0000000000..6acb2b69fe
--- /dev/null
+++ b/doc/src/sgml/images/cluster-db-schema-ink-svgo.svg
@@ -0,0 +1,160 @@
+<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; width="900" height="685" viewBox="0 0 900 685">
+  <title>
+    Server (Hardware, Container, or VM)
+  </title>
+  <style>
+    .text_normal,.text_small{font-style:normal;font-weight:400;font-family:&quot;Open Sans&quot;,sans-serif;fill:#000}.text_small{font-size:12px}.text_normal{font-size:16px}
+  </style>
+  <defs>
+    <symbol id="rectangles_special_0">
+      <rect width="225" height="155" rx="10" stroke="blue" fill="none"/>
+      <rect x="15" y="40" width="195" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2"/>
+      <text class="text_normal" x="20" y="60">
+        schema &apos;public&apos;
+      </text>
+      <text class="text_small" x="20" y="80">
+        tables, views, ...
+      </text>
+      <rect x="15" y="105" width="195" height="30" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2"/>
+      <text class="text_small" x="20" y="125">
+        (more system schemas)
+      </text>
+    </symbol>
+    <symbol id="rectangles_special_1">
+      <rect width="245" height="225" rx="10" stroke="blue" fill="none"/>
+      <rect x="15" y="40" width="205" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2"/>
+      <text class="text_normal" x="20" y="60">
+        schema &apos;public&apos;
+      </text>
+      <text class="text_small" x="20" y="80">
+        tables, views, ...
+      </text>
+      <rect x="15" y="105" width="205" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2"/>
+      <text class="text_normal" x="20" y="125">
+        &apos;my_schema&apos; (optional)
+      </text>
+      <text class="text_small" x="20" y="145">
+        tables, views, ...
+      </text>
+      <rect x="15" y="170" width="205" height="30" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2"/>
+      <text class="text_small" x="20" y="190">
+        (more system schemas)
+      </text>
+    </symbol>
+    <symbol id="note" stroke="black" fill="lightyellow">
+      <title>
+        UML Note
+      </title>
+      <path d="M450 10v230H0V0h440v10h10L440 0"/>
+    </symbol>
+    <marker id="arrowhead_end" markerWidth="10" markerHeight="10" refX="6" refY="3" orient="auto">
+      <path d="M0 0l6 3-6 3" stroke="black" fill="none"/>
+    </marker>
+  </defs>
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none"/>
+  <text x="270" y="40" font-weight="400" font-size="24" font-family="&quot;Open Sans&quot;,sans-serif">
+    Server (Hardware, Container, or VM)
+  </text>
+  <path stroke="blue" stroke-width="2" fill="none" d="M20 110h790v555H20z"/>
+  <text class="text_normal" x="180" y="25" transform="translate(20 110)">
+    cluster &apos;data&apos; (default, managed by one instance)
+  </text>
+  <path d="M50 110V80h790v555h-30" stroke="blue" stroke-width="2" fill="none"/>
+  <text class="text_normal" x="190" y="-10" transform="translate(45 110)">
+    cluster &apos;cluster_2&apos; (optional, managed by a different instance)
+  </text>
+  <g transform="translate(40 155)">
+    <use xlink:href="#rectangles_special_0"/>
+    <text class="text_normal" x="10" y="25">
+      database &apos;template0&apos;
+    </text>
+  </g>
+  <g transform="translate(290 155)">
+    <use xlink:href="#rectangles_special_0"/>
+    <text class="text_normal" x="10" y="25">
+      database &apos;template1&apos;
+    </text>
+  </g>
+  <g transform="translate(540 155)">
+    <use xlink:href="#rectangles_special_1"/>
+    <text class="text_normal" x="10" y="25">
+      database &apos;postgres&apos;
+    </text>
+  </g>
+  <g transform="translate(40 350)">
+    <use xlink:href="#rectangles_special_1"/>
+    <text class="text_normal" x="10" y="25">
+      database &apos;my_db&apos; (optional)
+    </text>
+  </g>
+  <g transform="translate(320 330)">
+    <rect width="180" height="45" rx="10" stroke="blue" fill="none" stroke-dasharray="10 4 4 4"/>
+    <text class="text_normal" x="15" y="27">
+      Global SQL objects
+    </text>
+    <path d="M0 5l-65-35" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+    <path d="M80 0v-30" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+    <path d="M180 40h50" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+    <path d="M0 40l-45 20" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  </g>
+  <g transform="translate(335 405)">
+    <use xlink:href="#note"/>
+    <text class="text_small" x="10" y="20">
+      1)
+    </text>
+    <text class="text_small" x="30" y="20">
+      By default, you work in the cluster &apos;data&apos;, database &apos;postgres&apos;,
+    </text>
+    <text class="text_small" x="30" y="35">
+      schema &apos;public&apos;.
+    </text>
+    <text class="text_small" x="10" y="55">
+      2)
+    </text>
+    <text class="text_small" x="30" y="55">
+      More system schemas: pg_catalog, information_schema,
+    </text>
+    <text class="text_small" x="30" y="70">
+      pg_temp, pg_toast.
+    </text>
+    <text class="text_small" x="10" y="90">
+      3)
+    </text>
+    <text class="text_small" x="30" y="90">
+      Global SQL objects: Some SQL objects are automatically active
+    </text>
+    <text class="text_small" x="30" y="105">
+      and known database- or even cluster-wide.
+    </text>
+    <text class="text_small" x="10" y="125">
+      4)
+    </text>
+    <text class="text_small" x="30" y="125">
+      The command &apos;initdb&apos; creates a new cluster with the three
+    </text>
+    <text class="text_small" x="30" y="140">
+      databases &apos;template0&apos;, &apos;template1&apos;, and &apos;postgres&apos;. The command
+    </text>
+    <text class="text_small" x="30" y="155">
+      &apos;createdb&apos; creates a new database.
+    </text>
+    <text class="text_small" x="10" y="175">
+      5)
+    </text>
+    <text class="text_small" x="30" y="175">
+      If multiple clusters are active on one server at the same time,
+    </text>
+    <text class="text_small" x="30" y="190">
+      each one is managed by an individual instance. Each such instance
+    </text>
+    <text class="text_small" x="30" y="205">
+      uses a different port.
+    </text>
+    <text class="text_small" x="10" y="225">
+      6)
+    </text>
+    <text class="text_small" x="30" y="225">
+      No client application is allowed to connect to &apos;template0&apos;.
+    </text>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/cluster-db-schema-ink.svg b/doc/src/sgml/images/cluster-db-schema-ink.svg
new file mode 100644
index 0000000000..a70fbe2102
--- /dev/null
+++ b/doc/src/sgml/images/cluster-db-schema-ink.svg
@@ -0,0 +1,482 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.1"
+   width="900px"
+   height="685px"
+   viewBox="0 0 900 685"
+   id="svg147"
+   sodipodi:docname="cluster-db-schema-ink.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata151">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Server (Hardware, Container, or VM)</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview149"
+     showgrid="false"
+     inkscape:zoom="0.34452555"
+     inkscape:cx="450"
+     inkscape:cy="342.5"
+     inkscape:window-x="61"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg147" />
+  <title
+     id="title2">Server (Hardware, Container, or VM)</title>
+  <!-- common text classes -->
+  <style
+     type="text/css"
+     id="style4">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:12px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  </style>
+  <defs
+     id="defs49">
+    <!--  a rectangle with rounded corners and inner definitions for schemas  -->
+    <symbol
+       id="rectangles_special_0">
+      <!--  the database  -->
+      <rect
+         width="225"
+         height="155"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         id="rect6" />
+      <!--  schemas  -->
+      <rect
+         x="15"
+         y="40"
+         width="195"
+         height="50"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         stroke-dasharray="4 2"
+         id="rect8" />
+      <text
+         class="text_normal"
+         x="20"
+         y="60"
+         id="text10">schema 'public'</text>
+      <text
+         class="text_small"
+         x="20"
+         y="80"
+         id="text12">tables, views, ...</text>
+      <rect
+         x="15"
+         y="105"
+         width="195"
+         height="30"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         stroke-dasharray="4 2"
+         id="rect14" />
+      <text
+         class="text_small"
+         x="20"
+         y="125"
+         id="text16">(more system schemas)</text>
+    </symbol>
+    <!--  same as before, but one more schema  -->
+    <symbol
+       id="rectangles_special_1">
+      <!--  the database  -->
+      <rect
+         width="245"
+         height="225"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         id="rect19" />
+      <!--  schemas  -->
+      <rect
+         x="15"
+         y="40"
+         width="205"
+         height="50"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         stroke-dasharray="4 2"
+         id="rect21" />
+      <text
+         class="text_normal"
+         x="20"
+         y="60"
+         id="text23">schema 'public'</text>
+      <text
+         class="text_small"
+         x="20"
+         y="80"
+         id="text25">tables, views, ...</text>
+      <rect
+         x="15"
+         y="105"
+         width="205"
+         height="50"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         stroke-dasharray="4 2"
+         id="rect27" />
+      <text
+         class="text_normal"
+         x="20"
+         y="125"
+         id="text29">'my_schema' (optional)</text>
+      <text
+         class="text_small"
+         x="20"
+         y="145"
+         id="text31">tables, views, ...</text>
+      <rect
+         x="15"
+         y="170"
+         width="205"
+         height="30"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         stroke-dasharray="4 2"
+         id="rect33" />
+      <text
+         class="text_small"
+         x="20"
+         y="190"
+         id="text35">(more system schemas)</text>
+    </symbol>
+    <symbol
+       id="note"
+       stroke="black"
+       fill="lightyellow">
+      <title
+         id="title38">UML Note</title>
+      <path
+         d="M 450,10 v 230 h -450 v -240 h 440 v 10 h 10 l -10,-10"
+         id="path40" />
+    </symbol>
+    <!--  marker start/end -->
+    <marker
+       id="arrowhead_start"
+       markerWidth="10"
+       markerHeight="10"
+       refX="0"
+       refY="3"
+       orient="auto">
+      <path
+         d="M 6,0 l -6,3 l 6,3"
+         stroke="black"
+         fill="none"
+         id="path43" />
+    </marker>
+    <marker
+       id="arrowhead_end"
+       markerWidth="10"
+       markerHeight="10"
+       refX="6"
+       refY="3"
+       orient="auto">
+      <path
+         d="M 0,0 l 6,3 l -6,3"
+         stroke="black"
+         fill="none"
+         id="path46" />
+    </marker>
+  </defs>
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect
+     x="1"
+     y="1"
+     rx="5"
+     width="99%"
+     height="99%"
+     stroke="black"
+     fill="none"
+     id="rect51" />
+  <text
+     class="text_big"
+     x="270"
+     y="40"
+     id="text53">Server (Hardware, Container, or VM)</text>
+  <!--  two clusters  -->
+  <g
+     transform="translate(20 110)"
+     id="g59">
+    <rect
+       x="0"
+       y="0"
+       width="790"
+       height="555"
+       stroke="blue"
+       stroke-width="2px"
+       fill="none"
+       id="rect55" />
+    <text
+       class="text_normal"
+       x="180"
+       y="25"
+       id="text57">cluster 'data' (default, managed by one instance)</text>
+  </g>
+  <g
+     transform="translate(45 110)"
+     id="g65">
+    <path
+       d="M 5,0 v -30 h 790 v 555 h -30"
+       stroke="blue"
+       stroke-width="2px"
+       fill="none"
+       id="path61" />
+    <text
+       class="text_normal"
+       x="190"
+       y="-10"
+       id="text63">cluster 'cluster_2' (optional, managed by a different instance)</text>
+  </g>
+  <!--  database template 0  -->
+  <g
+     transform="translate(40 155)"
+     id="g71">
+    <use
+       xlink:href="#rectangles_special_0"
+       id="use67" />
+    <text
+       class="text_normal"
+       x="10"
+       y="25"
+       id="text69">database 'template0'</text>
+  </g>
+  <!--  database template 1  -->
+  <g
+     transform="translate(290 155)"
+     id="g77">
+    <use
+       xlink:href="#rectangles_special_0"
+       id="use73" />
+    <text
+       class="text_normal"
+       x="10"
+       y="25"
+       id="text75">database 'template1'</text>
+  </g>
+  <!--  database postgres  -->
+  <g
+     transform="translate(540 155)"
+     id="g83">
+    <use
+       xlink:href="#rectangles_special_1"
+       id="use79" />
+    <text
+       class="text_normal"
+       x="10"
+       y="25"
+       id="text81">database 'postgres'</text>
+  </g>
+  <!--  database my_db  -->
+  <g
+     transform="translate(40 350)"
+     id="g89">
+    <use
+       xlink:href="#rectangles_special_1"
+       id="use85" />
+    <text
+       class="text_normal"
+       x="10"
+       y="25"
+       id="text87">database 'my_db' (optional)</text>
+  </g>
+  <!--  global objects  -->
+  <g
+     transform="translate(320 330)"
+     id="g103">
+    <rect
+       x="0"
+       y="0"
+       width="180"
+       height="45"
+       rx="10"
+       stroke="blue"
+       fill="none"
+       stroke-dasharray="10 4 4 4"
+       id="rect91" />
+    <text
+       class="text_normal"
+       x="15"
+       y="27"
+       id="text93">Global SQL objects</text>
+    <path
+       d="M 0,5 l-65,-35"
+       stroke="black"
+       fill="none"
+       marker-end="url(#arrowhead_end)"
+       id="path95" />
+    <path
+       d="M 80,0 v-30"
+       stroke="black"
+       fill="none"
+       marker-end="url(#arrowhead_end)"
+       id="path97" />
+    <path
+       d="M 180,40 h50"
+       stroke="black"
+       fill="none"
+       marker-end="url(#arrowhead_end)"
+       id="path99" />
+    <path
+       d="M 0,40 l-45,20"
+       stroke="black"
+       fill="none"
+       marker-end="url(#arrowhead_end)"
+       id="path101" />
+  </g>
+  <!--  Some comments  -->
+  <g
+     transform="translate(335 405)"
+     id="g145">
+    <use
+       xlink:href="#note"
+       x="0"
+       y="0"
+       id="use105" />
+    <text
+       class="text_small"
+       x="10"
+       y="20"
+       id="text107">1)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="20"
+       id="text109">By default, you work in the cluster 'data', database 'postgres',</text>
+    <text
+       class="text_small"
+       x="30"
+       y="35"
+       id="text111">schema 'public'.</text>
+    <text
+       class="text_small"
+       x="10"
+       y="55"
+       id="text113">2)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="55"
+       id="text115">More system schemas: pg_catalog, information_schema,</text>
+    <text
+       class="text_small"
+       x="30"
+       y="70"
+       id="text117">pg_temp, pg_toast.</text>
+    <text
+       class="text_small"
+       x="10"
+       y="90"
+       id="text119">3)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="90"
+       id="text121">Global SQL objects: Some SQL objects are automatically active</text>
+    <text
+       class="text_small"
+       x="30"
+       y="105"
+       id="text123">and known database- or even cluster-wide.</text>
+    <text
+       class="text_small"
+       x="10"
+       y="125"
+       id="text125">4)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="125"
+       id="text127">The command 'initdb' creates a new cluster with the three</text>
+    <text
+       class="text_small"
+       x="30"
+       y="140"
+       id="text129">databases 'template0', 'template1', and 'postgres'. The command</text>
+    <text
+       class="text_small"
+       x="30"
+       y="155"
+       id="text131">'createdb' creates a new database.</text>
+    <text
+       class="text_small"
+       x="10"
+       y="175"
+       id="text133">5)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="175"
+       id="text135">If multiple clusters are active on one server at the same time,</text>
+    <text
+       class="text_small"
+       x="30"
+       y="190"
+       id="text137">each one is managed by an individual instance. Each such instance</text>
+    <text
+       class="text_small"
+       x="30"
+       y="205"
+       id="text139">uses a different port.</text>
+    <text
+       class="text_small"
+       x="10"
+       y="225"
+       id="text141">6)</text>
+    <text
+       class="text_small"
+       x="30"
+       y="225"
+       id="text143">No client application is allowed to connect to 'template0'.</text>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/cluster-db-schema-raw.svg b/doc/src/sgml/images/cluster-db-schema-raw.svg
new file mode 100644
index 0000000000..a4919165e2
--- /dev/null
+++ b/doc/src/sgml/images/cluster-db-schema-raw.svg
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg";
+     xmlns:xlink="http://www.w3.org/1999/xlink";
+     version="1.1"
+     width="900px" height="685px"
+     viewBox="0 0 900 685" >
+
+  <title>Server (Hardware, Container, or VM)</title>
+
+  <!-- common text classes -->
+  <style type="text/css">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:12px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  </style>
+
+  <defs>
+    <!--  a rectangle with rounded corners and inner definitions for schemas  -->
+    <symbol id="rectangles_special_0">
+
+      <!--  the database  -->
+      <rect width="225" height="155" rx="10" stroke="blue" fill="none"/>
+
+      <!--  schemas  -->
+      <rect x="15" y="40" width="195" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2" />
+      <text class="text_normal" x="20" y="60">schema 'public'</text>
+      <text class="text_small"  x="20" y="80">tables, views, ...</text>
+
+      <rect x="15" y="105" width="195" height="30" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2" />
+      <text class="text_small"  x="20" y="125">(more system schemas)</text>
+    </symbol>
+
+    <!--  same as before, but one more schema  -->
+    <symbol id="rectangles_special_1">
+      <!--  the database  -->
+      <rect width="245" height="225" rx="10" stroke="blue" fill="none"/>
+
+      <!--  schemas  -->
+      <rect x="15" y="40" width="205" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2" />
+      <text class="text_normal" x="20" y="60">schema 'public'</text>
+      <text class="text_small"  x="20" y="80">tables, views, ...</text>
+
+      <rect x="15" y="105" width="205" height="50" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2" />
+      <text class="text_normal" x="20" y="125">'my_schema' (optional)</text>
+      <text class="text_small"  x="20" y="145">tables, views, ...</text>
+
+      <rect x="15" y="170" width="205" height="30" rx="10" stroke="blue" fill="none" stroke-dasharray="4 2" />
+      <text class="text_small"  x="20" y="190">(more system schemas)</text>
+    </symbol>
+
+    <symbol id="note" stroke="black" fill="lightyellow">
+      <title>UML Note</title>
+      <path d="M 450,10 v 230 h -450 v -240 h 440 v 10 h 10 l -10,-10" />
+    </symbol>
+
+    <!--  marker start/end -->
+    <marker id="arrowhead_start"
+            markerWidth="10"
+            markerHeight="10"
+            refX="0"
+            refY="3"
+            orient="auto">
+      <path d="M 6,0 l -6,3 l 6,3" stroke="black" fill="none" />
+    </marker>
+    <marker id="arrowhead_end"
+            markerWidth="10"
+            markerHeight="10"
+            refX="6"
+            refY="3"
+            orient="auto">
+      <path d="M 0,0 l 6,3 l -6,3" stroke="black" fill="none" />
+    </marker>
+
+  </defs>
+
+
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none" />
+  <text class="text_big" x="270" y="40">Server (Hardware, Container, or VM)</text>
+
+  <!--  two clusters  -->
+  <g transform="translate(20 110)">
+    <rect  x="0" y="0" width="790" height="555" stroke="blue" stroke-width="2px" fill="none" />
+    <text class="text_normal" x="180" y="25">cluster 'data' (default, managed by one instance)</text>
+  </g>
+  <g transform="translate(45 110)">
+    <path d="M 5,0 v -30 h 790 v 555 h -30" stroke="blue" stroke-width="2px" fill="none" />
+    <text class="text_normal" x="190" y="-10">cluster 'cluster_2' (optional, managed by a different instance)</text>
+  </g>
+
+
+  <!--  database template 0  -->
+  <g transform="translate(40 155)">
+    <use xlink:href="#rectangles_special_0" />
+    <text class="text_normal" x="10" y="25">database 'template0'</text>
+  </g>
+
+  <!--  database template 1  -->
+  <g transform="translate(290 155)">
+    <use xlink:href="#rectangles_special_0" />
+    <text class="text_normal" x="10" y="25">database 'template1'</text>
+  </g>
+
+  <!--  database postgres  -->
+  <g transform="translate(540 155)">
+    <use xlink:href="#rectangles_special_1" />
+    <text class="text_normal" x="10" y="25">database 'postgres'</text>
+  </g>
+
+  <!--  database my_db  -->
+  <g transform="translate(40 350)">
+    <use xlink:href="#rectangles_special_1" />
+    <text class="text_normal" x="10" y="25">database 'my_db' (optional)</text>
+  </g>
+
+  <!--  global objects  -->
+  <g transform="translate(320 330)">
+    <rect x="0" y="0" width="180" height="45" rx="10" stroke="blue" fill="none" stroke-dasharray="10 4 4 4" />
+    <text class="text_normal" x="15" y="27">Global SQL objects</text>
+    <path d="M 0,5 l-65,-35" stroke="black" fill="none" marker-end="url(#arrowhead_end)" />
+    <path d="M 80,0 v-30" stroke="black" fill="none" marker-end="url(#arrowhead_end)" />
+    <path d="M 180,40 h50" stroke="black" fill="none" marker-end="url(#arrowhead_end)" />
+    <path d="M 0,40 l-45,20" stroke="black" fill="none" marker-end="url(#arrowhead_end)" />
+  </g>
+
+  <!--  Some comments  -->
+  <g transform="translate(335 405)">
+    <use xlink:href="#note" x="0" y="0" />
+
+    <text class="text_small" x="10" y="20">1)</text>
+    <text class="text_small" x="30" y="20">By default, you work in the cluster 'data', database 'postgres',</text>
+    <text class="text_small" x="30" y="35">schema 'public'.</text>
+
+    <text class="text_small" x="10" y="55">2)</text>
+    <text class="text_small" x="30" y="55">More system schemas: pg_catalog, information_schema,</text>
+    <text class="text_small" x="30" y="70">pg_temp, pg_toast.</text>
+
+    <text class="text_small" x="10" y="90">3)</text>
+    <text class="text_small" x="30" y="90">Global SQL objects: Some SQL objects are automatically active</text>
+    <text class="text_small" x="30" y="105">and known database- or even cluster-wide.</text>
+
+    <text class="text_small" x="10" y="125">4)</text>
+    <text class="text_small" x="30" y="125">The command 'initdb' creates a new cluster with the three</text>
+    <text class="text_small" x="30" y="140">databases 'template0', 'template1', and 'postgres'. The command</text>
+    <text class="text_small" x="30" y="155">'createdb' creates a new database.</text>
+
+    <text class="text_small" x="10" y="175">5)</text>
+    <text class="text_small" x="30" y="175">If multiple clusters are active on one server at the same time,</text>
+    <text class="text_small" x="30" y="190">each one is managed by an individual instance. Each such instance</text>
+    <text class="text_small" x="30" y="205">uses a different port.</text>
+
+    <text class="text_small" x="10" y="225">6)</text>
+    <text class="text_small" x="30" y="225">No client application is allowed to connect to 'template0'.</text>
+
+  </g>
+
+</svg>
diff --git a/doc/src/sgml/images/directories-ink-svgo.svg b/doc/src/sgml/images/directories-ink-svgo.svg
new file mode 100644
index 0000000000..95fa76b9c6
--- /dev/null
+++ b/doc/src/sgml/images/directories-ink-svgo.svg
@@ -0,0 +1,164 @@
+<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; width="900" height="640" viewBox="0 0 900 640">
+  <title>
+    Directory structure of a cluster
+  </title>
+  <style>
+    .text_normal{font-style:normal;font-weight:400;font-size:16px;font-family:&quot;Open Sans&quot;,sans-serif;fill:#000}
+  </style>
+  <defs>
+    <symbol id="directory" stroke="blue" stroke-width=".3" fill="aqua">
+      <title>
+        Directory
+      </title>
+      <path d="M0 10h110v20H0z"/>
+      <path d="M0 10V8l3-3h35l3 3v2"/>
+    </symbol>
+    <symbol id="file" stroke="black" fill="none">
+      <title>
+        File
+      </title>
+      <path stroke="blue" d="M0 0h40v50H0z"/>
+      <path d="M5 10h20" stroke-dasharray="4 2"/>
+      <path d="M5 17h15" stroke-dasharray="6 2"/>
+      <path d="M5 24h25" stroke-dasharray="4 2"/>
+      <path d="M5 31h20" stroke-dasharray="5 2"/>
+    </symbol>
+  </defs>
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none"/>
+  <text x="200" y="50" font-weight="400" font-size="24" font-family="&quot;Open Sans&quot;,sans-serif">
+    Directory Structure
+  </text>
+  <g transform="translate(20 100)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      ... /pg/
+    </text>
+    <text x="300" y="26" class="text_normal">
+      An arbitrary directory
+    </text>
+  </g>
+  <g transform="translate(70 130)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      data/
+    </text>
+    <text x="250" y="26" class="text_normal">
+      Root of cluster &apos;data&apos; (see: PGDATA)
+    </text>
+  </g>
+  <g transform="translate(120 160)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      base/
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Subdirectory containing per-database subdirectories
+    </text>
+  </g>
+  <g transform="translate(170 190)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      1/
+    </text>
+    <text x="150" y="26" class="text_normal">
+      Subdirectory for data of first database &apos;template0&apos;
+    </text>
+  </g>
+  <g transform="translate(170 220)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      12992/
+    </text>
+    <text x="150" y="26" class="text_normal">
+      Subdirectory for data of second database &apos;template1&apos;
+    </text>
+  </g>
+  <g transform="translate(170 250)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      12999/
+    </text>
+    <text x="150" y="26" class="text_normal">
+      Subdirectory for data of third database &apos;postgres&apos;
+    </text>
+  </g>
+  <g transform="translate(170 280)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      nnnnn/
+    </text>
+    <text x="150" y="26" class="text_normal">
+      Optional: more subdirectories for databases, e.g. &apos;my_db&apos;
+    </text>
+  </g>
+  <g transform="translate(120 310)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      global/
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Subdirectory with information about Global SQL Objects
+    </text>
+  </g>
+  <g transform="translate(120 340)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      pg_wal/
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Subdirectory for Write Ahead Log files (&apos;pg_xlog&apos; before version 10)
+    </text>
+  </g>
+  <g transform="translate(120 370)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      pg_xact/
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Subdirectory for transaction commit status (&apos;pg_clog&apos; before version 10)
+    </text>
+  </g>
+  <g transform="translate(120 400)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      pg_tblspc/
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Subdirectory containing symbolic links to tablespaces
+    </text>
+  </g>
+  <g transform="translate(120 430)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      pg_... /
+    </text>
+    <text x="200" y="26" class="text_normal">
+      Some more subdirectories
+    </text>
+  </g>
+  <g transform="translate(120 465)">
+    <use xlink:href="#file"/>
+    <use xlink:href="#file" x="50"/>
+    <text x="200" y="26" class="text_normal">
+      &apos;postmaster.pid&apos; and other files with cluster-wide relevance
+    </text>
+  </g>
+  <g transform="translate(20 540)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      ... /xyz/
+    </text>
+    <text x="300" y="26" class="text_normal">
+      Same or another arbitrary directory
+    </text>
+  </g>
+  <g transform="translate(70 570)">
+    <use xlink:href="#directory"/>
+    <text x="10" y="26" class="text_normal">
+      cluster_2/
+    </text>
+    <text x="250" y="26" class="text_normal">
+      Root of another cluster &apos;cluster_2&apos;
+    </text>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/directories-ink.svg b/doc/src/sgml/images/directories-ink.svg
new file mode 100644
index 0000000000..4661ef13fb
--- /dev/null
+++ b/doc/src/sgml/images/directories-ink.svg
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.1"
+   width="900px"
+   height="640px"
+   viewBox="0 0 900 640"
+   id="svg303"
+   sodipodi:docname="directories-ink.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata307">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Directory structure of a cluster</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview305"
+     showgrid="false"
+     inkscape:zoom="0.36875"
+     inkscape:cx="450"
+     inkscape:cy="320"
+     inkscape:window-x="61"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg303" />
+  <title
+     id="title153">Directory structure of a cluster</title>
+  <style
+     type="text/css"
+     id="style155">
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  </style>
+  <defs
+     id="defs177">
+    <!--  Directory  -->
+    <symbol
+       id="directory"
+       stroke="blue"
+       stroke-width="0.3px"
+       fill="aqua">
+      <title
+         id="title157">Directory</title>
+      <rect
+         x="0"
+         y="10"
+         width="110"
+         height="20"
+         id="rect159" />
+      <path
+         d="M 0,10 l 0,-2 3,-3 35,0, 3,3  0,2"
+         id="path161" />
+    </symbol>
+    <!--  File  -->
+    <symbol
+       id="file"
+       stroke="black"
+       fill="none">
+      <title
+         id="title164">File</title>
+      <rect
+         x="0"
+         y="0"
+         width="40"
+         height="50"
+         stroke="blue"
+         id="rect166" />
+      <path
+         d="M 5,10 h 20"
+         stroke-dasharray="4 2"
+         id="path168" />
+      <path
+         d="M 5,17 h 15"
+         stroke-dasharray="6 2"
+         id="path170" />
+      <path
+         d="M 5,24 h 25"
+         stroke-dasharray="4 2"
+         id="path172" />
+      <path
+         d="M 5,31 h 20"
+         stroke-dasharray="5 2"
+         id="path174" />
+    </symbol>
+  </defs>
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect
+     x="1"
+     y="1"
+     rx="5"
+     width="99%"
+     height="99%"
+     stroke="black"
+     fill="none"
+     id="rect179" />
+  <!--  caption  -->
+  <text
+     x="200"
+     y="50"
+     class="text_big"
+     id="text181">Directory Structure</text>
+  <!--  the directories  -->
+  <g
+     transform="translate(20, 100)"
+     id="g189">
+    <use
+       xlink:href="#directory"
+       id="use183" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text185">... /pg/</text>
+    <text
+       x="300"
+       y="26"
+       class="text_normal"
+       id="text187">An arbitrary directory</text>
+  </g>
+  <g
+     transform="translate(70, 130)"
+     id="g197">
+    <use
+       xlink:href="#directory"
+       id="use191" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text193">data/</text>
+    <text
+       x="250"
+       y="26"
+       class="text_normal"
+       id="text195">Root of cluster 'data' (see: PGDATA)</text>
+  </g>
+  <g
+     transform="translate(120, 160)"
+     id="g205">
+    <use
+       xlink:href="#directory"
+       id="use199" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text201">base/</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text203">Subdirectory containing per-database subdirectories</text>
+  </g>
+  <!--  -->
+  <g
+     transform="translate(170, 190)"
+     id="g213">
+    <use
+       xlink:href="#directory"
+       id="use207" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text209">1/</text>
+    <text
+       x="150"
+       y="26"
+       class="text_normal"
+       id="text211">Subdirectory for data of first database 'template0'</text>
+  </g>
+  <g
+     transform="translate(170, 220)"
+     id="g221">
+    <use
+       xlink:href="#directory"
+       id="use215" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text217">12992/</text>
+    <text
+       x="150"
+       y="26"
+       class="text_normal"
+       id="text219">Subdirectory for data of second database 'template1'</text>
+  </g>
+  <g
+     transform="translate(170, 250)"
+     id="g229">
+    <use
+       xlink:href="#directory"
+       id="use223" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text225">12999/</text>
+    <text
+       x="150"
+       y="26"
+       class="text_normal"
+       id="text227">Subdirectory for data of third database 'postgres'</text>
+  </g>
+  <g
+     transform="translate(170, 280)"
+     id="g237">
+    <use
+       xlink:href="#directory"
+       id="use231" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text233">nnnnn/</text>
+    <text
+       x="150"
+       y="26"
+       class="text_normal"
+       id="text235">Optional: more subdirectories for databases, e.g. 'my_db'</text>
+  </g>
+  <g
+     transform="translate(120, 310)"
+     id="g245">
+    <use
+       xlink:href="#directory"
+       id="use239" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text241">global/</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text243">Subdirectory with information about Global SQL Objects</text>
+  </g>
+  <g
+     transform="translate(120, 340)"
+     id="g253">
+    <use
+       xlink:href="#directory"
+       id="use247" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text249">pg_wal/</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text251">Subdirectory for Write Ahead Log files ('pg_xlog' before version 10)</text>
+  </g>
+  <g
+     transform="translate(120, 370)"
+     id="g261">
+    <use
+       xlink:href="#directory"
+       id="use255" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text257">pg_xact/</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text259">Subdirectory for transaction commit status ('pg_clog' before version 10)</text>
+  </g>
+  <g
+     transform="translate(120, 400)"
+     id="g269">
+    <use
+       xlink:href="#directory"
+       id="use263" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text265">pg_tblspc/</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text267">Subdirectory containing symbolic links to tablespaces</text>
+  </g>
+  <g
+     transform="translate(120, 430)"
+     id="g277">
+    <use
+       xlink:href="#directory"
+       id="use271" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text273">pg_... /</text>
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text275">Some more subdirectories</text>
+  </g>
+  <g
+     transform="translate(120, 465)"
+     id="g285">
+    <use
+       xlink:href="#file"
+       x="0"
+       y="0"
+       id="use279" />
+    <use
+       xlink:href="#file"
+       x="50"
+       y="0"
+       id="use281" />
+    <text
+       x="200"
+       y="26"
+       class="text_normal"
+       id="text283">'postmaster.pid' and other files with cluster-wide relevance</text>
+  </g>
+  <!--  next cluster  -->
+  <g
+     transform="translate(20, 540)"
+     id="g293">
+    <use
+       xlink:href="#directory"
+       id="use287" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text289">... /xyz/</text>
+    <text
+       x="300"
+       y="26"
+       class="text_normal"
+       id="text291">Same or another arbitrary directory</text>
+  </g>
+  <g
+     transform="translate(70, 570)"
+     id="g301">
+    <use
+       xlink:href="#directory"
+       id="use295" />
+    <text
+       x="10"
+       y="26"
+       class="text_normal"
+       id="text297">cluster_2/</text>
+    <text
+       x="250"
+       y="26"
+       class="text_normal"
+       id="text299">Root of another cluster 'cluster_2'</text>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/directories-raw.svg b/doc/src/sgml/images/directories-raw.svg
new file mode 100644
index 0000000000..8869eb9390
--- /dev/null
+++ b/doc/src/sgml/images/directories-raw.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg";
+     xmlns:xlink="http://www.w3.org/1999/xlink";
+     version="1.1"
+     width="900px" height="640px"
+     viewBox="0 0 900 640">
+
+  <title>Directory structure of a cluster</title>
+
+  <style type="text/css">
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  </style>
+
+  <defs>
+
+    <!--  Directory  -->
+    <symbol id="directory" stroke="blue" stroke-width="0.3px" fill="aqua">
+      <title>Directory</title>
+      <rect x="0" y="10" width="110" height="20" />
+      <path d="M 0,10 l 0,-2 3,-3 35,0, 3,3  0,2" />
+    </symbol>
+
+    <!--  File  -->
+    <symbol id="file" stroke="black" fill="none" >
+      <title>File</title>
+      <rect x="0" y="0" width="40" height="50" stroke="blue" />
+      <path d="M 5,10 h 20" stroke-dasharray="4 2" />
+      <path d="M 5,17 h 15" stroke-dasharray="6 2" />
+      <path d="M 5,24 h 25" stroke-dasharray="4 2" />
+      <path d="M 5,31 h 20" stroke-dasharray="5 2" />
+    </symbol>
+
+  </defs>
+
+
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none" />
+
+  <!--  caption  -->
+  <text x="200" y="50"  class="text_big">Directory Structure</text>
+
+  <!--  the directories  -->
+  <g transform="translate(20, 100)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">... /pg/</text>
+    <text x="300" y="26" class="text_normal">An arbitrary directory</text>
+  </g>
+
+  <g transform="translate(70, 130)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">data/</text>
+    <text x="250" y="26" class="text_normal">Root of cluster 'data' (see: PGDATA)</text>
+  </g>
+
+  <g transform="translate(120, 160)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">base/</text>
+    <text x="200" y="26" class="text_normal">Subdirectory containing per-database subdirectories</text>
+  </g>
+
+  <!--  -->
+  <g transform="translate(170, 190)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">1/</text>
+    <text x="150" y="26" class="text_normal">Subdirectory for data of first database 'template0'</text>
+  </g>
+  <g transform="translate(170, 220)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">12992/</text>
+    <text x="150" y="26" class="text_normal">Subdirectory for data of second database 'template1'</text>
+  </g>
+  <g transform="translate(170, 250)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">12999/</text>
+    <text x="150" y="26" class="text_normal">Subdirectory for data of third database 'postgres'</text>
+  </g>
+  <g transform="translate(170, 280)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">nnnnn/</text>
+    <text x="150" y="26" class="text_normal">Optional: more subdirectories for databases, e.g. 'my_db'</text>
+  </g>
+
+  <g transform="translate(120, 310)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">global/</text>
+    <text x="200" y="26" class="text_normal">Subdirectory with information about Global SQL Objects</text>
+  </g>
+
+  <g transform="translate(120, 340)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">pg_wal/</text>
+    <text x="200" y="26" class="text_normal">Subdirectory for Write Ahead Log files ('pg_xlog' before version 10)</text>
+  </g>
+
+  <g transform="translate(120, 370)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">pg_xact/</text>
+    <text x="200" y="26" class="text_normal">Subdirectory for transaction commit status ('pg_clog' before version 10)</text>
+  </g>
+
+  <g transform="translate(120, 400)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">pg_tblspc/</text>
+    <text x="200" y="26" class="text_normal">Subdirectory containing symbolic links to tablespaces</text>
+  </g>
+
+  <g transform="translate(120, 430)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">pg_... /</text>
+    <text x="200" y="26" class="text_normal">Some more subdirectories</text>
+  </g>
+
+  <g transform="translate(120, 465)">
+    <use xlink:href="#file" x="0"   y="0"  />
+    <use xlink:href="#file" x="50"  y="0"  />
+    <text x="200" y="26" class="text_normal">'postmaster.pid' and other files with cluster-wide relevance</text>
+  </g>
+
+  <!--  next cluster  -->
+  <g transform="translate(20, 540)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">... /xyz/</text>
+    <text x="300" y="26" class="text_normal">Same or another arbitrary directory</text>
+  </g>
+
+  <g transform="translate(70, 570)">
+    <use xlink:href="#directory" />
+    <text x="10"  y="26" class="text_normal">cluster_2/</text>
+    <text x="250" y="26" class="text_normal">Root of another cluster 'cluster_2'</text>
+  </g>
+
+</svg>
diff --git a/doc/src/sgml/images/internal-objects-hierarchy-ink-svgo.svg b/doc/src/sgml/images/internal-objects-hierarchy-ink-svgo.svg
new file mode 100644
index 0000000000..4156bbc834
--- /dev/null
+++ b/doc/src/sgml/images/internal-objects-hierarchy-ink-svgo.svg
@@ -0,0 +1,83 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="720" height="430" viewBox="0 0 720 430">
+  <title>
+    Hierarchy of Internal Objects
+  </title>
+  <style>
+    .text_normal{font-style:normal;font-weight:400;font-size:16px;font-family:&quot;Open Sans&quot;,sans-serif;fill:#000}
+  </style>
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none"/>
+  <text x="200" y="40" font-weight="400" font-size="24" font-family="&quot;Open Sans&quot;,sans-serif">
+    Hierarchy of Internal Objects
+  </text>
+  <g fill="none">
+    <g transform="translate(350 240)">
+      <ellipse rx="320" ry="170" stroke="blue"/>
+      <text class="text_normal" x="-140" y="-130">
+        Cluster
+      </text>
+      <g transform="translate(40 -125)">
+        <ellipse rx="80" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-60" y="5">
+          Database Names
+        </text>
+      </g>
+      <g transform="translate(180 -70)">
+        <ellipse rx="60" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-40" y="5">
+          Tablespace
+        </text>
+      </g>
+      <g transform="translate(230 -5)">
+        <ellipse rx="80" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-70" y="5">
+          Replication Origins
+        </text>
+      </g>
+      <g transform="translate(200 70)">
+        <ellipse rx="78" ry="27" stroke="blue"/>
+        <text class="text_normal" x="-60" y="-3">
+          Subscription for
+        </text>
+        <text class="text_normal" x="-68" y="10">
+          Logical Replication
+        </text>
+      </g>
+      <g transform="translate(100 120)">
+        <ellipse rx="40" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-15" y="5">
+          Role
+        </text>
+      </g>
+    </g>
+    <g transform="translate(270 250)">
+      <ellipse rx="220" ry="110" stroke="blue" stroke-width="2"/>
+      <text class="text_normal" x="-60" y="-80">
+        Database
+      </text>
+      <g transform="translate(-150 -30)">
+        <ellipse rx="50" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-35" y="5">
+          Extension
+        </text>
+      </g>
+      <g transform="translate(-155 35)">
+        <ellipse rx="40" ry="20" stroke="blue"/>
+        <text class="text_normal" x="-35" y="5">
+          Collation
+        </text>
+      </g>
+      <g transform="translate(30 20)">
+        <ellipse rx="140" ry="70" stroke="blue"/>
+        <text class="text_normal" x="-80" y="-35">
+          Schema
+        </text>
+        <g transform="translate(20 10)">
+          <ellipse rx="90" ry="30" stroke="blue"/>
+          <text class="text_normal" x="-50" y="5">
+            Table, View, ...
+          </text>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/internal-objects-hierarchy-ink.svg b/doc/src/sgml/images/internal-objects-hierarchy-ink.svg
new file mode 100644
index 0000000000..cf03d6a701
--- /dev/null
+++ b/doc/src/sgml/images/internal-objects-hierarchy-ink.svg
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.1"
+   width="720px"
+   height="430px"
+   viewBox="0 0 720 430"
+   id="svg389"
+   sodipodi:docname="internal-objects-hierarchy-ink.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata395">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Hierarchy of Internal Objects</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs393" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="906"
+     inkscape:window-height="678"
+     id="namedview391"
+     showgrid="false"
+     inkscape:zoom="0.51944444"
+     inkscape:cx="360"
+     inkscape:cy="215"
+     inkscape:window-x="502"
+     inkscape:window-y="91"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg389" />
+  <title
+     id="title309">Hierarchy of Internal Objects</title>
+  <!-- common text classes -->
+  <style
+     type="text/css"
+     id="style311">
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  </style>
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect
+     x="1"
+     y="1"
+     rx="5"
+     width="99%"
+     height="99%"
+     stroke="black"
+     fill="none"
+     id="rect313" />
+  <text
+     class="text_big"
+     x="200"
+     y="40"
+     id="text315">Hierarchy of Internal Objects</text>
+  <!--  set centre of figure and default values -->
+  <g
+     transform="translate(350 240)"
+     fill="none"
+     id="g387">
+    <g
+       id="g353">
+      <ellipse
+         rx="320"
+         ry="170"
+         stroke="blue"
+         id="ellipse317" />
+      <text
+         class="text_normal"
+         x="-140"
+         y="-130"
+         id="text319">Cluster</text>
+      <g
+         transform="translate(40 -125)"
+         id="g325">
+        <ellipse
+           rx="80"
+           ry="20"
+           stroke="blue"
+           id="ellipse321" />
+        <text
+           class="text_normal"
+           x="-60"
+           y="5"
+           id="text323">Database Names</text>
+      </g>
+      <g
+         transform="translate(180 -70)"
+         id="g331">
+        <ellipse
+           rx="60"
+           ry="20"
+           stroke="blue"
+           id="ellipse327" />
+        <text
+           class="text_normal"
+           x="-40"
+           y="5"
+           id="text329">Tablespace</text>
+      </g>
+      <g
+         transform="translate(230 -5)"
+         id="g337">
+        <ellipse
+           rx="80"
+           ry="20"
+           stroke="blue"
+           id="ellipse333" />
+        <text
+           class="text_normal"
+           x="-70"
+           y="5"
+           id="text335">Replication Origins</text>
+      </g>
+      <g
+         transform="translate(200 70)"
+         id="g345">
+        <ellipse
+           rx="78"
+           ry="27"
+           stroke="blue"
+           id="ellipse339" />
+        <text
+           class="text_normal"
+           x="-60"
+           y="-3"
+           id="text341">Subscription for</text>
+        <text
+           class="text_normal"
+           x="-68"
+           y="10"
+           id="text343">Logical Replication</text>
+      </g>
+      <g
+         transform="translate(100 120)"
+         id="g351">
+        <ellipse
+           rx="40"
+           ry="20"
+           stroke="blue"
+           id="ellipse347" />
+        <text
+           class="text_normal"
+           x="-15"
+           y="5"
+           id="text349">Role</text>
+      </g>
+    </g>
+    <g
+       transform="translate(-80 10)"
+       id="g385">
+      <ellipse
+         rx="220"
+         ry="110"
+         stroke="blue"
+         stroke-width="2px"
+         id="ellipse355" />
+      <text
+         class="text_normal"
+         x="-60"
+         y="-80"
+         id="text357">Database</text>
+      <g
+         transform="translate(-120 -50)"
+         id="g383">
+        <g
+           transform="translate(-30 20)"
+           id="g363">
+          <ellipse
+             rx="50"
+             ry="20"
+             stroke="blue"
+             id="ellipse359" />
+          <text
+             class="text_normal"
+             x="-35"
+             y="5"
+             id="text361">Extension</text>
+        </g>
+        <g
+           transform="translate(-35 85)"
+           id="g369">
+          <ellipse
+             rx="40"
+             ry="20"
+             stroke="blue"
+             id="ellipse365" />
+          <text
+             class="text_normal"
+             x="-35"
+             y="5"
+             id="text367">Collation</text>
+        </g>
+        <g
+           transform="translate(150 70)"
+           id="g381">
+          <ellipse
+             rx="140"
+             ry="70"
+             stroke="blue"
+             id="ellipse371" />
+          <text
+             class="text_normal"
+             x="-80"
+             y="-35"
+             id="text373">Schema</text>
+          <g
+             transform="translate(20 10)"
+             id="g379">
+            <ellipse
+               rx="90"
+               ry="30"
+               stroke="blue"
+               id="ellipse375" />
+            <text
+               class="text_normal"
+               x="-50"
+               y="5"
+               id="text377">Table, View, ...</text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/internal-objects-hierarchy-raw.svg b/doc/src/sgml/images/internal-objects-hierarchy-raw.svg
new file mode 100644
index 0000000000..45387bbd9b
--- /dev/null
+++ b/doc/src/sgml/images/internal-objects-hierarchy-raw.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg";
+     xmlns:xlink="http://www.w3.org/1999/xlink";
+     version="1.1"
+     width="720px" height="430px"
+     viewBox="0 0 720 430" >
+
+  <title>Hierarchy of Internal Objects</title>
+
+  <!-- common text classes -->
+  <style type="text/css">
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  </style>
+
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none" />
+  <text class="text_big" x="200" y="40">Hierarchy of Internal Objects</text>
+
+
+  <!--  set centre of figure and default values -->
+  <g transform="translate(350 240)" fill="none">
+
+    <g>
+      <ellipse rx="320" ry="170" stroke="blue" />
+      <text class="text_normal" x="-140" y="-130">Cluster</text>
+
+      <g transform="translate(40 -125)">
+        <ellipse rx="80" ry="20" stroke="blue" />
+        <text class="text_normal" x="-60" y="5">Database Names</text>
+      </g>
+
+      <g transform="translate(180 -70)">
+        <ellipse rx="60" ry="20" stroke="blue" />
+        <text class="text_normal" x="-40" y="5">Tablespace</text>
+      </g>
+
+      <g transform="translate(230 -5)">
+        <ellipse rx="80" ry="20" stroke="blue" />
+        <text class="text_normal" x="-70" y="5">Replication Origins</text>
+      </g>
+
+      <g transform="translate(200 70)">
+        <ellipse rx="78" ry="27" stroke="blue" />
+        <text class="text_normal" x="-60" y="-3">Subscription for</text>
+        <text class="text_normal" x="-68" y="10">Logical Replication</text>
+      </g>
+
+      <g transform="translate(100 120)">
+        <ellipse rx="40" ry="20" stroke="blue" />
+        <text class="text_normal" x="-15" y="5">Role</text>
+      </g>
+
+    </g>
+
+    <g transform="translate(-80 10)">
+      <ellipse rx="220" ry="110" stroke="blue" stroke-width="2px" />
+      <text class="text_normal" x="-60" y="-80">Database</text>
+
+      <g transform="translate(-120 -50)">
+        <g transform="translate(-30 20)">
+          <ellipse rx="50" ry="20" stroke="blue" />
+          <text class="text_normal" x="-35" y="5">Extension</text>
+        </g>
+
+        <g transform="translate(-35 85)">
+          <ellipse rx="40" ry="20" stroke="blue" />
+          <text class="text_normal" x="-35" y="5">Collation</text>
+        </g>
+
+        <g transform="translate(150 70)">
+          <ellipse rx="140" ry="70" stroke="blue" />
+          <text class="text_normal" x="-80" y="-35">Schema</text>
+
+          <g  transform="translate(20 10)">
+            <ellipse rx="90" ry="30" stroke="blue" />
+            <text class="text_normal" x="-50" y="5">Table, View, ...</text>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+
+</svg>
diff --git a/doc/src/sgml/images/ram-proc-file-ink-svgo.svg b/doc/src/sgml/images/ram-proc-file-ink-svgo.svg
new file mode 100644
index 0000000000..bf638f6c63
--- /dev/null
+++ b/doc/src/sgml/images/ram-proc-file-ink-svgo.svg
@@ -0,0 +1,285 @@
+<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; width="900" height="600" viewBox="0 0 900 600">
+  <title>
+    PG Overall Server Architecture
+  </title>
+  <style>
+    .text_big{font-style:normal}.text_big,.text_comment,.text_normal,.text_small{font-weight:400;font-family:&quot;Open Sans&quot;,sans-serif;fill:#000}.text_normal,.text_small{font-style:normal}.text_small{font-size:12px}.text_normal{font-size:16px}.text_big{font-size:24px}.text_comment{font-style:italic;font-size:16px}
+  </style>
+  <defs>
+    <symbol id="note_200x20" stroke="black" fill="lightyellow">
+      <title>
+        UML Note (200 x 20 px)
+      </title>
+      <path d="M200 10v10H0V0h190v10h10L190 0"/>
+    </symbol>
+    <symbol id="note_250x20" stroke="black" fill="lightyellow">
+      <title>
+        UML Note (250 x 20 px)
+      </title>
+      <path d="M250 10v10H0V0h240v10h10L240 0"/>
+    </symbol>
+    <symbol id="note_100x35" stroke="black" fill="lightyellow">
+      <title>
+        UML Note (100 x 35 px)
+      </title>
+      <path d="M100 10v25H0V0h90v10h10L90 0"/>
+    </symbol>
+    <symbol id="note_170x50" stroke="black" fill="lightyellow">
+      <title>
+        UML Note (170 x 50 px)
+      </title>
+      <path d="M170 10v40H0V0h160v10h10L160 0"/>
+    </symbol>
+    <symbol id="state_300x120">
+      <title>
+        UML State, big
+      </title>
+      <rect width="300" height="120" rx="10" stroke="blue" fill="none"/>
+    </symbol>
+    <symbol id="state_350x120">
+      <title>
+        UML State, big
+      </title>
+      <rect width="350" height="120" rx="10" stroke="blue" fill="none"/>
+    </symbol>
+    <symbol id="disc" stroke="blue" fill="none">
+      <title>
+        Disc
+      </title>
+      <ellipse cx="51" cy="13" rx="50" ry="12"/>
+      <path d="M1 13v60"/>
+      <path d="M101 13v60"/>
+      <path d="M1 73a50 12 0 00100 0"/>
+    </symbol>
+    <symbol id="laptop" stroke="black" fill="none">
+      <title>
+        Laptop
+      </title>
+      <path d="M20 40V0h54v40l15 15H5l15-15h54"/>
+      <path d="M23 3h48v34H23z"/>
+      <path d="M30 10h20"/>
+      <path d="M30 15h25"/>
+      <path d="M30 20h10"/>
+      <path d="M30 30h20"/>
+      <path d="M25 50h45l2 2H22z"/>
+    </symbol>
+    <marker id="arrowhead_start" markerWidth="10" markerHeight="10" refX="0" refY="3" orient="auto">
+      <path d="M6 0L0 3l6 3" stroke="black" fill="none"/>
+    </marker>
+    <marker id="arrowhead_end" markerWidth="10" markerHeight="10" refX="6" refY="3" orient="auto">
+      <path d="M0 0l6 3-6 3" stroke="black" fill="none"/>
+    </marker>
+  </defs>
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none"/>
+  <text x="15" y="40" class="text_big">
+    Client
+  </text>
+  <text x="140" y="40" class="text_big">
+    Server
+  </text>
+  <use xlink:href="#laptop" x="5" y="210"/>
+  <g transform="translate(130 70)">
+    <use xlink:href="#state_350x120"/>
+    <text x="5" y="20" class="text_normal">
+      maintenance_work_mem (per connection)
+    </text>
+    <text x="5" y="45" class="text_normal">
+      work_mem (per query operation)
+    </text>
+    <text x="5" y="70" class="text_normal">
+      autovacuum_work_mem (per worker process)
+    </text>
+    <text x="5" y="95" class="text_normal">
+      temp_buffer (per connection)
+    </text>
+    <text x="5" y="110" class="text_normal">
+      ...
+    </text>
+    <use xlink:href="#note_200x20" x="140" y="-15"/>
+    <text x="150" class="text_comment">
+      Individual Memory
+    </text>
+  </g>
+  <g transform="translate(520 70)">
+    <use xlink:href="#state_300x120"/>
+    <text x="10" y="30" class="text_normal">
+      shared_buffers (heap and index)
+    </text>
+    <text x="10" y="70" class="text_normal">
+      wal_buffers (WAL records)
+    </text>
+    <text x="10" y="100" class="text_normal">
+      ...
+    </text>
+    <use xlink:href="#note_250x20" x="40" y="-15"/>
+    <text x="50" class="text_comment">
+      Shared Memory (per Cluster)
+    </text>
+  </g>
+  <path stroke="blue" fill="none" d="M190 215h200v30H190z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(190 215)">
+    Postmaster process
+  </text>
+  <path d="M90 230h85" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(140 230)">
+    <circle r="8" stroke="black" fill="lightyellow"/>
+    <text x="-4" y="4" class="text_small">
+      1
+    </text>
+  </g>
+  <path stroke="blue" fill="none" d="M150 315h370v30H150z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(150 315)">
+    Backend processes (one per connection)
+  </text>
+  <path d="M155 315v-5h370v30h-5" stroke="blue" fill="none"/>
+  <path d="M160 310v-5h370v30h-5" stroke="blue" fill="none"/>
+  <path d="M90 240l63 63" stroke="black" fill="none" marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(140 290)">
+    <circle r="8" stroke="black" fill="lightyellow"/>
+    <text x="-4" y="4" class="text_small">
+      3
+    </text>
+  </g>
+  <path d="M360 250v50" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(190 255)">
+    <use xlink:href="#note_250x20"/>
+    <text x="10" y="15" class="text_comment">
+      Creates backend processes
+    </text>
+  </g>
+  <g transform="translate(360 281)">
+    <circle r="8" stroke="black" fill="lightyellow"/>
+    <text x="-4" y="4" class="text_small">
+      2
+    </text>
+  </g>
+  <path d="M460 300V200" stroke="black" fill="none" marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <path d="M498 300V95h30" stroke="black" fill="none" marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <path d="M508 300V135h20" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path stroke="blue" fill="none" d="M550 220h120v30H550z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(550 220)">
+    WAL Writer
+  </text>
+  <path d="M590 150v65" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M590 255v230" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path stroke="blue" fill="none" d="M610 340h140v30H610z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(610 340)">
+    Checkpointer
+  </text>
+  <path d="M740 110v220" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M605 355H475v130" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M700 330V150" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(570 330)">
+    <use xlink:href="#note_100x35" x="50" y="-50"/>
+    <text x="60" y="-35" class="text_comment">
+      Checkpoint
+    </text>
+    <text x="60" y="-20" class="text_comment">
+      Record
+    </text>
+  </g>
+  <path stroke="blue" fill="none" d="M610 380h180v30H610z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(610 380)">
+    Background Writer
+  </text>
+  <path d="M770 110v260" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M605 395H485v90" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path stroke="blue" fill="none" d="M610 420h180v30H610z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(610 420)">
+    WAL Archiver
+  </text>
+  <path d="M620 485l30-30" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M740 455v30" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path stroke="blue" fill="none" d="M135 380h120v30H135z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(135 380)">
+    AutoVacuum
+  </text>
+  <path d="M140 380v-5h120v30h-5" stroke="blue" fill="none"/>
+  <path d="M145 375v-5h120v30h-5" stroke="blue" fill="none"/>
+  <path stroke="blue" fill="none" d="M135 430h120v30H135z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(135 430)">
+    Log Writer
+  </text>
+  <path stroke="blue" fill="none" d="M290 370h140v30H290z"/>
+  <text x="10" y="20" class="text_normal" transform="translate(290 370)">
+    Stats Collector
+  </text>
+  <g transform="translate(145 490)">
+    <use xlink:href="#disc"/>
+    <text x="35" y="45" class="text_normal">
+      Log
+    </text>
+    <text x="20" y="60" class="text_small">
+      text lines,
+    </text>
+    <text x="20" y="75" class="text_small">
+      sequential
+    </text>
+  </g>
+  <path d="M195 465v20" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(410 490)">
+    <use xlink:href="#disc"/>
+    <text x="10" y="40" class="text_normal">
+      Heap and
+    </text>
+    <text x="25" y="55" class="text_normal">
+      Index
+    </text>
+    <text x="15" y="70" class="text_small">
+      binary blocks,
+    </text>
+    <text x="30" y="80" class="text_small">
+      random
+    </text>
+  </g>
+  <path d="M450 485V350" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(295 420)">
+    <use xlink:href="#note_170x50"/>
+    <text x="5" y="15" class="text_comment">
+      Read heap and index
+    </text>
+    <text x="5" y="30" class="text_comment">
+      pages and transfer
+    </text>
+    <text x="5" y="45" class="text_comment">
+      them to shared_buffers
+    </text>
+  </g>
+  <g transform="translate(550 490)">
+    <use xlink:href="#disc"/>
+    <text x="30" y="45" class="text_normal">
+      WAL
+    </text>
+    <text x="10" y="60" class="text_small">
+      binary records,
+    </text>
+    <text x="20" y="75" class="text_small">
+      sequential
+    </text>
+  </g>
+  <g transform="translate(690 490)">
+    <use xlink:href="#disc"/>
+    <text x="16" y="45" class="text_normal">
+      Archived
+    </text>
+    <text x="36" y="60" class="text_normal">
+      WAL
+    </text>
+  </g>
+  <path d="M110 20v550" stroke="black" fill="none"/>
+  <g transform="rotate(90 -33.5 156.5)">
+    <use xlink:href="#note_200x20"/>
+    <text class="text_comment" x="10" y="15">
+      Via TCP/IP or socket
+    </text>
+  </g>
+  <text class="text_big" x="95" transform="rotate(90 425 425)">
+    RAM
+  </text>
+  <text class="text_big" x="250" transform="rotate(90 425 425)">
+    PROCESSES
+  </text>
+  <text class="text_big" x="500" transform="rotate(90 425 425)">
+    FILES
+  </text>
+</svg>
diff --git a/doc/src/sgml/images/ram-proc-file-ink.svg b/doc/src/sgml/images/ram-proc-file-ink.svg
new file mode 100644
index 0000000000..6c960702a0
--- /dev/null
+++ b/doc/src/sgml/images/ram-proc-file-ink.svg
@@ -0,0 +1,841 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.1"
+   width="900px"
+   height="600px"
+   viewBox="0 0 900 600"
+   id="svg701"
+   sodipodi:docname="ram-proc-file-ink.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata705">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>PG Overall Server Architecture</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="846"
+     inkscape:window-height="675"
+     id="namedview703"
+     showgrid="false"
+     inkscape:zoom="0.39333333"
+     inkscape:cx="450"
+     inkscape:cy="300"
+     inkscape:window-x="503"
+     inkscape:window-y="91"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg701" />
+  <title
+     id="title397">PG Overall Server Architecture</title>
+  <style
+     type="text/css"
+     id="style399">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:12px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  </style>
+  <defs
+     id="defs465">
+    <!-- Some notes in different sizes  -->
+    <symbol
+       id="note_200x20"
+       stroke="black"
+       fill="lightyellow">
+      <title
+         id="title401">UML Note (200 x 20 px)</title>
+      <path
+         d="M 200,10 v 10 h -200 v -20 h 190 v 10 h 10 l -10,-10"
+         id="path403" />
+    </symbol>
+    <symbol
+       id="note_250x20"
+       stroke="black"
+       fill="lightyellow">
+      <title
+         id="title406">UML Note (250 x 20 px)</title>
+      <path
+         d="M 250,10 v 10 h -250 v -20 h 240 v 10 h 10 l -10,-10"
+         id="path408" />
+    </symbol>
+    <symbol
+       id="note_100x35"
+       stroke="black"
+       fill="lightyellow">
+      <title
+         id="title411">UML Note (100 x 35 px)</title>
+      <path
+         d="M 100,10 v 25 h -100 v -35 h 90 v 10 h 10 l -10,-10"
+         id="path413" />
+    </symbol>
+    <symbol
+       id="note_170x50"
+       stroke="black"
+       fill="lightyellow">
+      <title
+         id="title416">UML Note (170 x 50 px)</title>
+      <path
+         d="M 170,10 v 40 h -170 v -50 h 160 v 10 h 10 l -10,-10"
+         id="path418" />
+    </symbol>
+    <!--  UML states (used for buffers) -->
+    <symbol
+       id="state_300x120">
+      <title
+         id="title421">UML State, big</title>
+      <rect
+         x="0"
+         y="0"
+         width="300"
+         height="120"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         id="rect423" />
+    </symbol>
+    <symbol
+       id="state_350x120">
+      <title
+         id="title426">UML State, big</title>
+      <rect
+         x="0"
+         y="0"
+         width="350"
+         height="120"
+         rx="10"
+         stroke="blue"
+         fill="none"
+         id="rect428" />
+    </symbol>
+    <!-- Discs  -->
+    <symbol
+       id="disc"
+       stroke="blue"
+       fill="none">
+      <title
+         id="title431">Disc</title>
+      <ellipse
+         cx="51"
+         cy="13"
+         rx="50"
+         ry="12"
+         id="ellipse433" />
+      <!-- top -->
+      <path
+         d="M 1,13 v 60"
+         id="path435" />
+      <!-- left -->
+      <path
+         d="M 101,13 v 60"
+         id="path437" />
+      <!-- right -->
+      <path
+         d="M 1,73 A 50, 12, 0, 0, 0, 101,73"
+         id="path439" />
+      <!-- bottom -->
+    </symbol>
+    <!--  Laptop  -->
+    <symbol
+       id="laptop"
+       stroke="black"
+       fill="none">
+      <title
+         id="title442">Laptop</title>
+      <path
+         d="M 20,40 v -40 h 54 v 40 l 15,15 h -84 l 15,-15 h 54"
+         id="path444" />
+      <rect
+         x="23"
+         y="3"
+         width="48"
+         height="34"
+         id="rect446" />
+      <!-- symbolize some lines -->
+      <path
+         d="M 30,10 h 20"
+         id="path448" />
+      <path
+         d="M 30,15 h 25"
+         id="path450" />
+      <path
+         d="M 30,20 h 10"
+         id="path452" />
+      <path
+         d="M 30,30 h 20"
+         id="path454" />
+      <!-- symbolize keyboard -->
+      <path
+         d="M 25,50 h 45 l 2,2 h -50 z "
+         id="path456" />
+    </symbol>
+    <!--  marker start/end -->
+    <marker
+       id="arrowhead_start"
+       markerWidth="10"
+       markerHeight="10"
+       refX="0"
+       refY="3"
+       orient="auto">
+      <path
+         d="M 6,0 l -6,3 l 6,3"
+         stroke="black"
+         fill="none"
+         id="path459" />
+    </marker>
+    <marker
+       id="arrowhead_end"
+       markerWidth="10"
+       markerHeight="10"
+       refX="6"
+       refY="3"
+       orient="auto">
+      <path
+         d="M 0,0 l 6,3 l -6,3"
+         stroke="black"
+         fill="none"
+         id="path462" />
+    </marker>
+  </defs>
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect
+     x="1"
+     y="1"
+     rx="5"
+     width="99%"
+     height="99%"
+     stroke="black"
+     fill="none"
+     id="rect467" />
+  <!-- caption, client side -->
+  <text
+     x="15"
+     y="40"
+     class="text_big"
+     id="text469">Client</text>
+  <text
+     x="140"
+     y="40"
+     class="text_big"
+     id="text471">Server</text>
+  <use
+     xlink:href="#laptop"
+     x="5"
+     y="210"
+     id="use473" />
+  <!--  individual memory -->
+  <g
+     transform="translate(130, 70)"
+     id="g491">
+    <use
+       xlink:href="#state_350x120"
+       x="0"
+       y="0"
+       id="use475" />
+    <text
+       x="5"
+       y="20"
+       class="text_normal"
+       id="text477">maintenance_work_mem (per connection)</text>
+    <text
+       x="5"
+       y="45"
+       class="text_normal"
+       id="text479">work_mem (per query operation)</text>
+    <text
+       x="5"
+       y="70"
+       class="text_normal"
+       id="text481">autovacuum_work_mem (per worker process)</text>
+    <text
+       x="5"
+       y="95"
+       class="text_normal"
+       id="text483">temp_buffer (per connection)</text>
+    <text
+       x="5"
+       y="110"
+       class="text_normal"
+       id="text485">...</text>
+    <use
+       xlink:href="#note_200x20"
+       x="140"
+       y="-15"
+       id="use487" />
+    <text
+       x="150"
+       y="0"
+       class="text_comment"
+       id="text489">Individual Memory</text>
+  </g>
+  <!--  shared memory -->
+  <g
+     transform="translate(520, 70)"
+     id="g505">
+    <use
+       xlink:href="#state_300x120"
+       x="0"
+       y="0"
+       id="use493" />
+    <text
+       x="10"
+       y="30"
+       class="text_normal"
+       id="text495">shared_buffers (heap and index)</text>
+    <text
+       x="10"
+       y="70"
+       class="text_normal"
+       id="text497">wal_buffers (WAL records)</text>
+    <text
+       x="10"
+       y="100"
+       class="text_normal"
+       id="text499">...</text>
+    <use
+       xlink:href="#note_250x20"
+       x="40"
+       y="-15"
+       id="use501" />
+    <text
+       x="50"
+       y="0"
+       class="text_comment"
+       id="text503">Shared Memory (per Cluster)</text>
+  </g>
+  <!-- postmaster  -->
+  <g
+     transform="translate(190, 215)"
+     id="g511">
+    <rect
+       width="200"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect507" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text509">Postmaster process</text>
+  </g>
+  <path
+     d="M 90,230 h 85"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path513" />
+  <g
+     transform="translate(140, 230)"
+     id="g519">
+    <circle
+       r="8"
+       stroke="black"
+       fill="lightyellow"
+       id="circle515" />
+    <text
+       x="-4"
+       y="4"
+       class="text_small"
+       id="text517">1</text>
+  </g>
+  <!-- backend processes -->
+  <g
+     transform="translate(150, 315)"
+     id="g529">
+    <rect
+       width="370"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect521" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text523">Backend processes (one per connection)</text>
+    <path
+       d="M 5,0 v -5 h 370 v 30 h -5"
+       stroke="blue"
+       fill="none"
+       id="path525" />
+    <path
+       d="M 10,-5 v -5 h 370 v 30 h -5"
+       stroke="blue"
+       fill="none"
+       id="path527" />
+  </g>
+  <path
+     d="M 90,240 153,303"
+     stroke="black"
+     fill="none"
+     marker-start="url(#arrowhead_start)"
+     marker-end="url(#arrowhead_end)"
+     id="path531" />
+  <g
+     transform="translate(140, 290)"
+     id="g537">
+    <circle
+       r="8"
+       stroke="black"
+       fill="lightyellow"
+       id="circle533" />
+    <text
+       x="-4"
+       y="4"
+       class="text_small"
+       id="text535">3</text>
+  </g>
+  <!-- connection between postmaster and backend processes  -->
+  <path
+     d="M 360,250 v 50"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path539" />
+  <g
+     transform="translate(190, 255)"
+     id="g545">
+    <use
+       xlink:href="#note_250x20"
+       id="use541" />
+    <text
+       x="10"
+       y="15"
+       class="text_comment"
+       id="text543">Creates backend processes</text>
+  </g>
+  <g
+     transform="translate(360, 281)"
+     id="g551">
+    <circle
+       r="8"
+       stroke="black"
+       fill="lightyellow"
+       id="circle547" />
+    <text
+       x="-4"
+       y="4"
+       class="text_small"
+       id="text549">2</text>
+  </g>
+  <!-- backend process' access to individual memory -->
+  <path
+     d="M 460,300 v -100"
+     stroke="black"
+     fill="none"
+     marker-start="url(#arrowhead_start)"
+     marker-end="url(#arrowhead_end)"
+     id="path553" />
+  <!-- its access to shared buffers and WAL buffers -->
+  <path
+     d="M 498,300 v -205 h 30"
+     stroke="black"
+     fill="none"
+     marker-start="url(#arrowhead_start)"
+     marker-end="url(#arrowhead_end)"
+     id="path555" />
+  <path
+     d="M 508,300 v -165 h 20"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path557" />
+  <!-- WAL writer  -->
+  <g
+     transform="translate(550, 220)"
+     id="g563">
+    <rect
+       width="120"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect559" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text561">WAL Writer</text>
+  </g>
+  <path
+     d="M 590,150 v 65"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path565" />
+  <path
+     d="M 590,255 v 230"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path567" />
+  <!-- Checkpoiner -->
+  <g
+     transform="translate(610, 340)"
+     id="g573">
+    <rect
+       width="140"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect569" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text571">Checkpointer</text>
+  </g>
+  <path
+     d="M 740,110 v 220"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path575" />
+  <path
+     d="M 605,355 h -130 v 130"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path577" />
+  <path
+     d="M 700,330 v -180"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path579" />
+  <g
+     transform="translate(570, 330)"
+     id="g587">
+    <use
+       xlink:href="#note_100x35"
+       x="50"
+       y="-50"
+       id="use581" />
+    <text
+       x="60"
+       y="-35"
+       class="text_comment"
+       id="text583">Checkpoint</text>
+    <text
+       x="60"
+       y="-20"
+       class="text_comment"
+       id="text585">Record</text>
+  </g>
+  <!-- BG writer  -->
+  <g
+     transform="translate(610, 380)"
+     id="g593">
+    <rect
+       width="180"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect589" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text591">Background Writer</text>
+  </g>
+  <path
+     d="M 770,110 v 260"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path595" />
+  <path
+     d="M 605,395 h -120 v 90"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path597" />
+  <!-- Archiver  -->
+  <g
+     transform="translate(610, 420)"
+     id="g603">
+    <rect
+       width="180"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect599" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text601">WAL Archiver</text>
+  </g>
+  <path
+     d="M 620,485 l 30,-30"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path605" />
+  <path
+     d="M 740,455 v 30"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path607" />
+  <!-- Vacuum  -->
+  <g
+     transform="translate(135, 380)"
+     id="g617">
+    <rect
+       width="120"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect609" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text611">AutoVacuum</text>
+    <path
+       d="M 5,0 v -5 h 120 v 30 h -5"
+       stroke="blue"
+       fill="none"
+       id="path613" />
+    <path
+       d="M 10,-5 v -5 h 120 v 30 h -5"
+       stroke="blue"
+       fill="none"
+       id="path615" />
+  </g>
+  <!-- Log Writer -->
+  <g
+     transform="translate(135, 430)"
+     id="g623">
+    <rect
+       width="120"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect619" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text621">Log Writer</text>
+  </g>
+  <!-- Stats Collector (135, 460) -->
+  <g
+     transform="translate(290, 370)"
+     id="g629">
+    <rect
+       width="140"
+       height="30"
+       stroke="blue"
+       fill="none"
+       id="rect625" />
+    <text
+       x="10"
+       y="20"
+       class="text_normal"
+       id="text627">Stats Collector</text>
+  </g>
+  <!--       -->
+  <!-- files -->
+  <!--       -->
+  <g
+     transform="translate(145, 490)"
+     id="g639">
+    <use
+       xlink:href="#disc"
+       id="use631" />
+    <text
+       x="35"
+       y="45"
+       class="text_normal"
+       id="text633">Log</text>
+    <text
+       x="20"
+       y="60"
+       class="text_small"
+       id="text635">text lines,</text>
+    <text
+       x="20"
+       y="75"
+       class="text_small"
+       id="text637">sequential</text>
+  </g>
+  <path
+     d="M 195,465 v 20"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path641" />
+  <g
+     transform="translate(410, 490)"
+     id="g653">
+    <use
+       xlink:href="#disc"
+       id="use643" />
+    <text
+       x="10"
+       y="40"
+       class="text_normal"
+       id="text645">Heap and</text>
+    <text
+       x="25"
+       y="55"
+       class="text_normal"
+       id="text647">Index</text>
+    <text
+       x="15"
+       y="70"
+       class="text_small"
+       id="text649">binary blocks,</text>
+    <text
+       x="30"
+       y="80"
+       class="text_small"
+       id="text651">random</text>
+  </g>
+  <path
+     d="M 450,485 v -135"
+     stroke="black"
+     fill="none"
+     marker-end="url(#arrowhead_end)"
+     id="path655" />
+  <g
+     transform="translate(295, 420)"
+     id="g665">
+    <use
+       xlink:href="#note_170x50"
+       id="use657" />
+    <text
+       x="5"
+       y="15"
+       class="text_comment"
+       id="text659">Read heap and index</text>
+    <text
+       x="5"
+       y="30"
+       class="text_comment"
+       id="text661">pages and transfer</text>
+    <text
+       x="5"
+       y="45"
+       class="text_comment"
+       id="text663">them to shared_buffers</text>
+  </g>
+  <g
+     transform="translate(550, 490)"
+     id="g675">
+    <use
+       xlink:href="#disc"
+       id="use667" />
+    <text
+       x="30"
+       y="45"
+       class="text_normal"
+       id="text669">WAL</text>
+    <text
+       x="10"
+       y="60"
+       class="text_small"
+       id="text671">binary records,</text>
+    <text
+       x="20"
+       y="75"
+       class="text_small"
+       id="text673">sequential</text>
+  </g>
+  <g
+     transform="translate(690, 490)"
+     id="g683">
+    <use
+       xlink:href="#disc"
+       id="use677" />
+    <text
+       x="16"
+       y="45"
+       class="text_normal"
+       id="text679">Archived</text>
+    <text
+       x="36"
+       y="60"
+       class="text_normal"
+       id="text681">WAL</text>
+  </g>
+  <!-- boarder between client and server side -->
+  <path
+     d="M 110,20 v 550"
+     stroke="black"
+     fill="none"
+     id="path685" />
+  <g
+     transform="translate(123, 190) rotate(90)"
+     id="g691">
+    <use
+       xlink:href="#note_200x20"
+       id="use687" />
+    <text
+       class="text_comment"
+       x="10"
+       y="15"
+       id="text689">Via TCP/IP or socket</text>
+  </g>
+  <!-- right side -->
+  <g
+     transform="translate(850, 0) rotate(90)"
+     id="g699">
+    <text
+       class="text_big"
+       x="95"
+       id="text693">RAM</text>
+    <text
+       class="text_big"
+       x="250"
+       id="text695">PROCESSES</text>
+    <text
+       class="text_big"
+       x="500"
+       id="text697">FILES</text>
+  </g>
+</svg>
diff --git a/doc/src/sgml/images/ram-proc-file-raw.svg b/doc/src/sgml/images/ram-proc-file-raw.svg
new file mode 100644
index 0000000000..26eacde411
--- /dev/null
+++ b/doc/src/sgml/images/ram-proc-file-raw.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg";
+     xmlns:xlink="http://www.w3.org/1999/xlink";
+     version="1.1"
+     width="900px" height="600px"
+     viewBox="0 0 900 600">
+
+  <title>PG Overall Server Architecture</title>
+
+  <style type="text/css">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:12px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:24px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:16px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  </style>
+
+  <defs>
+
+    <!-- Some notes in different sizes  -->
+    <symbol id="note_200x20" stroke="black" fill="lightyellow">
+      <title>UML Note (200 x 20 px)</title>
+      <path d="M 200,10 v 10 h -200 v -20 h 190 v 10 h 10 l -10,-10" />
+    </symbol>
+    <symbol id="note_250x20" stroke="black" fill="lightyellow">
+      <title>UML Note (250 x 20 px)</title>
+      <path d="M 250,10 v 10 h -250 v -20 h 240 v 10 h 10 l -10,-10" />
+    </symbol>
+    <symbol id="note_100x35" stroke="black" fill="lightyellow">
+      <title>UML Note (100 x 35 px)</title>
+      <path d="M 100,10 v 25 h -100 v -35 h 90 v 10 h 10 l -10,-10" />
+    </symbol>
+    <symbol id="note_170x50" stroke="black" fill="lightyellow">
+      <title>UML Note (170 x 50 px)</title>
+      <path d="M 170,10 v 40 h -170 v -50 h 160 v 10 h 10 l -10,-10" />
+    </symbol>
+
+    <!--  UML states (used for buffers) -->
+    <symbol id="state_300x120">
+      <title>UML State, big</title>
+      <rect x="0" y="0" width="300" height="120" rx="10" stroke="blue" fill="none"/>
+    </symbol>
+    <symbol id="state_350x120">
+      <title>UML State, big</title>
+      <rect x="0" y="0" width="350" height="120" rx="10" stroke="blue" fill="none"/>
+    </symbol>
+
+    <!-- Discs  -->
+    <symbol id="disc" stroke="blue" fill="none" >
+      <title>Disc</title>
+      <ellipse cx="51" cy="13" rx="50" ry="12" />      <!-- top -->
+      <path    d="M 1,13 v 60" />                      <!-- left -->
+      <path    d="M 101,13 v 60" />                    <!-- right -->
+      <path    d="M 1,73 A 50, 12, 0, 0, 0, 101,73" /> <!-- bottom -->
+    </symbol>
+
+    <!--  Laptop  -->
+    <symbol id="laptop" stroke="black" fill="none" >
+      <title>Laptop</title>
+      <path d="M 20,40 v -40 h 54 v 40 l 15,15 h -84 l 15,-15 h 54" />
+      <rect x="23" y="3" width="48" height="34" />
+      <!-- symbolize some lines -->
+      <path d="M 30,10 h 20" />
+      <path d="M 30,15 h 25" />
+      <path d="M 30,20 h 10" />
+      <path d="M 30,30 h 20" />
+      <!-- symbolize keyboard -->
+      <path d="M 25,50 h 45 l 2,2 h -50 z " />
+    </symbol>
+
+    <!--  marker start/end -->
+    <marker id="arrowhead_start"
+            markerWidth="10"
+            markerHeight="10"
+            refX="0"
+            refY="3"
+            orient="auto">
+      <path d="M 6,0 l -6,3 l 6,3" stroke="black" fill="none" />
+    </marker>
+    <marker id="arrowhead_end"
+            markerWidth="10"
+            markerHeight="10"
+            refX="6"
+            refY="3"
+            orient="auto">
+      <path d="M 0,0 l 6,3 l -6,3" stroke="black" fill="none" />
+    </marker>
+
+  </defs>
+
+
+  <!--  start of rendering area  -->
+  <!--  enclosing rectangle  -->
+  <rect x="1" y="1" rx="5" width="99%" height="99%" stroke="black" fill="none" />
+
+  <!-- caption, client side -->
+  <text x="15" y="40"  class="text_big">Client</text>
+  <text x="140" y="40" class="text_big">Server</text>
+  <use xlink:href="#laptop" x="5" y="210" />
+
+
+  <!--  individual memory -->
+  <g transform="translate(130, 70)">
+    <use xlink:href="#state_350x120" x="0" y="0" />
+    <text x="5" y="20"  class="text_normal">maintenance_work_mem (per connection)</text>
+    <text x="5" y="45"  class="text_normal">work_mem (per query operation)</text>
+    <text x="5" y="70"  class="text_normal">autovacuum_work_mem (per worker process)</text>
+    <text x="5" y="95" class="text_normal">temp_buffer (per connection)</text>
+    <text x="5" y="110" class="text_normal">...</text>
+    <use xlink:href="#note_200x20" x="140" y="-15" />
+    <text x="150" y="0"  class="text_comment">Individual Memory</text>
+  </g>
+
+  <!--  shared memory -->
+  <g transform="translate(520, 70)">
+    <use xlink:href="#state_300x120" x="0" y="0" />
+    <text x="10" y="30" class="text_normal">shared_buffers (heap and index)</text>
+    <text x="10" y="70" class="text_normal">wal_buffers (WAL records)</text>
+    <text x="10" y="100" class="text_normal">...</text>
+    <use xlink:href="#note_250x20" x="40" y="-15" />
+    <text x="50" y="0"  class="text_comment">Shared Memory (per Cluster)</text>
+  </g>
+
+  <!-- postmaster  -->
+  <g transform="translate(190, 215)">
+    <rect width="200" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Postmaster process</text>
+  </g>
+  <path d="M 90,230 h 85" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(140, 230)">
+    <circle r="8" stroke="black" fill="lightyellow" />
+    <text x="-4" y="4" class="text_small">1</text>
+  </g>
+
+  <!-- backend processes -->
+  <g transform="translate(150, 315)">
+    <rect width="370" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Backend processes (one per connection)</text>
+    <path d="M 5,0 v -5 h 370 v 30 h -5" stroke="blue" fill="none" />
+    <path d="M 10,-5 v -5 h 370 v 30 h -5" stroke="blue" fill="none" />
+  </g>
+
+  <path d="M 90,240 153,303" stroke="black" fill="none"
+        marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(140, 290)">
+    <circle r="8" stroke="black" fill="lightyellow" />
+    <text x="-4" y="4" class="text_small">3</text>
+  </g>
+
+  <!-- connection between postmaster and backend processes  -->
+  <path d="M 360,250 v 50" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(190, 255)">
+    <use xlink:href="#note_250x20" />
+    <text x="10" y="15" class="text_comment">Creates backend processes</text>
+  </g>
+  <g transform="translate(360, 281)">
+    <circle r="8" stroke="black" fill="lightyellow" />
+    <text x="-4" y="4" class="text_small">2</text>
+  </g>
+
+  <!-- backend process' access to individual memory -->
+  <path d="M 460,300 v -100" stroke="black" fill="none"
+        marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <!-- its access to shared buffers and WAL buffers -->
+  <path d="M 498,300 v -205 h 30" stroke="black" fill="none"
+        marker-start="url(#arrowhead_start)" marker-end="url(#arrowhead_end)"/>
+  <path d="M 508,300 v -165 h 20" stroke="black" fill="none"
+        marker-end="url(#arrowhead_end)"/>
+
+  <!-- WAL writer  -->
+  <g transform="translate(550, 220)">
+    <rect width="120" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">WAL Writer</text>
+  </g>
+  <path d="M 590,150 v 65" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M 590,255 v 230" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+
+  <!-- Checkpoiner -->
+  <g transform="translate(610, 340)">
+    <rect width="140" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Checkpointer</text>
+  </g>
+  <path d="M 740,110 v 220" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M 605,355 h -130 v 130" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M 700,330 v -180" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <g transform="translate(570, 330)">
+    <use xlink:href="#note_100x35" x="50" y="-50" />
+    <text x="60" y="-35"  class="text_comment">Checkpoint</text>
+    <text x="60" y="-20"  class="text_comment">Record</text>
+  </g>
+
+  <!-- BG writer  -->
+  <g transform="translate(610, 380)">
+    <rect width="180" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Background Writer</text>
+  </g>
+  <path d="M 770,110 v 260" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M 605,395 h -120 v 90" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+
+  <!-- Archiver  -->
+  <g transform="translate(610, 420)">
+    <rect width="180" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">WAL Archiver</text>
+  </g>
+  <path d="M 620,485 l 30,-30" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+  <path d="M 740,455 v 30" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+
+  <!-- Vacuum  -->
+  <g transform="translate(135, 380)">
+    <rect width="120" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">AutoVacuum</text>
+    <path d="M 5,0 v -5 h 120 v 30 h -5" stroke="blue" fill="none" />
+    <path d="M 10,-5 v -5 h 120 v 30 h -5" stroke="blue" fill="none" />
+  </g>
+
+  <!-- Log Writer -->
+  <g transform="translate(135, 430)">
+    <rect width="120" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Log Writer</text>
+  </g>
+
+  <!-- Stats Collector (135, 460) -->
+  <g transform="translate(290, 370)">
+    <rect width="140" height="30" stroke="blue" fill="none" />
+    <text x="10" y="20" class="text_normal">Stats Collector</text>
+  </g>
+
+  <!--       -->
+  <!-- files -->
+  <!--       -->
+  <g transform="translate(145, 490)">
+    <use xlink:href="#disc" />
+    <text x="35" y="45" class="text_normal">Log</text>
+    <text x="20" y="60" class="text_small">text lines,</text>
+    <text x="20" y="75" class="text_small">sequential</text>
+  </g>
+  <path d="M 195,465 v 20" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+
+  <g transform="translate(410, 490)">
+    <use xlink:href="#disc" />
+    <text x="10" y="40" class="text_normal">Heap and</text>
+    <text x="25" y="55" class="text_normal">Index</text>
+    <text x="15" y="70" class="text_small">binary blocks,</text>
+    <text x="30" y="80" class="text_small">random</text>
+  </g>
+  <path d="M 450,485 v -135" stroke="black" fill="none" marker-end="url(#arrowhead_end)"/>
+
+  <g transform="translate(295, 420)">
+    <use xlink:href="#note_170x50" />
+    <text x="5" y="15" class="text_comment">Read heap and index</text>
+    <text x="5" y="30" class="text_comment">pages and transfer</text>
+    <text x="5" y="45" class="text_comment">them to shared_buffers</text>
+  </g>
+
+  <g transform="translate(550, 490)">
+    <use xlink:href="#disc" />
+    <text x="30" y="45" class="text_normal">WAL</text>
+    <text x="10" y="60" class="text_small">binary records,</text>
+    <text x="20" y="75" class="text_small">sequential</text>
+  </g>
+
+  <g transform="translate(690, 490)">
+    <use xlink:href="#disc" />
+    <text x="16" y="45" class="text_normal">Archived</text>
+    <text x="36" y="60" class="text_normal">WAL</text>
+  </g>
+
+  <!-- boarder between client and server side -->
+  <path d="M 110,20 v 550" stroke="black" fill="none" />
+  <g transform="translate(123, 190) rotate(90)">
+    <use xlink:href="#note_200x20"  />
+    <text class="text_comment" x="10" y ="15">Via TCP/IP or socket</text>
+  </g>
+
+  <!-- right side -->
+  <g transform="translate(850, 0) rotate(90)">
+    <text class="text_big" x="95">RAM</text>
+    <text class="text_big" x="250">PROCESSES</text>
+    <text class="text_big" x="500">FILES</text>
+  </g>
+
+</svg>
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index c41ce9499b..6254bf9376 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -60,6 +60,7 @@ break is not needed in a wider output rendering.
   </partintro>
 
   &start;
+  &architecture;
   &query;
   &advanced;
 

Reply via email to