Rendimiento base Datos.

Rendimiento en las bases de datos. "Mejorarlo".

Como hemos comentado, las bases de datos son parte fundamental de las aplicaciones ya que todas las consultas que hagan los clientes, actuarán con estas bases de datos, por lo que es fundamental optimizar lo máximo posible el uso de la base de datos.


Una buena opción es cachear el contenido de las webs, para que si ya se ha realizado una petición a la base de datos, si alguien la vuelve a repetir, la recupere de la caché, en vez de solicitar la información a la base de datos, consumiendo de esta forma menos recursos del servidor.
 

Esa opción está bien, pero nunca está de más ver opciones para optimizar el servicio de bases de datos.

Optimizar MySQL

Una buena optimización del servidor de bases de datos nos puede llegar a permitir tener cientos de bases de datos con una gran cantidad de registros, que nos puede permitir sacar más rendimiento a nuestro servidor. 

A continuacion se presentan algunas ideas para poder optimizar el rendimiento de nuestra base de datos.


1.- Activar la caché de peticiones

Activando este tipo de caché, lo que estamos haciendo es que si una petición se repite, y está en caché, los resultados los saca de ahí, en vez de ejecutar la consulta. Para poder activar la caché de peticiones, nosdebemos de ir al 

fichero de configuración “my.conf” y descomentar la directiva “query_cache_size”,


indicándole un tamaño que queremos utilizar. Podemos empezar con 32 megas, por ejemplo.
Si hemos realizado esto, si nos conectamos al servidor y ejecutamos el comando 

“SHOW STATUS LIKE ‘qcache%’; “, podremos ver los resultados que están en caché. 

 

2.- Comprobar peticiones lentas o sin índices.

El servidor MySQL nos permite registrar aquellas peticiones que tardan mucho tiempo en ser ejecutadas.
Para ello debemos de abrir el fichero de configuración y buscar las siguientes líneas: 

  •   Con la primera instrucción activamos el registro de peticiones lentas.

  • Con la segunda, “long_query_time”, define que guardará un log con toda petición que dure más de 5 segundos.
  • Por último “log-queries-not-using-indexes” sirve para registrar en el log las peticiones SQL que no usen índices.

3.- Endurecer los límites

Cuando hablamos de endurecer los límites, nos referimos a modificar la configuración del servidor para que este no se sature. Podemos hacer referencia a tres variables distintas.

  • Con la primera línea le indicamos el número máximo de conexiones que se pueden establece en el
           servidor.
  •  Con la segunda línea, le estamos indicando que termine toda conexión que ha estado inactiva durante
           más de 10 segundos.
  • La tercera línea es por razones de seguridad. Cuando más alto es el valor, mas reintentos hará para
        conectarse en caso de error.

 Fuentes:
acens.com The hosting company  Fecha de consulta: 17/04/2013
http://www.acens.com/white-papers/como-mejorar-el-rendimiento-de-las-bases-de-datos/


 Además de este tipo de optimizaciones, se puede revisar las consultas que se hacen sobre la base de datos
para intentar que estas se ejecuten lo más rápidamente posibles.




 Ejemplo:



Fuente: http://books.google.com.mx/books?id=zYBWm5-X5usC&printsec=frontcover&dq=Bases+de+datos&hl=en&sa=X&ei=Vj9vUb_oGuKY2wWtwYD4Aw&ved=0CEgQ6AEwBQ#v=onepage&q&f=false


 

Mejorar las consultas a la base de datos

Tenga siempre presente las consultas tipo que se van a realizar sobre su base de datos, durante el proceso de diseño. Eso le permitirá optimizar al máximo su estructura para obtener los mejores resultados.
  • Cuando se realiza una consulta SELECT, hay que evitar en lo posible el uso del comodín “*”, e indicar sólo los campos imprescindibles que se necesitan. Eso reducirá el tamaño de la consulta.
  • Evite en lo posible el uso de LIKE. Las comparaciones entre campos de texto (BLOB, TEXT…) ralentizan las consultas. Si fuera necesario, cree índices fulltext para los campos de texto sobre los que vaya a efectuar consultas.
  • Evite también el uso de GROUP BY, ORDER BY o HAVING.
  • Pruebe sus consultas con anterioridad, mediante el comando EXPLAIN. Le mostrará un listado informativo sobre cómo se realiza la consulta.                                                                                                                            Sintaxis: Explain select * from tabla.
  •  Optimice la cláusula WHERE
  • Evite el uso de paréntesis innecesarios.
  • Use COUNT (*) sólo en consultas sin cláusula WHERE y que afecten a una única tabla.
  • Si conoce que el resultado de una claúsula GROUP BY o DISTINCT va a ser muy reducido haga uso de la opción SQL_SMALL_RESULT. MySQL usará tablas temporales de acceso rápido para el resultado en vez métodos de ordenación.
  • Para añadir registros a sus tablas, es más eficiente realizar una inserción múltiple que varias inserciones por separado. 
    Sintaxis: INSERT INTO table (campo1, campo2) VALUES (1, ‘valor1’), (2, ‘valor2’)
  • Encole la inserción de datos para evitar esperas innecesarias, mediante el uso de la sentencia INSERT DELAYED. La inserción se encola (agrupándose en bloques para ejecutarse de forma más eficiente) a la espera de que la tabla afectada no esté siendo utilizada por ningún otro proceso.
  • Dé prioridad a las sentencias de lectura (SELECT) frente a las de escritura (INSERT):
    • Con INSERT LOW_PRIORITY, consigue que las sentencias de inserción esperen a que no haya otros procesos leyendo la tabla para ejecutarse.
    • Con SELECT HIGH_PRIORITY, consigue que cualquier otro proceso simultáneo de actualización o inserción de datos espere a que se realice la consulta.
  • Si tiene dudas sobre el rendimiento de alguna expresión, utilice la función: BENCHMARK (contador, expresión)



    Podemos ver ejemplos de tiempo de respuesta en el navegador y en las consultas realizadas en Mysql.




     
     Podemos ver El tiempo de respuesta en amarillo en la imagen.

     
     En la imagen vemos el tiempo de respuesta en las Lineas indicadas.
     

 

 

No hay comentarios:

Publicar un comentario