Visualizzazione risultati 1 fino 10 di 10

Discussione: Database mysql rallentato

  1. #1
    Guest

    Predefinito Database mysql rallentato

    Sto riscontrando dei problemi che non riesco a capire riguardo al database.
    Come si vede da questa pagina (link) il caricamento di una normale pagina html è istantaneo.
    Qualora però si intendesse caricare un pagina php con annessa query (tipo questa) ci si accorge che il caricamento è davvero lento. Questo non succedeva all'inizio quindi non può essere un problema di codici.
    Che si può fare? Qualcuno ha qualche idea?

    P.S. lo spazio occupato è dello 0% così come il traffico (quindi non deriva neanche da questo).
    Allora da cosa? Sinceramente non ne ho idea e l'unica cosa che mi viene in mente è che c'è qualcosa che non va con il file htaccess. Se mi dite che può essere il problema vi posto il contenuto, altrimenti ditemi cosa fare che non so dove mettere le mani

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Non c'è motivo che vada così lento se non una query molto poco ottimizzata.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Se fosse poco ottimizzata allora anche all'inizio sarebbe dovuta andare così lenta, eppure la velocità di interrogazione era quasi istantanea.
    Comunque per ogni dubbio ecco la query li utilizzata:

    Codice PHP:
    <?php
    // hostname
    $nomehost = "";
    // utente per la connessione a MySQL
    $nomeuser = "";
    // password per l'autenticazione dell'utente
    $password = "";
    //Database
    $db = "";

    $data = new mysqli($nomehost, $nomeuser, $password, $db);
    include
    "login.php";
    $log = new login();

    if (
    mysqli_connect_errno()) {
    // notifica in caso di errore
    echo "Errore in connessione al DBMS: ".mysqli_connect_error();
    // interruzione delle esecuzioni i caso di errore
    exit();

    }

    //viene inviata una nuova news
    if(isset($_POST['news_send'])) {
    $url = trim($_POST['news_url']);
    $nome = trim($_POST['news_nome']);
    $desc = trim($_POST['news_desc']);

    $sql = "insert into news(nome, url, descrizione) values ('$nome', '$url', '$desc');";
    $result = $data->query($sql);
    if (!
    $result) die('Errore: ' . mysqli_error($data));
    }

    //viene inviata una nuova informazione dal continente
    if(isset($_POST['con_send'])) {
    $url = trim($_POST['con_url']);
    $nome = trim($_POST['con_nome']);
    $desc = trim($_POST['con_desc']);
    $citta = trim($_POST['con_citta']);

    $sql = "insert into continente(nome, url, citta, descrizione) values ('$nome', '$url', '$citta', '$desc');";
    $result = $data->query($sql);
    if (!
    $result) die('Errore: ' . mysqli_error($data));
    }

    ?>

    <html>
    <head>
    <link href="stilepag.css" rel="stylesheet" type="text/css">
    <script type="text/javascript">
    function apri(s, h, l){
    var w = 1;
    while(document.getElementById(w)){
    document.getElementById(w).style.display='none';
    w++;
    }
    document.getElementById(s).style.display='block';
    document.getElementById(h).className = 'botact';
    document.getElementById(l).className = 'botdis';
    }
    </script>
    </head>
    <body>

    <?php
    $cont
    = "select max(data) as data
    from continente"
    ;
    $news = "select max(data) as data from news;";
    $cont = $data->query($cont);
    $news = $data->query($news);
    $obj1=mysqli_fetch_object($cont);
    $obj2=mysqli_fetch_object($news);
    if((
    $obj1->data) > ($obj2->data)) $valore = 0; //di recente è stato inserito il continente
    else $valore = 1; //di recente è stato inserito una news
    echo "<a id=\"news\" onClick=\"apri(1, 'news', 'cont')\" class=\"";
    if (
    $valore===0) echo "botdis\">News</a>";
    else echo
    "botact\">News</a>";
    echo
    " <a id=\"cont\" onClick=\"apri(2, 'cont', 'news')\" class=\"";
    if (
    $valore===1) echo "botdis\">Dal Continente</a>";
    else echo
    "botact\">Dal Continente</a>";
    echo
    "<br><br>
    <div class=\"quadro\" id=\"1\" style=\""
    ;//tabella news
    if ($valore===0) echo "display: none\">";
    else echo
    "\">";
    $sql = "select *
    from news
    order by data desc
    limit 30;"
    ;
    $result = $data->query($sql);
    if(
    $result->num_rows >0){
    // generazione di un array numerico
    while($obj=mysqli_fetch_object($result)){

    $giorno = ($obj->data);
    $a = date('d/m/Y',strtotime($giorno));
    $desc = stripslashes($obj->descrizione);
    $url = stripslashes($obj->url);
    $nome = stripslashes($obj->nome);
    echo
    '<b>'.$a.' - <a href="' . $url .'" target="_parent">'.$nome .'</a></b> '.$desc . '<br><hr>';
    }
    }
    if(
    $log->connesso()) {
    echo
    '<br>Aggiungi News
    <br><form name="new" method="post" action="">
    Nome <input name="news_nome" type="text" value="">
    <br>URL <input name="news_url" type="text" value="">
    <br>Descrizione <textarea name="news_desc"></textarea>
    <br><button type="submit" name="news_send">Invia</button>
    </form>'
    ;
    }
    echo
    "</div>";

    echo
    "<div class=\"quadro\" id=\"2\" style=\"";//tabella continente
    if ($valore===1) echo "display: none\">";
    else echo
    "\">";
    $sql = "select *
    from continente
    order by data desc
    limit 30;"
    ;
    $result = $data->query($sql);
    if(
    $result->num_rows >0){
    // generazione di un array numerico
    while($obj=mysqli_fetch_object($result)){
    $giorno = ($obj->data);
    $a = date('d/m/Y',strtotime($giorno));
    $url = stripslashes($obj->url);
    $nome = stripslashes($obj->nome);
    $desc = stripslashes($obj->descrizione);
    $citta = stripslashes($obj->citta);
    echo
    '<b>'.$a.' - <a href="' . $url .'" target="_parent">'.$nome .'</a> ' . $citta .'</b>: '.$desc . '<br><hr>';
    }
    }
    if(
    $log->connesso()) {
    echo
    '<br>Aggiungi News dal Continente
    <br><form name="new_con" method="post" action="">
    Nome <input name="con_nome" type="text" value="">
    <br>URL <input name="con_url" type="text" value="">
    <br>Città: <select id="con_citta" name="con_citta">
    <option value="citta1" selected>citta1</option>
    </select>
    <br>Descrizione <textarea name="con_desc"></textarea>
    <br><button type="submit" name="con_send">Invia</button>
    </form>'
    ;
    }
    echo
    "</div>";
    ?>

    </body>
    </html>

    <?php
    $data
    ->close();
    ?>
    e questo è il file nell'include:
    Codice PHP:
    <?php
    session_start
    ();

    class
    login {

    public function
    log(){
    if(
    $_SESSION['log'] == 1) {
    echo
    "Benvenuto Administrator<br>";
    return;
    }

    echo
    '<form name="log" method="post" action="">
    User <input name="log_user" type="text" value="">
    <br>Pass <input name="log_pass" type="password" value="">
    <br><button type="submit" name="log_send">Invia</button>
    </form>'
    ;

    }

    public function
    connesso(){
    if(
    $_SESSION['log'] == 1)return true;
    else return
    false;

    }

    }


    ?>

  4. #4
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    La disottimizzazione di una query normalmente si manifesta quando crescono i dati su cui lavora, quindi sì, è possibile che nel tempo le performances peggiorino, dovresti eseguire un explain <query> da phpmyadmin su ogni query che lo script esegue.

    C'è inoltre Cloudflare attivo, che fa caching dei contenuti statici, non sempre delle pagine dinamiche.
    Gianluca

  5. #5
    Guest

    Predefinito

    Allora ho fatto l'explain su
    Codice:
    SELECT * 
    FROM news
    ORDER BY DATA DESC 
    LIMIT 30 ;
    e il risultato è stato questo:
    id: 1
    select_type: SIMPLE
    table: news
    type: ALL
    possible_keys: null
    key: null
    key_len: null
    ref: null
    rows: 7
    entra: using filesort
    Sinceramente non capisco cosa significano i vari campi ma, sinceramente, essendo 7 le righe su cui iterare.. non credo che possa portare a tutta questa lentezza (poi ovviamente non so).

    Per il cloudfire, altrimenti, come si potrebbe fare? C'è qualche modo per risolverlo?

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    L'explain ti dice che non sta usando alcun indice, ma ovviamente su sole 7 righe non fa testo.

    Quando ci mette su phpMyAdmin per eseguire la query?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    Guest

    Predefinito

    mezzo secondo, davvero un attimo

  8. #8
    Guest

    Predefinito

    Non so perchè ma ora è tornato normale... Non so perchè. Vabbè, metto risolto?

  9. #9
    Guest

    Predefinito

    È di nuovo lento e non me ne capacito. La mia supposizione, a questo punto, è che ci sono dei problemi con la lettura di pagine php.
    Ho messo che deve stampare una stringa all'inizio (prima riga di codice) e ovviamente non stampa niente se non alla fine quando è tutto pronto.
    Altra cosa è che in basso scrive il browser: "in attesa di risposta da ..."
    Non so, ditemi voi...

  10. #10
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    Dal tuo script prova ad escludere una ad una le queries e vedi cosa succede. Dovresti analizzarle tutte.
    Gianluca

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •