load(CONFIG);Glial\Sgbd\Sgbd::setConfig($c->get('db'));$db=Glial\Sgbd\Sgbd::sql(DB_DEFAULT); require '/tmp/bench-architecture-20261010/after.php'; $afterReady=App\Library\Dot3LatestGeneration::readyInformationIdSql(); $beforeReady=str_replace("AND (\n SELECT dc_ready.id_dot3_information\n FROM dot3_cluster dc_ready\n WHERE dc_ready.id_dot3_information = di.is_svg_generated\n LIMIT 1\n ) IS NOT NULL", "AND EXISTS (\n SELECT 1\n FROM dot3_cluster dc_ready\n WHERE dc_ready.id_dot3_information = di.is_svg_generated\n )",$afterReady); if($beforeReady===$afterReady)throw new RuntimeException('Replacement failed'); $make=fn($ready)=>"SELECT dg.id, dg.svg, dg.height, dg.width, (dg.height * dg.width) as area, dc.date_inserted as date_refresh FROM dot3_cluster dc JOIN dot3_graph dg ON dg.id = dc.id_dot3_graph WHERE dc.id_dot3_information = ($ready) ORDER BY dg.height DESC, dg.width DESC"; $queries=['before'=>$make($beforeReady),'after'=>$make($afterReady)]; $fetch=function($sql)use($db){$res=$db->sql_query($sql);$rows=[];while($r=$db->sql_fetch_array($res,MYSQLI_ASSOC))$rows[]=$r;return $rows;}; $status=function()use($fetch){$rows=$fetch("SHOW SESSION STATUS WHERE Variable_name LIKE 'Handler_read_%'");return array_column($rows,'Value','Variable_name');}; $out=['utc'=>gmdate('c'),'server'=>'10.68.68.111','database'=>$fetch('SELECT DATABASE() db,VERSION() version'),'php_version'=>PHP_VERSION,'sql'=>$queries,'samples'=>[],'plans'=>[]]; $db->sql_query('SET SESSION max_statement_time=30');$db->sql_query('SET SESSION query_cache_type=OFF'); $db->sql_query('START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY'); try{ foreach($queries as $sql)$fetch($sql); for($i=1;$i<=10;$i++)foreach(($i%2?['before','after']:['after','before']) as $phase){ $s=$status();$t=hrtime(true);$rows=$fetch($queries[$phase]);$ms=(hrtime(true)-$t)/1e6;$e=$status();$delta=[];foreach($e as $key=>$v)$delta[$key]=(int)$v-(int)$s[$key]; $canonical=$rows;usort($canonical,fn($a,$b)=>strcmp(json_encode($a),json_encode($b))); $out['samples'][]=['phase'=>$phase,'run'=>$i,'ms'=>$ms,'rows'=>count($rows),'svg_bytes'=>array_sum(array_map(fn($r)=>strlen($r['svg']),$rows)),'sha256'=>hash('sha256',serialize($canonical)),'handlers'=>$delta]; } foreach($queries as $phase=>$sql){$out['plans'][$phase]['explain']=$fetch('EXPLAIN '.$sql);$out['plans'][$phase]['analyze']=$fetch('ANALYZE FORMAT=JSON '.$sql);} }finally{$db->sql_query('ROLLBACK');} file_put_contents('/tmp/bench-architecture-20261010/sql-results.json',json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)); foreach(['before','after'] as $phase){$s=array_values(array_filter($out['samples'],fn($r)=>$r['phase']===$phase));$m=array_column($s,'ms');sort($m);echo json_encode(['phase'=>$phase,'median_ms'=>($m[4]+$m[5])/2,'rows'=>$s[0]['rows'],'svg_bytes'=>$s[0]['svg_bytes'],'handlers'=>$s[0]['handlers']]),PHP_EOL;} if(count(array_unique(array_column($out['samples'],'sha256')))!==1)throw new RuntimeException('Results differ');