dbfuncs.php : is the file which contains classes and functions for firing queries on mysql and pgsql
mysqlinsert.php : creates and fires inserts on mysql
mysqlselect.php : creates and fires selects on mysql
pgsqlinsert.php : creates and fires inserts on pgsql
pgsqlselect.php : creates and fires selects on pgsql
benchmark.php : script used to control concurrency and number of queries per script
Please refer to http://jayant7k.blogspot.com/2010/09/database-speed-tests-mysql-and_29.html and http://jayant7k.blogspot.com/2010/09/database-speed-tests-mysql-and.html for benchmarks of selects and inserts respectively.
And the code....
dbfuncs.php
abstract class dbfuncs { abstract function insertqry($qry); abstract function selectqry($qry); abstract function connectdb(); public function log($str) { $file = "error.log"; $fp = fopen($file, "a"); fwrite($fp, "$str\n"); fclose($fp); } } class mysqldb extends dbfuncs { private $user = "root"; private $pass = "jayant"; private $host = "localhost"; //private $port = 3307; private $socket = "/tmp/mysql.sock"; private $database = "benchmark"; public $db; function __construct() { $this->connectdb(); } public function connectdb() { $this->db = mysql_connect($this->host.':'.$this->socket, $this->user, $this->pass) or die(mysql_error()) mysql_select_db($this->database, $this->db); } public function insertqry($qry) { if(!mysql_ping($this->db)) $this->connectdb(); mysql_query($qry, $this->db) or $this->log(mysql_error()); } public function selectqry($qry) { if(!mysql_ping($this->db)) $this->connectdb(); $rs = mysql_query($qry, $this->db) or $this->log(mysql_error()); return $rs; } } class pgsqldb extends dbfuncs { private $dns = "host=localhost port=5432 user=jayant password=12qwaszx dbname=benchmark"; public $db; function __construct() { $this->connectdb(); } public function connectdb() { $this->db = pg_connect($this->dns) or die(pg_last_error()); } public function insertqry($qry) { if(!pg_ping($this->db)) connectdb(); pg_query($this->db, $qry) or $this->log(pg_last_error($this->db)); } public function selectqry($qry) { if(!pg_ping($this->db)) $this->connectdb(); $rs = pg_query($this->db, $qry) or $this->log(pg_last_error($this->db)); return $rs; } } function logtime($str) { $file = "benchmark.log"; $fp = fopen($file, "a"); fputs($fp, $str); fclose($fp); }
mysqlinsert.php
include "dbfuncs.php"; $scriptno = $argv[1]+1; $count = $argv[2]; $mysql = new mysqldb(); $start = microtime(true); for($x=0; $x<$count; $x++) { $xx = $x*$scriptno; $qry = "insert into data (val, txt) values ('$xx','$x in $scriptno')"; $mysql->insertqry($qry); } $end = microtime(true); $log = "\nMysql innodb Time to insert $count in run $scriptno = ".($end-$start); logtime($log);
pgsqlinsert.php
include "dbfuncs.php"; $scriptno = $argv[1]+1; $count = $argv[2]; $mysql = new pgsqldb(); $start = microtime(true); for($x=0; $x<$count; $x++) { $xx = $x*$scriptno; $qry = "insert into data (val, txt) values ('$xx','$x in $scriptno')"; $mysql->insertqry($qry); } $end = microtime(true); $log = "\nAvg Pgsql Time to insert $count in run $scriptno = ".($end-$start); logtime($log);
mysqlselect.php
include "dbfuncs.php"; $scriptno = $argv[1]+1; $count = $argv[2]; $mysql = new mysqldb(); $start = microtime(true); for($x=0; $x<$count; $x++) { $xx = $x*$scriptno; $qry = "select * from `data` where val ='$xx'"; $mysql->selectqry($qry); } $end = microtime(true); $log = "\nMysql innodb Time to select $count in run $scriptno = ".($end-$start); logtime($log);
pgsqlselect.php
include "dbfuncs.php"; $scriptno = $argv[1]+1; $count = $argv[2]; $mysql = new pgsqldb(); $start = microtime(true); for($x=0; $x<$count; $x++) { $xx = $x*$scriptno; $qry = "select * from data where val ='$xx'"; $mysql->selectqry($qry); } $end = microtime(true); $log = "\nPgsql Time to select $count in run $scriptno = ".($end-$start); logtime($log);
benchmark.php
$count = 100000; $concurrency = 40; for($i=0; $i<$concurrency; $i++) { exec("php -q mysqlselect.php $i $count > /dev/null &"); // exec("php -q pgsqlselect.php $i $count > /dev/null &"); // exec("php -q mysqlinsert.php $i $count > /dev/null &"); // exec("php -q pgsqlinsert.php $i $count > /dev/null &"); }
All test runs were individual - meaning that only one script was run at a time with different count and concurrency. For inserts $count was set to 10,000 and for selects $count was set to 100,000 while $concurrency kept on varying.
I am using ubuntu 10.04 with 32 bit kernel 2.6.32-24 and ext4 file system. And my system has around 3GB of RAM and Intel Core 2 DUO T5870 @ 2.0 GHz.
1 comment:
Any reason why you're using the old mysql module and not the new mysqli or PDO? You could also give the mysqlnd (native driver) a go.
Post a Comment