pg_field_type first call is very slow
Nessuno ha ancora preso questa issue.
- Lingua principale
- C
- Stelle
- 40.4k
- Fork
- 8.1k
- Merge medio
- 2g 13h
- PR unite (30g)
- 96
Descrizione
Description
Problem: function pg_field_type first call (after run php script) is very slow.
The following code:
$connection = pg_connect("...") or die('Cannot connect db');
$res = pg_query($connection, 'SELECT 100');
$time0 = microtime(true); pg_field_name($res, 0);
$out[] = '(query 1) pg_field_name() first call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
$time0 = microtime(true); pg_field_size($res, 0);
$out[] = '(query 1) pg_field_size() first call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
$time0 = microtime(true); pg_field_type($res, 0);
$out[] = '(query 1) pg_field_type() first call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
$time0 = microtime(true); pg_field_type($res, 0);
$out[] = '(query 1) pg_field_type() second call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
$res = pg_query($connection, 'SELECT 200');
$time0 = microtime(true); pg_field_type($res, 0);
$out[] = '(query 2) pg_field_type() first call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
$time0 = microtime(true); pg_field_type($res, 0);
$out[] = '(query 2) pg_field_type() second call = '.number_format((microtime(true) - $time0) * 1000, 4).' мс';
print_r($out);
<?php
Resulted in this output:
Array (
[0] => "(query 1) pg_field_name() first call = 0.0069 мс"
[1] => "(query 1) pg_field_size() first call = 0.0031 мс"
[2] => "(query 1) pg_field_type() first call = 46.6821 мс" // FIRST CALL IS VERY SLOW (pg_field_type)
[3] => "(query 1) pg_field_type() second call = 0.0050 мс"
[4] => "(query 2) pg_field_type() first call = 0.0069 мс"
[5] => "(query 2) pg_field_type() second call = 0.0029 мс"
)
But I expected this output instead:
Array (
[0] => "(query 1) pg_field_name() first call = 0.0069 мс"
[1] => "(query 1) pg_field_size() first call = 0.0031 мс"
[2] => "(query 1) pg_field_type() first call = 0.0050-0.0069 мс" // MUST BE
[3] => "(query 1) pg_field_type() second call = 0.0050 мс"
[4] => "(query 2) pg_field_type() first call = 0.0069 мс"
[5] => "(query 2) pg_field_type() second call = 0.0029 мс"
)
PHP Version
PHP 8.1
Operating System
Debian 11 (bullseye)
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione PHP fornita usando pg_connect(), pg_query() e pg_field_type() su PHP 8.1 con PostgreSQL, confrontando la prima chiamata con quelle successive. Traccia il percorso di ricerca del tipo di campo di PostgreSQL per identificare perché la prima chiamata richiede circa 46 ms; il lavoro è completato quando la prima chiamata non presenta più il ritardo inspiegato e il tempo osservato è coperto da un controllo di regressione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, php, postgresql
- Ambito
- backend, databases
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100