Ver Mensaje Individual
  #4  
Viejo 02/09/09, 14:17:35
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Bueno lo primero es destacar que los planificadores de BBDD son herramientas muy complejas asi que intentare hacer un pequeño resumen y me tomare algunas "licencias"

Basicamente el planificador de BBDD lo que hace es analizar la sentencia SQL en base a una serie de parametros

-Datos estadisticos -> Cada cierto tiempo se pueden elaborar estadisticas de la BBDD y si por ejemplo sabemos que en una tabla hay muy pocas entradas que empiecen por Z y realizaramos un select buscando que ese campo empiece por Z el planificador podria obviar la seleccion por la clave principal y determinar la seleccion por otro indice o incluso un full scan de la tabla porque por medio de las estadisticas "sabe" que va a recuperar muy pocas entradas y le puede compensar

-Datos inherentes a la BBDD -> Si tu BBDD tiene definido un indice por campo1 campo2 y campo3 y tu haces
select ..
into..
from..
where campo1 = ...
and campo2 = ..
and campo3 = ..

El planificador veria que hay un indice que contiene todos los campos por los que quieres seleccionar y PROBABLEMENTE determinaria la seleccion por dicho indice

Digo probablemente porque los algoritmos de planificacion de BBDD son bastante complicados y afectan un monton de variables, como puede ser la carga de trabajo que esta soportando la maquina, el numero de personas que haya accediendo en paralelo y una multitud de condicionantes mas

Es por eso que una misma sentencia select la ejecutas una vez y hace la seleccion por un camino y la ejecutas inmediatamente despues y existe una posibilidad de que el planificador determine otro camino por alguna razon de las antes expuestas

En SAP disponemos de la transaccion ST05 que sirve para hacer trazas SQL, puedes activar la traza SQL, luego realizar una operacion cualquiera (ejecutar un listado, llamar a un report, crear un pedido o lo que sea) luego vuelves a la ST05, desactivas la traza y visualizas el resultado

Observaras que te aparecen todas las sentencias SQL que se han realizado para lo que hubieras ejecutado, si pinchas en el explain observaras que te dara informacion mas exhaustiva de la operacion SQL, te dira a traves de que indice se ha realizado el select, el coste que ha tenido, etc

Para saber el retardo variable lo que yo miraria son dos cosas, realizaria varias trazas del mismo proceso para ver si unas veces pasa por un indice y otras por otro y tambien me fijaria en la transaccion SM50 en la carga de trabajo que esta soportando la maquina en el momento del lanzamiento del programa, quiza por ahi puedas ver algo
Responder Con Cita