SQL_BIG_SELECTS

26 de June, 2008. Escrito por elOtro[Q] en PHP + MySQL

Hace un tiempo desarrollamos una tienda online.

El caso es que hasta ahora había estado funcionando sin ningún problema ni error. Pero ayer nos llega un email del cliente dicièndonos que la tienda ha dejado de funcionar.

Sorprendidos accedemos a la tienda, y efectivamente cuando seleccionabas una categoría la web mostraba un error. El mensaje de error que salía en la página decía lo siguiente:

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

Cargo la base de datos en local y como en otras muchas ocasiones, funciona.

¡Pues nada, será alguna opción de configuración del servidor!, tras investigar por el maravilloso mundo de internet (con google a la cabeza por supuesto) y darle un poco a la cabeza encontramos la solución.

El problema viene porque la tienda ya tiene un volumen considerable de artículos (unos 2660) y de categorías, y en una de las consultas se hacen bastantes relaciones entre ellas.

Ese error es debido a la variable de MySQL SQL_BIG_SELECTS.

SQL_BIG_SELECTS
Con valor 0, MySQL aborta los comandos SELECT que probablemente tardarán mucho tiempo (esto es, comandos para los que el optimizador estima que el número de registros examinados excede el valor de max_join_size). Esto es útil cuando un comando WHERE no aconsejable se ejecuta. El valor por defecto para una nueva conexión es 1, que permite todos los comandos SELECT .

Si cambia la variable de sistema max_join_size a un valor distinto a DEFAULT, SQL_BIG_SELECTS se pone a 0.

Para solucionar el error basta con ejecutar la consulta SET SQL_BIG_SELECTS=1
antes de ejecutar la consulta original problemática y listo!

El problema de todo radica en que cuando se desarrolla un sitio el testeo que se hace suele ser con un volumen pequeño de información, y que que cuando realmente el proyecto lleva un tiempo y ya tiene mucha información pueden surgir este tipo de problemillas.

Comments

One Response to “SQL_BIG_SELECTS”

  1. Martin on June 27th, 2008 8:26 am

    Lamentablemente es una política que están usando muchos hostings para cortarle recursos a los usuarios de hostings compartidos… y creo que yo, que mucha culpa del tema la tienen los blog.

    Ya no alcanza con romperse la cabeza para crear la “query” perfecta ahorrando conexiones, porque igual te cambiarán la configuración para limitarte algo.

    A mi me pasó hace poco con una función que redimensiona fotos que siempre funcionó y, de un día al otro, saltaba un error de que redimensionar la foto se comía toda la memoria de PHP… luego de poner verde al hosting… tema resuelto.

    Saludotes!

Leave a Reply