Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Troppe query piccole o poche e pesanti?

    Ciao,
    da qualche giorno il server dedicato su cui ho il mio sito mi da il problmema di TOO MANY CONNECTIONS in orari strani, tipo le 8 di mattina oppure la domenica sera, e non è possibile navigare nelle pagine che usano connessioni mysql.
    Allora ho contattato l'assistenza e mi hanno detto che ci sono tra le 150 e le 200 connessioni mysql attive e troppe query al secondo quindi mi occorrerebbe una macchina più potente (è un P4 con 2 giga di ram, non windows).

    Premetto che:
    - non uso conenssioni persistenti o permanenti
    - chiudo la connessione mysql a fine pagina, o meglio non appena non serve piu' in quella pagina
    - sul server ci sono solo 3 siti che fanno in totale circa 10mila accessi unici al giorno
    - in situazioni normali è velocissimo ma in alcuni momenti va molto lento e poi da l'errore TOO MANY....

    Mi sono reso conto che per non appesantire le query non faccio mai join ma faccio query a cascata...ad esempio:

    Faccio il select di un film all'interno della tabella FILM e poi faccio i select delle varie tabelle GENERE, CATEGORIA, CASA...

    MAGARI IL PROBLEMA DELLE TROPPE CONNESSIONI ATTIVE E' DATO PROPRIO DA QUESTO MIO MODO DI FARE LE QUERY? E UN MODO SBAGLIATO?


    $result_dvd = mysql_query("SELECT * FROM film WHERE id_dvd=$id_dvd LIMIT 1 ",$conn) or die(mysql_error($conn));
    $dvd=mysql_fetch_array($result_dvd);
    $titolo=stripslashes($dvd['titolo']);
    $codice=$dvd['codice'];
    $img=stripslashes($dvd['img']);
    $trama=nl2br(stripslashes($dvd['trama']));
    $regia=stripslashes($dvd['regia']);
    $attori=stripslashes($dvd['attori']);
    $id_genere=$dvd['id_genere'];
    $anno=stripslashes($dvd['anno']);
    $id_casa=$dvd['id_casa'];
    $data_uscita=datefr($dvd['data_uscita']);
    $id_categoria=$dvd['cat'];

    $result_casa=mysql_query("SELECT casa FROM film_case WHERE id_casa=$id_casa LIMIT 1 ",$conn) or die(mysql_error($conn));
    $case=mysql_fetch_array($result_casa);
    $casa=$case['casa'];

    $result_generi=mysql_query("SELECT genere FROM film_generi WHERE id_genere=$id_genere LIMIT 1 ",$conn) or die(mysql_error($conn));
    $generi=mysql_fetch_array($result_generi);
    $genere=stripslashes($generi['genere']);

    $result_cat=mysql_query("SELECT nome_categoria FROM shop_prodotti_categorie WHERE id_categoria='$id_categoria' LIMIT 1 ",$conn) or die(mysql_error($conn));
    $categorie=mysql_fetch_array($result_cat);
    $nome_categoria=$categorie['nome_categoria'];

  2. #2
    Ti consiglio di utilizzare le JOIN e non di fare tante query.
    Inoltre non aprire ogni volta la connessione al db, aprila una volta sola in un file php che includi nelle pagine e stop.
    Ad esempio:
    File: conn.php
    Codice PHP:
    mysql_connect("host","user","pass") or die (mysql_error());
    mysql_select_db("nome") or die (mysql_error()); 
    e poi includi sempre conn.php dove viene richiesta una connessione al db.
    Quindi cambi le query, ad esempio, da
    Codice PHP:
    $result_dvd mysql_query("SELECT * FROM film WHERE id_dvd=$id_dvd LIMIT 1 ",$conn) or die(mysql_error($conn)); 
    in
    Codice PHP:
    $result_dvd mysql_query("SELECT * FROM film WHERE id_dvd=$id_dvd LIMIT 1") or die(mysql_error()); 
    Spero di esserti stato d'aiuto.
    --Cosimo
    MAIL: cosimo.g18@gmail.com

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Il modo in cui fai le query è sicuramente sbagliato, ma questo non spiega comunque ciò che ti capita.
    Se è vero tutto quello che hai scritto, non vedo come si possano raggiungere le 150-200 connessioni attive. A meno che gli accessi non siano molto concentrati in determinati orari.
    Comunque comincia ad ottimizzare le query usando le join, poi vedi se cambia qualcosa

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.