2015-07-29 32 views
15

Recentemente ho aggiornato il mio vecchio computer Windows in un gen. 4 I7 Ubuntu 15.04Migrazioni laravel/db: seed super slow

Corre come un sogno, beh ... Tranne che qualsiasi comando di Laravel artisan che tocca il database richiede un milione di anni per essere completato, mentre il mio vecchio computer eseguiva uno di quei comandi in pochi secondi.

La differenza principale è che invece di XAMPP sto eseguendo MySQL come servizio locale.

Anche nel mio vecchio computer ho potuto vedere come le migrazioni si presentavano lentamente sullo schermo mentre sembrano essere elaborate mentre ora, ci vogliono 2 ~ 5 minuti e quando viene fatto l'intero elenco di migrazione viene mostrato in una volta. Questo potrebbe indicare un collo di bottiglia di sorta da qualche parte.

Da qualche parte in giro per internet qualcuno ha detto di usare '127.0.0.1' invece di 'localhost' a causa della risoluzione DSN. Non l'ho risolto.

Per assicurarsi che non è questo il problema mi sono imbattuto

$time = microtime(true); 

    //also with host=127.0.0.1 
    new PDO("mysql:host=localhost;dbname=some_db", "username", "password"); 

    //some simple queries here... 

    //yielded similar marginal times 
    echo microtime(true) - $time; 

~ halp


Modifica

ho raccolto i tempi di esecuzione per ogni query dal quadro, ho LOTS delle migrazioni, analizzando i dati che ho trovato non c'è niente di follemente lento (come aq sto correndo per un minuto).

Here's a link with the data. Le domande effettive sono state accettate a favore del mio datore di lavoro.

Sebbene ci siano molte query in esecuzione per un secondo o più, il più lento, number 221 richiede 3,5 secondi.

Ho un centinaio di migrazioni (lo so) ma ecco la cosa, se ogni migrazione richiedesse un secondo, aspetterei circa un minuto e mezzo per migrare, ma spesso ci vogliono dai 4 ai 5 minuti.

Come suggerito da oliverpool, ho fatto un po 'di profilazione riproducendo query sul mysql attraverso il terminale, ma ho mai dovuto aspettare più di un secondo con la query media prendendo in giro Decima di secondo.

Ecco un pic della profilatura per la query lenta (3.5secs nella migrazione, non è vicino a una seconda nella foto)

enter image description here

Forse punti per la connessione? A proposito: il log delle query lente è vuoto dopo aver eseguito le migrazioni.

Inoltre, sto usando laravel 5 ora e il comportamento è lo stesso. Non so come risolvere i problemi di connessione, quindi suppongo che alcuni googling siano in ordine, tutti i suggerimenti sono ben accetti.

Grazie in anticipo.

+1

È possibile eseguire alcune query nel client mysql per assicurarsi che MySQL non sia lento. Inoltre, esegui 'php -v' per assicurarti che PHP non sia lento. – BrokenBinary

+0

Sei sicuro che la tua configurazione DB di Laravel sia corretta? Forse puoi fare un po 'di profilazione, per vedere quali query sono eseguite da artigiano e riprodurle. – oliverpool

+0

Forse la tua configurazione MySQL? Potrebbe esserci un seme inefficiente nel codice? – Chris

risposta

4

In questo caso, penso che sia necessario l'incremento della dimensione del pool di buffer. Impostare quanto segue:

[mysqld] 
innodb_io_capacity = 2000 
innodb_read_io_threads = 64 
innodb_thread_concurrency = 0 
innodb_write_io_threads = 64