soporta - optimizar consultas mysql explain
MySQL 10 veces más lento en un servidor en comparación con otro (2)
Lo primero que debes comprobar es el archivo de configuración de MySql para asegurarte de que estás utilizando la cantidad adecuada de memoria para las consultas ... como key_buffer, sort_buffer, etc. Hay personas mucho más inteligentes que yo que tienen blogs completos. dedicado a configurar MySql.
También puede anteponer su consulta con "explicar" para ver qué es lo que le está quitando más tiempo ... pero podría ser algo para uso general más adelante.
En realidad, su servidor "en vivo" tiene capacidades de almacenamiento en caché y el doble de núcleos para realizar estas consultas, y es probable que tenga suficiente potencia y memoria para explicar la diferencia en los tiempos de consulta entre los servidores.
Tengo un servidor en vivo y mi servidor de desarrollo, y estoy encontrando que las consultas en mi servidor LIVE (no dev) se ejecutan 10 veces más lento, a pesar de que el servidor en vivo es más poderoso y ambos ejecutan una carga comparable. No es una cuestión de estructura de base de datos porque cargo la copia de seguridad del servidor en vivo en mi servidor de desarrollo.
¿Alguien tiene alguna idea sobre dónde podría buscar la discrepancia? ¿Podría ser una cosa de configuración de MySQL? ¿Dónde debería empezar a buscar?
Servidor vivo:
mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as revenue FROM `transactions` AS `Transaction` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit`.`id`) WHERE (NOT (`Unit`.`building_id` IN (''1'', ''85'')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.`created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW()); +-------+---------+---------+ | count | sum | revenue | +-------+---------+---------+ | 413 | 3638550 | 409210 | +-------+---------+---------+ 1 row in set (2.62 sec) [root@mises ~]# uptime 17:11:57 up 55 days, 1 min, 1 user, load average: 0.45, 0.56, 0.60
Servidor Dev (el recuento de resultados es diferente debido al ligero retraso de la copia de seguridad):
mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as revenue FROM `transactions` AS `Transaction` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit`.`id`) WHERE (NOT (`Unit`.`building_id` IN (''1'', ''85'')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.`created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW()); +-------+---------+---------+ | count | sum | revenue | +-------+---------+---------+ | 357 | 3005550 | 338306 | +-------+---------+---------+ 1 row in set (0.22 sec) [www@smith test]$ uptime 18:11:53 up 12 days, 1:57, 4 users, load average: 0.91, 0.75, 0.62
Live Server (2 x Xeon Quadcore):
processor : 7 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz stepping : 2 cpu MHz : 2395.000 cache size : 12288 KB physical id : 0 siblings : 8 core id : 10 cpu cores : 4
Servidor Dev (1 x Quadcore)
processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz stepping : 10 microcode : 0xa07 cpu MHz : 1998.000 cache size : 2048 KB physical id : 0 siblings : 4 core id : 3 cpu cores : 4
Servidor vivo:
- CentOS 5.7
- MySQL ver 5.0.95
Servidor Dev:
- ArchLinux
- MySQL ver 5.5.25a
Por lo tanto, ejecuté la misma base de datos y consultas en una máquina virtual que ejecuta Centos, 1 CPU y 512 MB de memoria: proporciona la respuesta a esa consulta en 0,3 segundos; la carga del sistema es 0.4: /
La única diferencia real parece ser que estoy ejecutando Mysql 5.5 en ese servidor. Y parece que realmente hay una mejora de rendimiento de 10x en mi caso de Mysql 5.0 a Mysql 5.5.
Solo sabré con certeza una vez que haya migrado mis servidores en vivo de Mysql 5.0 a Mysql 5.5, confirmaré los resultados una vez que haya hecho eso.