quali file nella mia applicazione che rendono lento voci di registro di query Mysql

ho lottato per 2 giorni per questo problema e non ho trovato una soluzione.

registro mysql query lenta con periodo di 10 secondi. nel file di log ci sono grandi voci con questa istruzione:

# Thread_id: 222244  Schema: user  QC_hit: No
# Query_time: 51.019708  Lock_time: 0.000119  Rows_sent: 1  Rows_examined: 13295012
# Rows_affected: 0
SET timestamp=1559388099;
SELECT (COUNT(*)) AS `count` 
FROM statistics Statistics WHERE (id >= 1 AND ad_type <> 3);

che è associato con un aumento delle richieste di apache. query _ time è completato fino a un minuto o più e causa il sovraccarico del mio server. il problema è che non riesco a trovare quale file nel mio script php che causa le query lente.

c’è una riga di comando per trovare il file associato. o in qualche modo veloce?

CREATE TABLE statistics` (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    ... , 
    PRIMARY KEY (id), 
    KEY idx_uid (uid), 
    KEY idx_ip (ip), 
    KEY idx_cnid_uid (cid,uid), 
    KEY idx_rlid (rid), 
    KEY idx_created_uid (created,uid)
) ENGINE=InnoDB AUTO_INCREMENT=34015 DEFAULT CHARSET=utf8

EN From: Which Files In My Application that Make Slow Mysql Query Log Entries

More similar articles:

16 Comments

  1. ho provato questa riga, ancora non va bene: grep HIi -rnw “Statistics” ‘. / public _ html’ | cut -d: -f1
  2. personalmente ho collegare un profiler corretto PHP, e poi semplicemente controllare dove nel codice il tempo è speso. ma se volete cercarla manualmente, provate ad esempio 'id >=', 'ad_type <>', Statstic->find, Statistics->find, Statstic->find('count', Statstics->find('count', paginate('Statstic', paginate('Statstics', paginate($this->Statistic, paginate($this->Statistics… e in generale find('count' e ->count(), in quanto vi sono anche query di conteggio emesse dal nucleo di CakePHP in vari luoghi, per esempio durante il salvataggio dei dati. provate anche con virgolette doppie invece che singole.

  3. e assicurarsi che le colonne siano correttamente indicizzate, tale semplice query non dovrebbe richiedere alcuna quantità significativa di tempo, anche con milioni di righe.

  4. @ndm Ho id come chiave primaria e 5 altre colonne indicizzate in quella tabella. penso che sia sufficiente. e mi può raccomandare php profiler da usare? grazie.

  5. è possibile testare query sql da terminale? quanto hai memoria? prova la tua applicazione su altre impostazioni del server,..

  6. @RickJames | statistics | CREATE TABLE statistiche ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    ...
    ,
    PRIMARY KEY (
    id ),
    KEY
    idx uid ( uid ),
    KEY
    idx
    ip ( ipx ( {} idx cnid uid ( cid , uid ),
    KEY
    idx rlid ( idx {} id {} {} {} {} {}} {} {}} {}}
  7. @Salines Sì, tutto funziona bene. ho solo bisogno di trovare il file e limitare la riga di query associata. 8GB 4pu

  8. personalmente uso solitamente Xdebug per la profilazione. in ogni modo, secondo l’istruzione CREATE TABLE, non c’è indice su ad_type.

  9. se non vi è alcun motivo per controllare id >= 1, sbarazzarsi di esso – inibisce alcune ottimizzazioni.

    quindi aggiungere INDEX(ad_type)

    ancora, non vedo una buona ragione per COUNT(*) su un 34K-fila (?) tabella per prendere 51 secondi. qualcos’altro deve essere coinvolto.

    1. come accennato nella domanda, è accadere soltanto quando ci è un punto sulle richieste del apache. il mio prefork mpm <IfModule mpm_prefork_module>
      StartServers 5
      MinSpareServers 5
      MaxSpareServers 10
      MaxRequestWorkers 512
      ServerLimit 512
      MaxConnectionsPerChild 5000
      </IfModule>
      apache config Timeout 30
      KeepAlive On
      MaxKeepAliveRequests 500
      KeepAliveTimeout 5

    2. mi dispiace, i precedenti valori delle tabelle create erano dal mio database di debug, il vero db mostra questo ENGINE=InnoDB AUTO_INCREMENT=13437433 DEFAULT CHARSET=latin1
    3. spero che si può individuare il mio problema. si tratta più di trovare un bug nell’applicazione stessa ed eliminarlo piuttosto che ottimizzare una dichiarazione di query. con la crescita di circa 5 milioni di nuove file settimanali, diventerà presto la mia grande preoccupazione. ho bisogno di scoprire il file correlato nello script. come soluzione temporanea ho aggiunto l’indice per ad _ type. CREATE TABLE `statistics` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, ... , PRIMARY KEY (id), ..., KEY idx_created_uid (created,uid), KEY idx_adtype (ad_type)) ENGINE=InnoDB AUTO_INCREMENT=13455056 DEFAULT CHARSET=latin1

Leave a Reply

Your email address will not be published. Required fields are marked *