Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19

Hybrid View

  1. #1
    Quote Originariamente inviata da debug Visualizza il messaggio
    Come scritto all'inizio, i microsecondi li genero con php, vista che la versione di mysql in mio possesso ancora non li supporta.
    Quindi l'inserimento lo fa ricevendo dei dati dal php. Ok, nessun mistero allora. MySql inserisce le informazioni che riceve e numera i record in base all'ordine d'arrivo dalla query. Cosa contengono i dati non e' affare di mysql ma del php/pc/os e dello script che raccoglie i dati da inserire.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  2. #2
    Mi hai incuriosito.

    Ho fatto una prova con il microtime in php:

    Codice PHP:
    <?php

    for ($i 1$i <= 100$i++) {
        echo 
    $i;
        echo 
    " - microtime = ";
        echo 
    microtime();
        echo 
    "<br>";
        }

    ?>
    per 100 letture mi da sempre lo stesso valore. Ora se questo valore viene inserito in una query a mysql non rimane che inserirlo nell'ordine in cui lo riceve. quindi credo dipenda dallo script di prelievo microtime e di inserimento nel db.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Perché non posti il codice che hai usato per fare le prove?

  4. #4
    Avete ragione non ho postato tutte le info necessarie.
    Allora, ho fatto il test con INT al posto di BIGINT, ma non è cambiato nulla.

    Lo stress test l'ho eseguito con l'Apache Benchmark (ab.exe) con 1000 requests e 100 concurrency

    Lo script php, riassunto, è questo:
    Codice PHP:
    $data['php_gmdate_iso_8601'] = gmdate('c');
    $data['php_gmdate_rfc_2822'] = gmdate('r');
    $data['php_date_iso_8601'] = date('c');
    $data['php_date_rfc_2822'] = date('r');
    $data['php_time'] = time();
    list(
    $data['php_microtime'],) = explode(' 'microtime());
    list(,
    $data['php_microtime']) = explode('.'$data['php_microtime']);

    mysql_query("Lock Tables timing_precision_inserts_4 Write") or die(mysql_error());

    $r mysql_query("SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'timing_precision_inserts_4'") or die(mysql_error());
    $rr mysql_query("SELECT MAX(id) FROM timing_precision_inserts_4") or die(mysql_error());

    $sql  "\n";
    $sql .= "Insert Into \n";
    $sql .= "                timing_precision_inserts_4 \n";
    $sql .= "(last_insert_id, next_auto_increment, db_now_time, db_sysdate_time, db_time, php_gmdate_iso_8601, php_gmdate_rfc_2822, php_date_iso_8601, php_date_rfc_2822, php_time, php_microtime) \n";
    $sql .= "Values ( \n";
    $sql .= "            '".@mysql_result($rr,0)."'";
    $sql .= "            , \n";
    $sql .= "            '".@mysql_result($r,0)."'";
    $sql .= "            , \n";
    $sql .= "            NOW()";
    $sql .= "            , \n";
    $sql .= "            SYSDATE()";
    $sql .= "            , \n";
    $sql .= "            UNIX_TIMESTAMP()";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_gmdate_iso_8601'])."'";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_gmdate_rfc_2822'])."'";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_date_iso_8601'])."'";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_date_rfc_2822'])."'";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_time'])."'";
    $sql .= "            , \n";
    $sql .= "            '".mysql_real_escape_string($data['php_microtime'])."'";$sql .= "); \n";

    $q mysql_query($sql) or die(mysql_error().$sql");

    mysql_query("Unlock Tables") or die(mysql_error()); 

    Questa è una porzione dei record estratti ordinati per php_time e php_microtime:
    codice:
    +-----+----------------+---------------------+---------------------+---------------------+------------+---------------------------+---------------------------------+---------------------------+---------------------------------+------------+---------------+------------+
    | id  | last_insert_id | next_auto_increment | db_now_time         | db_sysdate_time     | db_time    | php_gmdate_iso_8601       | php_gmdate_rfc_2822             | php_date_iso_8601         | php_date_rfc_2822               | php_time   | php_microtime | extra_info |
    +-----+----------------+---------------------+---------------------+---------------------+------------+---------------------------+---------------------------------+---------------------------+---------------------------------+------------+---------------+------------+
    | 299 | 298            | 299                 | 2014-01-29 14:31:15 | 2014-01-29 14:31:15 | 1391002275 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 98525000      | NULL       |
    | 301 | 300            | 301                 | 2014-01-29 14:31:15 | 2014-01-29 14:31:15 | 1391002275 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 98566200      | NULL       |
    | 300 | 299            | 300                 | 2014-01-29 14:31:15 | 2014-01-29 14:31:15 | 1391002275 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 98586500      | NULL       |
    | 302 | 301            | 302                 | 2014-01-29 14:31:15 | 2014-01-29 14:31:15 | 1391002275 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 98630600      | NULL       |
    | 303 | 302            | 303                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 99186900      | NULL       |
    | 304 | 303            | 304                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 99303900      | NULL       |
    | 306 | 305            | 306                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 99647800      | NULL       |
    | 305 | 304            | 305                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 99671800      | NULL       |
    | 307 | 306            | 307                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 2014-01-29T13:31:15+00:00 | Wed, 29 Jan 2014 13:31:15 +0000 | 1391002275 | 99737500      | NULL       |
    | 308 | 307            | 308                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 1391002276 | 07110300      | NULL       |
    | 309 | 308            | 309                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 1391002276 | 08556500      | NULL       |
    | 310 | 309            | 310                 | 2014-01-29 14:31:16 | 2014-01-29 14:31:16 | 1391002276 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 2014-01-29T13:31:16+00:00 | Wed, 29 Jan 2014 13:31:16 +0000 | 1391002276 | 08579100      | NULL       |
    +-----+----------------+---------------------+---------------------+---------------------+------------+---------------------------+---------------------------------+---------------------------+---------------------------------+------------+---------------+------------+
    Se c'è bisogno di altri chiarimenti chiedete pure.

    Grazie


    Ciao!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  5. #5
    Cavolo, c'ho messo mezz'ora per formattare tutto per benino, e mi si sfancula tutto!
    Vabè, se copiate e incollate in un file di testo si legge tutto bene.


    Ciao!!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  6. #6



    ciao!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  7. #7
    Non si vede come esegui il loop dell'inserimento.

    Di certo e' che mysql numera i record con autoincrement in base alla progressione dell'inserimento.

    Non hai disallineamento tra gli id ed i valori di NOW(), SYSDATE() e unix_timestamp quindi l'ordine degli inserimenti dipendono dal numero delle connessioni a mysql che vengono stabilite da apache per eseguire lo stress test.

    dipende (forse) anche dal tipo di OS e CPU (n. di core utilizzati). Rimane un punto fermo: autoincrement non va a saltelli ma prosegue dritto per la sua strada. Man mano che arrivano i record li numera con il next.

    Prova ad ordinare i record per id e vedrai che l'incongruenza arriva dal PC. Se ordini per l'ora di php non puoi dire che l'autoincrement sbaglia, ma a fronte di connessioni multiple (e multipli thread della cpu) significa che gli inserimenti non avvengono nell'ordine temporale di acquisizione del dato da parte del php.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Non si vede come esegui il loop dell'inserimento.
    L'ho scritto: ho usato l'apache benchmark per simulare diverse chiamate in concorrenza

    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Non hai disallineamento tra gli id ed i valori di NOW(), SYSDATE() e unix_timestamp quindi l'ordine degli inserimenti dipendono dal numero delle connessioni a mysql che vengono stabilite da apache per eseguire lo stress test.
    Non disallineamento tra i valori che contengono solo i secondi come maggior dettaglio, appunto ho usato i microsecondi

    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    dipende (forse) anche dal tipo di OS e CPU (n. di core utilizzati).
    Come faccio a verificare se è così?

    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Rimane un punto fermo: autoincrement non va a saltelli ma prosegue dritto per la sua strada. Man mano che arrivano i record li numera con il next.
    E fin qui siamo d'accordo, ma sto cercando di capire, non conoscendo nel dettaglio l'iter che il motore mysql esegue per gli insert, se in taluni casi possono verificarsi colli di bottiglia che possono causare il "sorpasso" da parte di alcuni inserimenti rispetto ad altri evidentemente precedenti

    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Prova ad ordinare i record per id e vedrai che l'incongruenza arriva dal PC.
    In che senso arriva dal pc?
    Sto eseguendo tutto in locale, quindi server mysql, server apache e client sono la stessa macchina.

    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Se ordini per l'ora di php non puoi dire che l'autoincrement sbaglia, ma a fronte di connessioni multiple (e multipli thread della cpu) significa che gli inserimenti non avvengono nell'ordine temporale di acquisizione del dato da parte del php.
    Qui, se ho capito bene, intendi dire che è php il collo di bottiglia, per cui magari riceve i dati in maniera non omogenea in tutti i casi, e di conseguenza invia a mysql dati in ritardo, mentre la generazione dei microsecondi non è strettamente legata a questo invio della query.
    Giusto?

    Grazie

    Ciaoooo!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  9. #9
    Arriva dal pc nel senso che nel pc (os, cpu, mobo) avviene quella cosa che attribuisci a mysql.

    Il processore sara' sicuramente multi-core e multi-threads, Qualche processore virtualizza dei threads, altri ne gestiscono uno per core.
    Ora se apache apre un gruppo di 4 threads sullo script php (valutando i microsecondi ottenuti credo sia cosi') non e' detto che tutti i threads siano terminati nello stesso ordine di lettura dei microsecondi che fa lo script php.

    Aggiungi poi il blocco della tabella in scrittura (che comprende anche la lettura) significa che hai 4 connessioni in attesa di leggere (prima) e poi inserire i dati. ora mysql esegue le query in modo seriale cioe' sempre 1 alla volta, mentre i threads aperti da apache lavorano in modo parallelo cioe' contemporaneamente. Va da se che potrebbero presentarsi a MySql in ordine sparso, ma con una logica di raggruppamento dei microsecondi abbastanza omogenea. Verificando i valori dei microsec (i pochi che si vedono postati) lo si puo' valutare.

    Per me il problema e' in questi termini. Prova se hai la possibilta' ad eseguire il test su un single core e vedrai che i problemi spariranno.
    Ultima modifica di piero.mac; 04-02-2014 a 15:48

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.