summaryrefslogtreecommitdiff
path: root/README.rst
diff options
context:
space:
mode:
Diffstat (limited to 'README.rst')
-rw-r--r--README.rst173
1 files changed, 173 insertions, 0 deletions
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..d6a834f
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,173 @@
+pgbench-tools setup
+===================
+
+* Create databases for your test and for the results::
+
+ createdb results
+ createdb pgbench
+
+ * Both databases can be the same, but there may be more shared_buffers
+ cache churn in that case. Some amount of cache disruption
+ is unavoidable unless the result database is remote, because
+ of the OS cache. The recommended and default configuration
+ is to have a pgbench database and a results database. This also
+ keeps the size of the result dataset from being included in the
+ total database size figure recorded by the test.
+
+* Initialize the results database by executing::
+
+ psql -f init/resultdb.sql -d results
+
+ Make sure to reference the correct database.
+ This will create a default test set entry with a blank description.
+ You may want to rename that using something like this::
+
+ psql -c "UPDATE testset SET info='better name' WHERE set=1" -d results
+
+Running tests
+=============
+
+* Edit the config file to run the tests you want
+
+* Execute::
+
+ ./runset
+
+ In order to execute all the tests
+
+Results
+=======
+
+* You can check results even as the test is running with::
+
+ psql -d results -f report.sql
+
+ This is unlikely to disrupte the test results very much unless you've
+ run an enormous number of tests already.
+
+* Other useful reports you can run include:
+ * fastest.sql
+ * summary.sql
+ * bufreport.sql
+ * bufsummary.sql
+
+* Once the tests are done, the results/ directory will include
+ a HTML subdirectory for each test giving its results,
+ in addition to the summary information in the results database.
+
+* The results directory will also include its own index HTML file that
+ shows summary information and plots for all the tests.
+
+* If you manually adjust the test result database, you can
+ then manually regenerate the summary graphs by running::
+
+ ./webreport
+
+Version compatibility
+=====================
+
+The default configuration now aims to support the pgbench that ships with
+PostgreSQL 8.4 and later versions, which uses names such as "pgbench_accounts"
+for its tables. There are commented out settings on the config file that
+show what changes need to be made in order to make the program compatible
+with PostgreSQL 8.3, where the names were like "accounts" instead.
+
+Support for PostgreSQL versions before 8.3 is not possible, because a
+change was made to the pgbench client in that version that is needed
+by the program to work properly. It is possible to use the PostgreSQL 8.3
+pgbench client against a newer database server, or to copy the pgbench.c
+program from 8.3 into a 8.2 source code build and use it instead (with
+some fixes--it won't compile unless you comment out code that refers to
+optional newer features added in 8.3).
+
+Multiple worker support
+-----------------------
+
+Starting in PostgreSQL 9.0, pgbench allows splitting up the work pgbench
+does into multiple worker threads or processes (which depends on whether
+the database client libraries haves been compiled with thread-safe
+behavior or not).
+
+This feature is extremely valuable, as it's likely to give at least
+a 15% speedup on common hardware. And it can more than double throughput
+on operating systems that are particularly hostile to running the
+pgbench client. One known source of this problem is Linux kernels
+using the Completely Fair Scheduler introduced in 2.6.23,
+which does not schedule the pgbench program very well when it's connecting
+to the database using the default method, Unix-domain sockets.
+
+(Note that pgbench-tools doesn't suffer greatly from this problem itself, as
+it connects over TCP/IP using the "-H" parameter. Manual pgbench runs that
+do not specify a host, and therefore connect via a local socket can be
+extremely slow on recent Linux kernels.)
+
+Taking advantage of this feature is done in pgbench-tools by increasing the
+MAX_WORKERS setting in the configuration file. It defaults to blank, which
+avoids using this feature altogether--therefore remaining
+compatible with PostgreSQL/pgbench versions before this capability was added.
+
+When using multiple workers, each must be allocated an equal number of
+clients. That means that client counts that are not a multiple of the
+worker count will result in pgbench not running at all.
+
+According, if you set MAX_WORKERS to a number to enable this capability,
+pgbench-tools picks the maximum integer of that value or lower that the
+client count is evenly divisible by. For example, if MAX_WORKERS is 4,
+running with 8 clients will use 4 workers, while 9 clients will shift
+downward to 3 workers as the best option.
+
+A reasonable setting for MAX_WORKERS is the number of physical cores
+on the server, typically giving best performance. And when using this feature,
+it's better to tweak test client counts toward ones that are divisible by as
+many factors as possible. For example, if you wanted approximately 15
+clients, it would be best to use 16, allowing worker counts of 2, 4, or 8,
+all likely to match common core counts. Second choice would be 14,
+compatible with 2 workers. Third is 15, which would allow 3 workers--not
+improving upon a single worker on common dual-core systems. The worst
+choices would be 13 or 17 clients, which are prime and therefore cannot
+be usefully allocated more than one worker on common hardware.
+
+Known issues
+============
+
+* If running tests against non-pgbench tables, the database scale
+ will not be detected correctly yet
+
+* On Solaris, where the benchwarmer script calls tail it may need
+ to use /usr/xpg4/bin/tail instead
+
+Planned features
+================
+
+* Currently none of the graphs break their display down based on the
+ test set. Each set could be mapped into a separate data set, and
+ therefore the graph used to compare sets.
+
+* The client+scale data table used to generate the 3D report would be
+ useful to generate in tabular text format as well.
+
+Documentation
+=============
+
+The documentation ``README.rst`` for the program is in ReST markup. Tools
+that operate on ReST can be used to make versions of it formatted
+for other purposes, such as rst2html to make a HTML version.
+
+Contact
+=======
+
+The project is hosted at https://github.com/gregs1104/pgbench-tools
+and is also a PostgreSQL project at http://git.postgresql.org/git/pgbench-tools.git
+or http://git.postgresql.org/gitweb
+
+If you have any hints, changes or improvements, please contact:
+
+ * Greg Smith gsmith@gregsmith.com
+
+Credits
+=======
+
+Copyright (c) 2007-2011, Gregory Smith
+All rights reserved.
+See COPYRIGHT file for full license details
+