SGML docs for in memory query cache
authorMuhammad Usama <m.usama@gmail.com>
Mon, 10 Oct 2016 19:38:44 +0000 (00:38 +0500)
committerMuhammad Usama <m.usama@gmail.com>
Mon, 10 Oct 2016 19:38:44 +0000 (00:38 +0500)
doc/src/sgml/loadbalance.sgml
doc/src/sgml/memcache.sgml

index 4b3ca0ebba014324d84441e2d6ea52b0e5d452fc..bca5e4ff8b8b87ec779196e4ffe58140b60bd8e6 100644 (file)
@@ -60,7 +60,7 @@
         </para>
         <para>
           You can use regular expression into the list to match function name
-          (to which added automatically ^ and $),
+          (to which ^ and $ are automatically added),
         </para>
 
         <example id="example-white-function-list-1">
@@ -97,7 +97,7 @@ white_function_list = 'get_.*,select_.*'
         </para>
         <para>
           You can use regular expression into the list to match function name
-          (to which added automatically ^ and $),
+          (to which ^ and $ are automatically added),
         </para>
 
         <example id="example-black-function-list-1">
index feae13f6114087905791869379716eda7b7cf167..d3a50142549bc8dd0ac1c3cdfd4d3a9bfbf0e2a3 100644 (file)
@@ -4,6 +4,448 @@
   <title>In Memory Query Cache</title>
 
   <para>
-    memory_cache_enabled etc.
+    In memory query cache can be used with all modes of
+    <productname>Pgpool-II</productname>. It is different
+    from the query cache on the point that in memory query
+    cache is faster because of the in memory nature of the storage.
+    Moreover <productname>Pgpool-II</productname> does not
+    need a restart when the cache gets outdated because of
+    the underlying table updates.
   </para>
