<!-- doc/src/sgml/ref/pgtestfsync.sgml -->

<refentry id="pgtestfsync">
 <indexterm zone="pgtestfsync">
  <primary>pg_test_fsync</primary>
 </indexterm>

 <refmeta>
  <refentrytitle><application>pg_test_fsync</application></refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo>Application</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>pg_test_fsync</refname>
  <refpurpose>determine fastest <varname>wal_sync_method</varname> for <productname>PostgreSQL</productname></refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>pg_test_fsync</command>
   <arg rep="repeat"><replaceable>option</replaceable></arg>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

 <para>
  <application>pg_test_fsync</application> is intended to give you a reasonable
  idea of what the fastest <xref linkend="guc-wal-sync-method"/> is on your
  specific system,
  as well as supplying diagnostic information in the event of an identified I/O
  problem.  However, differences shown by
  <application>pg_test_fsync</application> might not make any significant
  difference in real database throughput, especially since many database servers
  are not speed-limited by their write-ahead logs.
  <application>pg_test_fsync</application> reports average file sync operation
  time in microseconds for each <literal>wal_sync_method</literal>, which can also be used to
  inform efforts to optimize the value of <xref linkend="guc-commit-delay"/>.
 </para>
 </refsect1>

 <refsect1>
  <title>Options</title>

   <para>
    <application>pg_test_fsync</application> accepts the following
    command-line options:

    <variablelist>

     <varlistentry>
      <term><option>-f</option></term>
      <term><option>--filename</option></term>
      <listitem>
       <para>
        Specifies the file name to write test data in.
        This file should be in the same file system that the
        <filename>pg_wal</filename> directory is or will be placed in.
        (<filename>pg_wal</filename> contains the <acronym>WAL</acronym> files.)
        The default is <filename>pg_test_fsync.out</filename> in the current
        directory.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-s</option></term>
      <term><option>--secs-per-test</option></term>
      <listitem>
       <para>
        Specifies the number of seconds for each test.  The more time
        per test, the greater the test's accuracy, but the longer it takes
        to run.  The default is 5 seconds, which allows the program to
        complete in under 2 minutes.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-V</option></term>
      <term><option>--version</option></term>
      <listitem>
       <para>
        Print the <application>pg_test_fsync</application> version and exit.
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><option>-?</option></term>
      <term><option>--help</option></term>
      <listitem>
       <para>
        Show help about <application>pg_test_fsync</application> command line
        arguments, and exit.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>

 </refsect1>

 <refsect1>
  <title>Environment</title>

  <para>
   The environment variable <envar>PG_COLOR</envar> specifies whether to use
   color in diagnostic messages. Possible values are
   <literal>always</literal>, <literal>auto</literal> and
   <literal>never</literal>.
  </para>
 </refsect1>
 
 <refsect1>
  <title>See Also</title>

  <simplelist type="inline">
   <member><xref linkend="app-postgres"/></member>
  </simplelist>
 </refsect1>
</refentry>
