Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    40

    [HELP Mysqli lento] mysql -> mysqli: lentezza e errori

    Ciao,
    ho 'convertito' il codice php di un sito per passare da mysql a mysqli, metodo procedurale.
    Dopo la conversione ho notato:
    - lentezza nell'apertura delle pagine, soprattutto quelle con maggiori connessioni al database
    - errori di "max_user_connections" mai comparsi con mysql (stesse query)
    Sul medesimo hosting se riapro il sito in 'versione' mysql è tutto a posto e veloce.
    Il problema è che anche in locale (easy php) sembra più lento quindi escluderei problemi relativi al servizio hosting.
    Qualcuno ha idea di cosa possa essere o come fare per identificare il problema?
    Ultima modifica di Flaquiz; 02-08-2014 a 12:04

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    40
    Da alcuni accertamenti sembra siano proprio le connessioni al server ad essere più lente, se sono poche nello script non si nota ma se ce ne sono varie (pur utilizzando mysqli_close) rallenta vistosamente, anche per 5-6 secondi! Era immediato con mysql nelle stesse condizioni, non ne vengo a capo… ..è come se utilizzasse più risorse o non le liberasse.
    Ultima modifica di Flaquiz; 02-08-2014 a 16:32

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ma cosa intendi per connessioni? Proprio le connect o query varie?
    Spero che la connessione tu la faccia una sola volta all'interno dello script e per il resto siano solo semplici query, non avrai mica messo la connect dentro un ciclo, vero?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    40
    Ciao e grazie Alhazred. Ho ad esempio la pagina index.php con all'interno inclusi alcuni script php, ognuno dei quali ha la connessione al server e la chiusura della connessione dopo la query. Effettivamente la pagina con la latenza maggiore aveva per errore una connessione in un ciclo foreach (ci sono arrivato prima della tua risposta ma ci hai preso in pieno!).
    Mi sembra comunque strano che addirittura la pagina con la connect in un ciclo venisse riprodotta istantaneamente con mysql mentre con mysqli desse errori o fosse lenta. Che mysqli sia più 'restrittivo'?
    Ultima modifica di Flaquiz; 02-08-2014 a 17:42

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Se gli script con le connessioni li usi solo inclusi nella pagina index.php, la connessione falla solo nella pagina index.php, gli script useranno quella, così la connessione la fai solo una volta.

    Il motivo per cui mysqli è lento e mysql no sta nella descrizione che se ne legge sul manuale.

    mysqli_connect
    Opens a connection to the MySQL Server running on.
    mysql_connect
    Opens or reuses a connection to a MySQL server.
    Quindi mysqli_connect effettivamente reinizializza la connessione, anche se una connessione è già attiva, mysql_connect invece se esiste usa quella esistente.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    40
    Grazie, molto gentile. Quindi bisogna cercare di utilizzare sempre meno connessioni possibili e chiuderle prima che ne venga aperta un'altra, è corretto? Se mysql chiudeva un'occhio, con mysqli non si scherza Ho effettuato una prova impostando l'ip del server del database rispetto al nome dell'host e sembrerebbe il tutto molto più rapido ed efficiente, mysqli si differenzia da mysql anche per questo? Preferisci una connessione 'numerica'?

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Il fatto è che se tu passi l'indirizzo IP, non c'è bisogno della traduzione, perché quando tu per esempio scrivi un indirizzo sul browser, il browser contatta un server DSN che legge la sua tabella in cui ha le corrispondenze tra URL e indirizzi IP e da qui parte la connessione al sito voluto, se usi direttamente l'indirizzo IP invece la traduzione non è necessaria e l'operazione si velocizza un po'.
    Lo stesso discorso vale per un webserver che deve connettersi a un db, ma la differenza dovrebbe essere davvero minima visto che tutta l'operazione dovrebbe restare interna all'hosting provider dato che dovrebbe essere tutto in locale.

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.