Skip to main content

Benchmark Tool

This script is intended to be run from Tinkerwell and from inside farfalla's Vapor production environment.

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Config;

Config::set('database.connections.benchmark_mysql', [
... Config::get('database.connections.mysql')
]);

Config::set('database.connections.benchmark_singlestore', [
... Config::get('database.connections.singlestore'),
... [
'host' => '???.com',
'database' => 'farfalla',
'username' => 'farfalla_readonly',
'password' => 'aaa',
]
]);

function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}


$connection = 'benchmark_mysql';
// $connection = 'benchmark_singlestore';
// $query = "SELECT`issues` .`id` FROM`issues` INNER JOIN`issue_user` ON`issues` .`id`=`issue_user` .`issue_id` RIGHT JOIN `tenant_issue` ON`issues` .`id`=`tenant_issue` .`ti_issue_id` WHERE`issue_user` .`user_id`=1525377 and(`issue_user` .`bought`=1)and(`issue_user` .`revoked_at` IS NULL OR DATE_FORMAT(issue_user.revoked_at,'%Y-%m-%d')>'2022-06-22')AND`tenant_issue` .`ti_tenant_id`=1 AND`tenant_issue` .`ti_deleted_at` IS NULL AND`issues` .`deleted_at` IS NULL AND`conversion_status` in('done','deferred');";
$query = 'SELECT id FROM tenants WHERE `id` = 1';
$iterations = 50;
$executionStartTime = milliseconds();

for ($i = 1; $i <= $iterations; $i++) {
DB::connection($connection)->statement(DB::raw($query));
}

$totalExecutionTime = milliseconds() - $executionStartTime;
$averageExecutionTime = $totalExecutionTime / $iterations;

$results = [
'connection' => $connection,
'query' => $query,
'iterations' => $iterations,
'totalExecutionTime' => $totalExecutionTime,
'averageExecutionTime' => $averageExecutionTime,
];
dump($results);
// dump($connection);
// dump($query);
// dump($totalExecutionTime);
// dump($averageExecutionTime);

Overview


X

Graph View