Autore | Messaggio |
nemina Frequentatore
Registrato: Jun 09, 2013 Messaggi: 5
|
Oggetto: problema provider : numero molto elevato di query |
|
|
Salve,
Ho nuke 7.6...
ieri mi è arrivata una mail dal mio provider che ospita il mio db mysql ...ma non capisco cosa dovrei fare:
in tutto questo è da un po di mesi che il mio portale è instasato da circa 500 visitatori al giorno costanti..e iscrizioni spam...
faccio sempre ottimizza e le tabelle che si riempon subito sono
nuke_bbsearch_results
nuke_bbsessions
ma soprattutto nuke_session
Gentile Cliente,
il database a lei intestato ha creato problemi
al server DB Mysql su cui risiede a causa di query
effettuate su di esso.
E' stato rilevato un numero molto elevato e costante
di query, che creano rallentamenti sul server, della quali
riporto qui di seguito un esempio:
UPDATE nuke_stats_hour
SET hits=hits+1
WHERE (year='2013')
AND (month='06')
AND (date='07')
AND (hour='15')
Le suggeriamo di rivedee l'applicazione che genera tali query e
di applicare le necessarie misure affinché il problema non si
ripresenti (ad es. tramite l'applicazione di indici alla tabella
in questione).
In caso contrario, se il problema dovesse ripresentarsi, potremmo
dover ricorrere al blocco temporaneo della tabella o dell'intero
database.
|
|
Inviato:
Dom Giu 09, 2013 10:03 am |
|
|
|
|
Sertek Affezionato
Registrato: May 25, 2005 Messaggi: 58
|
Oggetto: |
|
|
E' molto tempo che non programmo in php ma siccome è un problema
anche mio, ridurre query e dimensione database, ci provo.
Apri il file counter.php che si trova nella cartella includes
nell'ultima riga aggiungi due slash, per commentarla:
Codice: | //$db->sql_query("UPDATE ".$prefix."_stats_hour SET hits=hits+1 WHERE (year='$nowYear') AND (month='$nowMonth') AND (date='$nowDate') AND (hour='$nowHour')"); |
d'ora in avanti non aggiungerà più le statistiche orarie.
Ciao
|
|
Inviato:
Sab Giu 15, 2013 2:40 pm |
|
|
nemina Frequentatore
Registrato: Jun 09, 2013 Messaggi: 5
|
Oggetto: |
|
|
Ciao!
Grazie mille fatto...vediamo come va...
per ora ho disabilitato anche le iscrizioni...(anche se devono essere approvate dall amministratore cmq 50 al giorno è un problema)...
ma devo trovare un modo per non avere piu le visite spam...
|
|
Inviato:
Sab Giu 15, 2013 6:17 pm |
|
|
nemina Frequentatore
Registrato: Jun 09, 2013 Messaggi: 5
|
Oggetto: |
|
|
mmm provato ma non è cambiato molto
In total hits il conteggio continua...
come fare per far diminuire qs?
nuke_bbsearch_results 4 mb
nuke_bbsessions 55 mb
nuke_session 41 mb
|
|
Inviato:
Dom Giu 16, 2013 10:09 am |
|
|
Sertek Affezionato
Registrato: May 25, 2005 Messaggi: 58
|
Oggetto: |
|
|
nemina ha scritto: | mmm provato ma non è cambiato molto
In total hits il conteggio continua...
come fare per far diminuire qs?
nuke_bbsearch_results 4 mb
nuke_bbsessions 55 mb
nuke_session 41 mb |
Le sessioni sono un modo semplice per archiviare dati per singoli utenti e vengono inviati al browser tramite i cookie di sessione per ottimizzare la navigazione.
Per questo non puoi fare nulla perché gestito da phpnuke.
Se hai molti utenti e normale che i dati di sessione sono di parecchi MB.
Prima di fare un backup del database bisognerebbe fare Optimize DB
da pannello di amministrazione per svuotare i dati non più utilizzati.
Per le query al server Mysql stò modificando anche il mio modulo statistiche
per togliere tutte quelle che riguardano l'ora, per me inutili.
Se hai un po di pazienza posto tutte le modifiche appena finito di testatarle.
Ciao
|
|
Inviato:
Dom Giu 16, 2013 11:09 am |
|
|
Sertek Affezionato
Registrato: May 25, 2005 Messaggi: 58
|
Oggetto: |
|
|
Eccomi qua
Apri il file counter.php e commenta questa parte di codice (dalla riga 96 a 105):
Codice: | /* questo crea le 24 ore nel database con statistiche a zero
$sql = "SELECT hour FROM ".$prefix."_stats_hour WHERE (year='$nowYear') AND (month='$nowMonth') AND (date='$nowDate')";
$result = $db->sql_query($sql);
$numrows = $db->sql_numrows($result);
if ($numrows <= 0) {
for ($z = 0;$z<=23;$z++) {
$db->sql_query("INSERT INTO ".$prefix."_stats_hour VALUES ('$nowYear','$nowMonth','$nowDate','$z','0')");
}
}*/ |
Apri il file index.php del modulo Statistics e alle righe 224 - 225
sostituisci:
Codice: | echo ""._MOSTHOUR.": $hour "._ON." $month $date, $year ($hits "._HITS.")<br><br>"
."[ <a href=\"modules.php?name=$module_name\">"._RETURNBASICSTATS."</a> ]</center>"; |
Con:
Codice: | // echo ""._MOSTHOUR.": $hour "._ON." $month $date, $year ($hits "._HITS.")<br><br>" // ora con piu traffico da togliere
echo "<br><br>[ <a href=\"modules.php?name=$module_name\">"._RETURNBASICSTATS."</a> ]</center>"; |
Poco sotto alla riga 235 commenta questa riga: Codice: | // showHourlyStats($nowyear,$nowmonth,$nowdate); // modifica per togliere le statistiche orarie |
Riga 269 commenta la funzione DailyStats
Codice: | /* modificato per statistiche orarie (pagina richiamata cliccando sul giorno)
function DailyStats($year,$month,$date){
global $sitename, $module_name;
include("header.php");
title("$sitename "._STATS."");
opentable();
$year = intval($year);
$month = intval($month);
$date = intval($date);
showHourlyStats($year,$month,$date);
echo "<BR>";
echo "<center>[ <a href=\"modules.php?name=$module_name\">"._BACKTOMAIN."</a> | <a href=\"modules.php?name=$module_name&op=Stats\">"._BACKTODETSTATS."</a> ]</center>";
closetable();
include("footer.php");
}*/ |
Nella funzione ShowDailyStats modificare Codice: | if ($date != $nowdate) {
echo "<a href=\"modules.php?name=$module_name&op=DailyStats&year=$year&month=$month&date=$date\" class=\"hover_orange\">";
echo $date;
echo "</a>";
} else {
echo $date;
} |
Con Codice: | if ($date != $nowdate) {
// echo "<a href=\"modules.php?name=$module_name&op=DailyStats&year=$year&month=$month&date=$date\" class=\"hover_orange\">";
echo $date;
// echo "</a>"; // modificato per togliere la pagina delle statistiche oraria
} else {
echo $date;
} |
Commentare la funzione showHourlyStats Codice: |
/* modificato per togliere statistiche orarie
function showHourlyStats($year,$month,$date){
global $prefix,$bgcolor1,$bgcolor2,$db, $ThemeSel;
$l_size = getimagesize("themes/$ThemeSel/images/leftbar.gif");
$m_size = getimagesize("themes/$ThemeSel/images/mainbar.gif");
$r_size = getimagesize("themes/$ThemeSel/images/rightbar.gif");
$resulttotal = $db->sql_query("SELECT sum(hits) as TotalHitsHour from ".$prefix."_stats_hour where year='$year' and month='$month' and date='$date'");
list($TotalHitsHour) = $db->sql_fetchrow($resulttotal);
$db->sql_freeresult($resulttotal);
$nowdate = date("d-m-Y");
$nowdate_arr = explode("-",$nowdate);
echo "<center><b>"._HOURLYSTATS." ";
echo getmonth($month)." ".$date.", " .$year."</b></center><br>";
echo "<table align=\"center\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"3\" border=\"0\">";
echo "<tr><td width=\"25%\" bgcolor=\"$bgcolor2\">"._HOUR."</td><td bgcolor=\"$bgcolor2\" width=\"70%\">"._SPAGESVIEWS."</td></tr>";
for ($k = 0;$k<=23;$k++) {
$result = $db->sql_query("select hour,hits from ".$prefix."_stats_hour where year='$year' and month='$month' and date='$date' and hour='$k'");
if ($db->sql_numrows($result) == 0){
$hits=0;
} else {
$row = $db->sql_fetchrow($result);
$hour = intval($row['hour']);
$hits = intval($row['hits']);
}
echo "<tr><td bgcolor=\"$bgcolor1\">";
if ($k < 10) {
$a = "0$k";
} else {
$a = $k;
}
echo "$a:00 - $a:59";
$a = "";
echo "</td><td bgcolor=\"$bgcolor1\">";
if ($hits == 0) {
$WidthIMG = 0;
$d_percent = 0;
} else {
$WidthIMG = round(100 * $hits/$TotalHitsHour,0);
$d_percent = substr(100 * $hits / $TotalHitsHour, 0, 5);
}
echo "<img src=\"themes/$ThemeSel/images/leftbar.gif\" Alt=\"\" width=\"$l_size[0]\" height=\"$l_size[1]\"><img src=\"themes/$ThemeSel/images/mainbar.gif\" height=\"$m_size[1]\" width=",$WidthIMG * 2," Alt=\"\">"
."<img src=\"themes/$ThemeSel/images/rightbar.gif\" Alt=\"\" width=\"$r_size[0]\" height=\"$r_size[1]\"> $d_percent% ($hits)</td></tr>"
."</td></tr>";
}
$db->sql_freeresult($result);
echo "</table>";
}*/ |
In questo modo ho eliminato tutto quello che riguarda le statistiche orarie che generano molte query inutili.
Ciao
|
|
Inviato:
Mar Giu 18, 2013 9:56 am |
|
|
nemina Frequentatore
Registrato: Jun 09, 2013 Messaggi: 5
|
Oggetto: |
|
|
ciao..innanzitutto grazie mille..
Scusa la mia ignoranza ma commentare vuol dire aggiungere due slash all inizio giusto?
*/ alla fine a ke serve?
ad esempio nel counter.php
devo mettere quello ke hai incollato tu piu le slash?
Codice: | /* questo crea le 24 ore nel database con statistiche a zero
//$sql = "SELECT hour FROM ".$prefix."_stats_hour WHERE (year='$nowYear') AND (month='$nowMonth') AND (date='$nowDate')";
$result = $db->sql_query($sql);
$numrows = $db->sql_numrows($result);
if ($numrows <= 0) {
for ($z = 0;$z<=23;$z++) {
$db->sql_query("INSERT INTO ".$prefix."_stats_hour VALUES ('$nowYear','$nowMonth','$nowDate','$z','0')");
}
}*/ |
oppure devo mettere solo le slash
Codice: | //$sql = "SELECT hour FROM ".$prefix."_stats_hour WHERE (year='$nowYear') AND (month='$nowMonth') AND (date='$nowDate')";
$result = $db->sql_query($sql);
$numrows = $db->sql_numrows($result);
if ($numrows <= 0) {
for ($z = 0;$z<=23;$z++) {
$db->sql_query("INSERT INTO ".$prefix."_stats_hour VALUES ('$nowYear','$nowMonth','$nowDate','$z','0')");
}
}
|
|
|
Inviato:
Dom Giu 23, 2013 11:01 am |
|
|
Sertek Affezionato
Registrato: May 25, 2005 Messaggi: 58
|
Oggetto: |
|
|
Per commentare una singola riga si usa il doppio slash //
Per commentare più righe contemporaneamente si usano
all'inizio e alla fine della parte che si vuole commentare.
Fai senza aggiungere le due slash
Ciao
|
|
Inviato:
Dom Giu 23, 2013 11:59 am |
|
|
nemina Frequentatore
Registrato: Jun 09, 2013 Messaggi: 5
|
Oggetto: |
|
|
mmm...quindi riferendosi al file counter ad esempio...qual'è quello giusto? il primo vero?
|
|
Inviato:
Dom Giu 23, 2013 12:06 pm |
|
|
Sertek Affezionato
Registrato: May 25, 2005 Messaggi: 58
|
Oggetto: |
|
|
Si anche se non è necessario aggiungere le due slash
Se sostituisci i codici originali con quelli che ho postato dovresti essere a posto
Ciao
|
|
Inviato:
Dom Giu 23, 2013 1:01 pm |
|
|
|