+  <para>
+    In memory cache saves the pair of SELECT statement
+    and its result
+    (along with the Bind parameters, if the SELECT is an
+    extended query). If the same SELECTs comes in,
+    <productname>Pgpool-II</productname> returns the value
+    from cache. Since no <acronym>SQL</acronym> parsing nor
+    access to PostgreSQL are involved, the serving of results
+    from the in memory cache is extremely fast.
+  </para>
+  <para>
+    On the other hand, it might be slower than the normal path
+    in some cases, because it adds some overhead to store cache.
+    Moreover when a table is updated, <productname>Pgpool-II
+    </productname> automatically deletes all the caches related
+    to the table. So the performance will be degraded by a system
+    with a lot of updates.
+    If the cache_hit_ratio is lower than 70%, you might want
+    to disable in memory cache.
+  </para>
+
+       <sect2 id="runtime-in-memory-query-cache-enabling">
+               <title>Enabling in memory query cache</title>
+
+               <variablelist>
+
+                       <varlistentry id="guc-memory-cache-enabled" xreflabel="memory_cache_enabled">
+                               <term><varname>memory_cache_enabled</varname> (<type>boolean</type>)
+                                       <indexterm>
+                                               <primary><varname>memory_cache_enabled</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+                                               Setting to on enables the memory cache.
+                                               Default is off.
+                                       </para>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+    </variablelist>
+  </sect2>
+
+       <sect2 id="runtime-in-memory-query-cache-choose-storage">
+               <title>Choosing cache storage</title>
+
+               <variablelist>
+
+                       <varlistentry id="guc-memqcache-method" xreflabel="memqcache_method">
+                               <term><varname>memqcache_method</varname> (<type>string</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_method</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+            Specifies the storage type to be used for the cache.
+                                               Below table contains the list of all valid values for the parameter.
+                                       </para>
+
+          <table id="memqcache-method-table">
+            <title>Memcache method options</title>
+            <tgroup cols="2">
+              <thead>
+                <row>
+                  <entry>Value</entry>
+                  <entry>Description</entry>
+                </row>
+              </thead>
+
+              <tbody>
+                <row>
+                  <entry><literal>'shmem'</literal></entry>
+                  <entry>Use shared memory</entry>
+                </row>
+
+                <row>
+                  <entry><literal>'memcached'</literal></entry>
+                  <entry>Use <ulink url="http://memcached.org/">memcached</ulink></entry>
+                </row>
+
+              </tbody>
+            </tgroup>
+          </table>
+
+                                       <para>
+            Default is 'shmem'.
+                                       </para>
+
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+    </variablelist>
+  </sect2>
+
+       <sect2 id="runtime-in-memory-query-cache-config">
+               <title>Common configurations</title>
+    <para>
+      These below parameter are valid for both <literal>shmem</literal>
+      and <literal>memcached</literal> type query cache.
+    </para>
+               <variablelist>
+
+                       <varlistentry id="guc-memqcacheexpire" xreflabel="memqcache_expire">
+                               <term><varname>memqcache_expire</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_expire</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+          <para>
+            Specifies the life time of query cache in seconds.
+            Default is 0. which means no cache expiration and cache remains
+            valid until the table is updated.
+          </para>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+
+          <note>
+            <para>
+              This parameters <xref linkend="guc-memqcacheexpire"> and
+              <xref linkend="guc-memqcache-auto-cache-invalidation"> are orthogonal to each other.
+            </para>
+          </note>
+
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-auto-cache-invalidation" xreflabel="memqcache_auto_cache_invalidation">
+                               <term><varname>memqcache_auto_cache_invalidation</varname> (<type>boolean</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_auto_cache_invalidation</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+          <para>
+            Setting to on, automatically deletes the cache related to the updated tables.
+            When off, cache is not deleted.
+          </para>
+          <para>
+            Default is on.
+          </para>
+          <note>
+            <para>
+              This parameters <xref linkend="guc-memqcache-auto-cache-invalidation">
+              and <xref linkend="guc-memqcacheexpire"> are orthogonal to each other.
+            </para>
+          </note>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-maxcache" xreflabel="memqcache_maxcache">
+                               <term><varname>memqcache_maxcache</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_maxcache</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+          <para>
+            Specifies the maximum size in bytes of the SELECT query result to be cached.
+            The result with data size larger than this value will not be cached by
+            <productname>Pgpool-II</productname>.
+            And when the caching of data is rejected because of the size constraint the following
+            message is shown.
+              <programlisting>
+LOG:   pid 13756: pool_add_temp_query_cache: data size exceeds memqcache_maxcache. current:4095 requested:111 memq_maxcache:4096
+              </programlisting>
+          </para>
+          <note>
+            <para>
+              For the shared memory query(<literal>'shmem'</literal>) cache the
+              <varname>memqcache_maxcache</varname> must be set lower than
+              <xref linkend="guc-memqcache-cache-block-size"> and for <literal>'memcached'</literal>
+              it must be lower than the size of slab (default is 1 MB).
+            </para>
+          </note>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-white-memqcache-table-list" xreflabel="white_memqcache_table_list">
+                               <term><varname>white_memqcache_table_list</varname> (<type>string</type>)
+                                       <indexterm>
+                                               <primary><varname>white_memqcache_table_list</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+
+          <para>
+            Specifies a comma separated list of table names whose SELECT
+            results should be cached by the <productname>Pgpool-II</productname>.
+          </para>
+
+          <para>
+            You can use regular expression into the list to match table name
+            (to which ^ and $ are automatically added),
+          </para>
+
+          <note>
+            <para>
+              If the queries can refer the table with and without the schema
+              qualification then you must add both entries(with and without
+              schema name) in the list.
+                <programlisting>
+#For example:
+#If the queries sometime use "table1" and other times "public.table1"
+#to refer the table1 then the white_memqcache_table_list
+#would be configured as follows.
+
+white_memqcache_table_list = "table1,public.table1"
+
+                </programlisting>
+
+            </para>
+          </note>
+          <note>
+            <para>
+              <varname>white_memqcache_table_list</varname> white_memqcache_table_list takes
+              precedence over <xref linkend="guc-black-memqcache-table-list">
+            </para>
+          </note>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-black-memqcache-table-list" xreflabel="black_memqcache_table_list">
+                               <term><varname>black_memqcache_table_list</varname> (<type>string</type>)
+                                       <indexterm>
+                                               <primary><varname>black_memqcache_table_list</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+          <para>
+            Specifies a comma separated list of table names whose SELECT
+            results should <emphasis>NOT</emphasis> be cached by the <productname>
+            Pgpool-II</productname>.
+          </para>
+
+          <para>
+            You can use regular expression into the list to match table name
+            (to which ^ and $ are automatically added),
+          </para>
+
+          <note>
+            <para>
+              If the queries can refer the table with and without the schema
+              qualification then you must add both entries(with and without
+              schema name) in the list.
+                <programlisting>
+#For example:
+#If the queries sometime use "table1" and other times "public.table1"
+#to refer the table1 then the black_memqcache_table_list
+#would be configured as follows.
+
+black_function_list = "table1,public.table1"
+
+                </programlisting>
+
+            </para>
+          </note>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-oiddir" xreflabel="memqcache_oiddir">
+                               <term><varname>memqcache_oiddir</varname> (<type>string</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_oiddir</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+          <para>
+            Specifies the full path to the directory for storing the
+            <literal>oids</literal> of tables used by SELECT queries.
+          </para>
+          <para>
+            <varname>memqcache_oiddir</varname> directory contains the sub directories
+            for the databases. The directory name is the OID of the database, And each
+            database directory contains the files for each table used by SELECT statement.
+            Again the name of the file is the OID of the table.
+            These files contains the pointers to query cache which are used as key for
+            deleting the caches.
+          </para>
+          <note>
+            <para>
+              Normal restart of <productname>Pgpool-II</productname> does not clear the
+              contents of <varname>memqcache_oiddir</varname>.
+            </para>
+          </note>
+                                       <para>
+            This parameter can be changed by reloading the pgpool configurations.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+    </variablelist>
+  </sect2>
+
+       <sect2 id="runtime-in-memory-query-cache-shmem-config">
+               <title>Configurations to use shared memory</title>
+
+    <para>
+      These are the parameters used with shared memory as the cache storage.
+    </para>
+
+               <variablelist>
+
+                       <varlistentry id="guc-memqcache-total-size" xreflabel="memqcache_total_size">
+                               <term><varname>memqcache_total_size</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_total_size</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+                                               Specifies the shared memory cache size in bytes.
+                                       </para>
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-max-num-cache" xreflabel="memqcache_max_num_cache">
+                               <term><varname>memqcache_max_num_cache</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_max_num_cache</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+            Specifies the number of cache entries. This is used to define the size of cache management space.
+                                       </para>
+          <note>
+            <para>
+              The management space size can be calculated by:
+              <varname>memqcache_max_num_cache</varname> * 48 bytes.
+              Too small number will cause an error while registering cache.
+              On the other hand too large number will just waste space.
+            </para>
+          </note>
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-cache-block-size" xreflabel="memqcache_cache_block_size">
+                               <term><varname>memqcache_cache_block_size</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_cache_block_size</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+            Specifies the cache block size. <productname>Pgpool-II</productname> uses the
+            cache memory arranged in <varname>memqcache_cache_block_size</varname> blocks.
+            SELECT result is packed into the block and must fit in a single block.
+            And the results larger than <varname>memqcache_cache_block_size</varname> are
+            not cached.
+                                       </para>
+
+          <para>
+          <varname>memqcache_cache_block_size</varname> must be set to atleast 512.
+          </para>
+
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+    </variablelist>
+  </sect2>
+
+       <sect2 id="runtime-in-memory-query-cache-memcached-config">
+               <title>Configurations to use memcached</title>
+
+    <para>
+      These are the parameters used with memcached as the cache storage.
+    </para>
+
+               <variablelist>
+
+                       <varlistentry id="guc-memqcache-memcached-host" xreflabel="memqcache_memcached_host">
+                               <term><varname>memqcache_memcached_host</varname> (<type>string</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_memcached_host</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+            Specifies the host name or the IP address on which <literal>memcached</literal>
+            works. You can use <literal>'localhost'</literal> if <literal>memcached</literal>
+            and <productname>Pgpool-II</productname> resides on same server.
+                                       </para>
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+                       <varlistentry id="guc-memqcache-memcached-port" xreflabel="memqcache_memcached_port">
+                               <term><varname>memqcache_memcached_port</varname> (<type>integer</type>)
+                                       <indexterm>
+                                               <primary><varname>memqcache_memcached_port</varname> configuration parameter</primary>
+                                       </indexterm>
+                               </term>
+                               <listitem>
+                                       <para>
+            Specifies the port number of <acronym>memcached</acronym>.
+            Default is 11211.
+                                       </para>
+                                       <para>
+            This parameter can only be set at server start.
+                                       </para>
+                               </listitem>
+                       </varlistentry>
+
+    </variablelist>
+  </sect2>
+
 </sect1>