LAMPやLAPPといった言葉が示しているように、オープンソースソフトウェア(OSS)での代表的なリレーショナルデータベース管理システム(RDBMS)といえば、「MySQL」と「PostgreSQL」だ。この2つのRDBMSは同等であるかのように思われているが、しかしPostgreSQLのユーザー団体「日本PostgreSQLユーザ会」で理事長を務める片岡裕生氏によれば、「PostgreSQLはあまり信用されていない」ということがあるそうだ。
「十分にチューニングされたMySQLとチューニングしていないPostgreSQLを比較したり、反対にチューニングされたPostgreSQLとチューニングしていないMySQLを比較したり、あるいは比較する際のハードウェアそのものが違っていたりと、MySQLとPostgreSQLの性能比較は、客観的に行われていない」(片岡氏)
そのように感じていた同氏は、客観的にデータベースの性能を調べたいという個人の集まりである「データベース性能検証会」の中で、MySQLとPostgreSQLをベンチマークを続けてきている。そのベンチマークの一部が、3月に沖縄で開催された「日本PostgreSQLユーザ会沖縄セミナー」の同氏の講演の中で紹介されている。
なお、データベース性能検証会には、日本PostgreSQLユーザ会、MySQLのユーザー団体「日本MySQLユーザ会」のそれぞれに所属するメンバー両方が参加している。
単体テストからシナリオテストへ
講演で紹介されたベンチマークは大きく分けて(1)ストアドプロシージャを使った単体テスト、(2)1サーバ1クライアントによるテスト、(3)1サーバ多クライアントでのテスト、(4)複雑なシナリオを利用したテスト、(5)接続してから最初のクエリが投げられるまでを計測する接続コスト――という5つからなる。
単体テストからシナリオへと、段々と複雑なものにするという方針について、同氏は「PostgreSQLとMySQL、強いところと弱いところ、それぞれの違いを見ていこう」という狙いを説明している。
まず、ストアドプロシージャを利用した単体テストでは、INSERT、SELECT、UPDATE、DELETEの4つで行われており、4つとも、所定のレコード数の処理にかかった時間による計測が行われている。テストに用いられたデータは、1レコード64バイトを8つのカラムに分けた「64_8」、1レコード1kバイト(1024バイト)を128カラムに分けた「1024_128」、1レコード1024バイトを8カラムに分けた「1024_8」の3つ。レコード数はそれぞれ10万レコード。
単体テストのINSERTの場合、「全体的にPostgreSQLの所要時間が長い」(同氏)という結果になっている。特に1024_128では、PostgreSQLはMySQLの約2倍の差がついている。この結果について同氏は「カラム数が多いとPostgreSQLが遅い」と分析している。というのは、「カラム数が少ないものでは、逆にPostgreSQLがMySQLよりも1.5倍より速いという結果が出ている」からだ。ちなみに同氏によれば、PostgreSQLのカラム数が多くなると処理が遅くなるという性能については「最新版である8.2で改善されている」という。