The PIE has had an unfortunate history of speed problems. It is reliant on a variety of background systems, which makes it difficult to diagnose these problems. The current system, for example, utilises third party software including the Apache web server and the Postgres database; these are on different machines connected by a fast Ethernet network. The CGI script on the first machine uses the perl DBI library to contact the database on the second. There are clearly several places where bottlenecks might occur, not all of which are under the control of the PIE installation.
Some benchmark measures of the options for the various components might be obtainable from general studies, e.g. comparisons of relational databases. However, it is frequently the case that the results of benchmarking tests have been disputed by the authors of the software which comes out less well as a result, and some reports have been accused of being based on studies skewed to favour particular developers, even when the benchmark tests involved have been specified by established standards (e.g. the ANSI SQL Benchmark Standard). See the following Slashdot articles for discussions related to this: Postgres beats MySQL, Interbase, and Proprietary DBs, MySQL Developer Contests PostgreSQL Benchmarks and MS Squashes SQL Benchmarks.
In addition, the PIE is a heavy user of particular functionality in its components, as can be seen from the table which gives for each function the approximate number of each type of SQL statement executed, assuming the eventual presentation of a page with seven items on it. (These values are approximate because the number of times particular lines of code are called depends on the value of parameters passed to the function and information already in the database as well as the function itself.)
| Function | Simple Select | Complex Select | Insert | Update | Delete |
| Add_new | 60 | 11 | 8 | 1 | 1 |
| Addtolist | 63 | 11 | 9 | 1 | 5 |
| Change_default | 55 | 11 | 5 | 3 | 1 |
| Createpage | 61 | 11 | 27 | 2 | 1 |
| Createweblink | 60/TD> | 11 | 11 | 1 | 1 |
| Customise | 59 | 11 | 5 | 1 | 5 |
| Edit | 68 | 11 | 11 | 3 | 29 |
| Editconfig | 56 | 11 | 5 | 1 | 1 |
| Edithelp | 57 | 11 | 6 | 3 | 3 |
| Editpage | 56 | 11 | 8 | 6 | 4 |
| Editresource | 55 | 11 | 6 | 2 | 2 |
| Execute | 56 | 11 | 5 | 2 | 2 |
| Exit | 27 | 0 | 1 | 1 | 1 |
| Expcon | 58 | 11 | 5 | 2 | 1 |
| Feedback | 55 | 11 | 5 | 1 | 1 |
| Help | 58 | 11 | 6 | 1 | 2 |
| Logon | 63 | 11 | 28 | 3 | 1 |
| Pageview | 55 | 11 | 9 | 1 | 6 |
| Present | 55 | 11 | 5 | 1 | 1 |
| Search | 67 | 12 | 15 | 5 | 13 |
Furthermore, some at least of the slowness of the PIE is likely to come from the interaction between components, from network connections or the time required to spawn a child process, as well as from the functionality tested by a normal software benchmark.
For all these reasons, it makes sense to come up with benchmark tests which are tailored to the PIE as a whole, and these will be of most use in improving the user experience if they mimic that experience. It is therefore suggested that the benchmark tests to be developed consist of a series of HTTP requests, amounting to complete PIE sessions. This structure also has the advantage that it would be easily reusable to access any (fairly simple) WWW based system.
The script will use a configuration file which contains a series of URLs (though
usernames and passwords will be replaced by the fragments
When the processing is complete, the script will report the number of trials,
and for each URL the shortest/average/longest times for retrieval as well as the
same statistics for the overall process.