Expertos en SQLs

11 Febrero, 2010

Tecnología

Hace unos años me hice experto en SQLs y optimización de procesos. Aprendí a la fuerza trabajando para gran compañía eléctrica, teníamos que procesar milliones de registros varias veces al día, en un Pentium 400Mhz 🙂

Cuando tienes pocos recursos de hardware y tienes que mover mucha información tienes que mirar con lupa cada una de las SQLs que se hace, y diseñar muy bien los procesos, aplicar técnicas de caché, paralelismo, etc…

Durante seis meses, la facturación de los mejores clientes, la estuvimos haciendo en varios PC (en el mío, y en el de dos compañeros), si de verdad, estas cosas pasan, millones de euros en manos de un programa en Visual Basic, con BBDD Access y Sql Server

A lo que iba, conseguimos optimizando muchísimo, que el proceso fuera escaláble, soportara rearranque, y distribuido. El mismo proceso, mal hecho, requirió un año más tarde un MainFrame de IBM con una capacidad de proceso 100 veces superior a lo que teníamos.

Los programadores se suelen olvidar constantemente del rendimiento, muchas veces por que no tienen visión de futuro (cuanto mi web tenga éxito, entonces la optimizo).

Últimamente reviso mucho código PHP Open Source, y es penoso, después nos encontramos con casos como Magento, que requiere de casi un hosting dedicado.

Pero ¿cuantos programadores tienen conocimiento de escalabilidad y optimización de procesos?¿donde se aprende eso?

La mayoría de los fabricantes de BBDD tienen libros y recomendaciones sobre optimización, y hay muchos artículos en la red, pero nadie suele mirarlos, hasta que se encuentran con el gran problema.

¿Es necesario mirarlo desde el principio o se puede hacer después?

Un compañero decía que no hacía falta mirarlo; si después va lento, compramos más hardware y listo. Pero esto no es realmente así, hay procesos que no se pueden arreglar, es conveniente hacerlo desde el principio.

Como ejemplo, el software de comercio electrónico ZenCart, lanza 1400 SQLs para mostrar la ficha de un producto. Con técnicas de caché se queda en 600 SQL, en uno de los servidores que he monitorizado, se estaban lanzando unas 100.000 consultas por segundo en hora punta, por supuesto, la base de datos no podía.

Muchas de estas consultas, el MySQL las estaba cacheando, con lo cual no eran consultas reales, pero no obstante son una burrada.

Hicimos una prueba con la ficha del producto, y pasamos de las 1400 consultas a 100.

¿Como lo hacemos?

Hay muchas técnicas, no voy a explicarlas todas, pero la que más me gusta un caché dinámico que implementamos hace tiempo, la verdad, me quedó muy bien. Este tipo de caché los incorporan las BBDD, pero si lo ponemos en el servidor web, el rendimiento aumenta brutalmente.

El sistema intercepta todos los accesos a BBDD, y crea unas estadísticas de uso de tablas.

  • Si una tabla se accede constantemente y tiene pocos valores, es un candidato para cache.
  • Si un valor específico se accede constantemente se marca como candidato a constante, por ejemplo, los parámetros de configuración de una tienda; nombre, email del propietario, etc….
  • Si una tabla, no cambia en el tiempo, se marca como cache.

¿Como funciona el cache? Y por qué la mayoría de los cache de PHP no valen.

Un caché en un sistema que almacena en memoria o disco, una petición al servidor de base de datos, de forma que a la próxima llamada se recupera más fácilmente. La mayoría de los caches PHP no funcionan bien, por que cachean a nivel de usuario, si nuestra web tiene 1000 usuarios activos, tendría 1000 sistemas de cache.

El caché debe ser global a todos los usuarios, pera ello, es necesario un caché en disco o memoria compartida. En este punto, la mayoría de las implementaciones, serializan los datos en algún formato binario comprimido, pero mi idea fue mucho mejor, generar código PHP, os lo explico.

Si hay un parámetro en BBDD como ShopName: Nombre de la tienda. El sistema de caché genera un fichero cache.php con define(‘_SHOPNAME_’, ‘nombre de la tienda’);

Si tenemos que guardar una lista con las provincias, generamos un array de provincias en PHP.

Esta técnica es realmente potente, en una tienda online, el 90% de los datos consultados en la BBDD son siempre los mimos.

, ,

Subscribe

Subscribe to our e-mail newsletter to receive updates.

3 Responses to “Expertos en SQLs”

  1. JMChia Says:

    Yo para estos casos uso el SQL CACHE, en la 5.3 lo han mejorado bastante.

    Basta con añadir SQL_CACHE y lo hace automático:

    SELECT SQL_CACHE id, name FROM customer;

    Para los insert y update me gusta más usar el mysql prepare, he bajado tiempos hasta x10 en algunos procesos 🙂

Trackbacks/Pingbacks

  1. Expertos en SQLs | DbRunas - 11 Febrero, 2010

    […] http://juan.aletia8.com/archives/371 AKPC_IDS += “3373,”; […]

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies