Mejora rendimiento utilizando vistas frente sql dinamico

17/03/2006 - 00:46 por Silverius | Informe spam
Hola a todos,

Tenemos una bbdd con tablas mensuales de unos 3 millones de registros (no me
digais por favor el error de trabajar asi,que ya esta tenido en cuenta,pero
la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas se
consultan mucho por una aplicacion en la que usamos sql dinamico para que
segun el rango de fechas atacar una tabla u otra, y se consultan por muchas
consultas distintas con parametros distintos.

La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas (no se
pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
estamos modificando la aplicacion poco a poco, lo primero que he pensado es
en crear una vista sobre digamos los dos ultimos meses, y solo en caso de
que la consulta sea contra fechas anteriores seguir usando el sqldinamico de
antes,sino hacerlo contra la vista.La pregunta es:

-Creeis que es una buena opcion para mejorar el rendimiento de forma
notable?
-En las tablas se agregan filas con una cadencia aproximada de 3 por
segundo en momentos punta, esto afectara a la vista?

Todas las opiniones o consejos son agradecidos,aunque como digo que no
impliquen cambiar totalmente la arquitectura de golpe por favor

Gracias y un saludo.

Preguntas similare

Leer las respuestas

#1 Ele
17/03/2006 - 01:15 | Informe spam
Hola no puedo ayudarte mucho, :( comparar una vista con sql dinamico tendria
que hacer una prueba. Para mejorar el rendimiento no hay otro camino que
crear indices con los campos criticos, evitar sql dinamicos reemplazado con
querys para cada caso, usar el formato standard para las fechas 'yyyymmdd' y
hacer pruebas con la ayuda de execution plan
suerte
"Silverius" escribió en el mensaje
news:
Hola a todos,

Tenemos una bbdd con tablas mensuales de unos 3 millones de registros (no


me
digais por favor el error de trabajar asi,que ya esta tenido en


cuenta,pero
la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas


se
consultan mucho por una aplicacion en la que usamos sql dinamico para que
segun el rango de fechas atacar una tabla u otra, y se consultan por


muchas
consultas distintas con parametros distintos.

La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas (no


se
pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
estamos modificando la aplicacion poco a poco, lo primero que he pensado


es
en crear una vista sobre digamos los dos ultimos meses, y solo en caso de
que la consulta sea contra fechas anteriores seguir usando el sqldinamico


de
antes,sino hacerlo contra la vista.La pregunta es:

-Creeis que es una buena opcion para mejorar el rendimiento de forma
notable?
-En las tablas se agregan filas con una cadencia aproximada de 3 por
segundo en momentos punta, esto afectara a la vista?

Todas las opiniones o consejos son agradecidos,aunque como digo que no
impliquen cambiar totalmente la arquitectura de golpe por favor

Gracias y un saludo.


Respuesta Responder a este mensaje
#2 Silverius
17/03/2006 - 01:19 | Informe spam
Si Ele,pero a eso me refiero.A que si en vez "evitar sql dinamicos
reemplazado con
querys para cada caso" uso una vista no voy a notr perdida de rendimiento
frente al caso que dices.Y que si a la vez deberia notar significativamente
mejoria frente al sql dinamico.



"Ele" escribió en el mensaje
news:
Hola no puedo ayudarte mucho, :( comparar una vista con sql dinamico


tendria
que hacer una prueba. Para mejorar el rendimiento no hay otro camino que
crear indices con los campos criticos, evitar sql dinamicos reemplazado


con
querys para cada caso, usar el formato standard para las fechas 'yyyymmdd'


y
hacer pruebas con la ayuda de execution plan
suerte
"Silverius" escribió en el mensaje
news:
> Hola a todos,
>
> Tenemos una bbdd con tablas mensuales de unos 3 millones de registros


(no
me
> digais por favor el error de trabajar asi,que ya esta tenido en
cuenta,pero
> la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas
se
> consultan mucho por una aplicacion en la que usamos sql dinamico para


que
> segun el rango de fechas atacar una tabla u otra, y se consultan por
muchas
> consultas distintas con parametros distintos.
>
> La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
> menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
> contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas


(no
se
> pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
> estamos modificando la aplicacion poco a poco, lo primero que he pensado
es
> en crear una vista sobre digamos los dos ultimos meses, y solo en caso


de
> que la consulta sea contra fechas anteriores seguir usando el


sqldinamico
de
> antes,sino hacerlo contra la vista.La pregunta es:
>
> -Creeis que es una buena opcion para mejorar el rendimiento de forma
> notable?
> -En las tablas se agregan filas con una cadencia aproximada de 3 por
> segundo en momentos punta, esto afectara a la vista?
>
> Todas las opiniones o consejos son agradecidos,aunque como digo que no
> impliquen cambiar totalmente la arquitectura de golpe por favor
>
> Gracias y un saludo.
>
>


Respuesta Responder a este mensaje
#3 Alejandro Mesa
17/03/2006 - 01:29 | Informe spam
Silverius,

Te recomiendo leas en los BOL sobre las vistas particionadas. Pudieras crear
una tabla para cada mes, poniendo una restriccion en cada tabla y usando esta
columna como clave primaria (al menos primera columna de esta pk) y armando
una vista que sea el "union all" de las tablas. Luego haces la select sobre
la vista usando la columna usada para particionar.

Using Partitions in a Microsoft SQL Server 2000 Data Warehous
http://msdn.microsoft.com/library/d...nsindw.asp


AMB

"Silverius" wrote:

Hola a todos,

Tenemos una bbdd con tablas mensuales de unos 3 millones de registros (no me
digais por favor el error de trabajar asi,que ya esta tenido en cuenta,pero
la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas se
consultan mucho por una aplicacion en la que usamos sql dinamico para que
segun el rango de fechas atacar una tabla u otra, y se consultan por muchas
consultas distintas con parametros distintos.

La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas (no se
pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
estamos modificando la aplicacion poco a poco, lo primero que he pensado es
en crear una vista sobre digamos los dos ultimos meses, y solo en caso de
que la consulta sea contra fechas anteriores seguir usando el sqldinamico de
antes,sino hacerlo contra la vista.La pregunta es:

-Creeis que es una buena opcion para mejorar el rendimiento de forma
notable?
-En las tablas se agregan filas con una cadencia aproximada de 3 por
segundo en momentos punta, esto afectara a la vista?

Todas las opiniones o consejos son agradecidos,aunque como digo que no
impliquen cambiar totalmente la arquitectura de golpe por favor

Gracias y un saludo.



Respuesta Responder a este mensaje
#4 Guillermo Roldan
17/03/2006 - 09:22 | Informe spam
Hola Silverius,

Habitualmente, la mejora de rendimiento se suele conseguir principalmente
con una indexación apropiada, partiendo que actualices estadísticas
habitualmente, o bien, re-construyas índices habitualmente (ya sea
manualmente o por Plan de Mantenimiento) que a fin de cuentas, también
actualiza estadísticas.

Otra razón de pérdida de rendimiento, podrían ser los bloqueos.

Puedes ayudarte de trazas, para identificar qué consultas se demoran,
bloqueos, etc.

De cualquier modo, si no consigues mejorar el rendimiento porque se lanzan
consultas que actúan sobre grandes conjuntos de registros para hallar medias,
totales, y estadísticas en general, estarás ante un escenario ideal para
implementar Analysis Services.

Saludos,
Guillermo Roldán
"Silverius" escribió:

Hola a todos,

Tenemos una bbdd con tablas mensuales de unos 3 millones de registros (no me
digais por favor el error de trabajar asi,que ya esta tenido en cuenta,pero
la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas se
consultan mucho por una aplicacion en la que usamos sql dinamico para que
segun el rango de fechas atacar una tabla u otra, y se consultan por muchas
consultas distintas con parametros distintos.

La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas (no se
pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
estamos modificando la aplicacion poco a poco, lo primero que he pensado es
en crear una vista sobre digamos los dos ultimos meses, y solo en caso de
que la consulta sea contra fechas anteriores seguir usando el sqldinamico de
antes,sino hacerlo contra la vista.La pregunta es:

-Creeis que es una buena opcion para mejorar el rendimiento de forma
notable?
-En las tablas se agregan filas con una cadencia aproximada de 3 por
segundo en momentos punta, esto afectara a la vista?

Todas las opiniones o consejos son agradecidos,aunque como digo que no
impliquen cambiar totalmente la arquitectura de golpe por favor

Gracias y un saludo.



Respuesta Responder a este mensaje
#5 Silverius
17/03/2006 - 17:22 | Informe spam
Gracias Guillermo, pero la verdad me he quedado un poco igual que estaba con
tu respuesta.Se cuales son los motivos de perdida de rendimiento,pero en
este caso no es tanto la teoria sino como la practica e intentar hacer los
menores cambios posibles para conseguir el mayor rendimiento.
Logicamente se que para averiguar las posibles mejoras hay que medir y
tracear,pero eso ya esta hecho.Ahora pregunto si esta medida en concreto es
apropiada,u otras ideas que me podais dar para esto como me comenta
Alejandro en la respuesta anterior.

Gracias de todas formas y un saludo.



"Guillermo Roldan" escribió en
el mensaje news:
Hola Silverius,

Habitualmente, la mejora de rendimiento se suele conseguir principalmente
con una indexación apropiada, partiendo que actualices estadísticas
habitualmente, o bien, re-construyas índices habitualmente (ya sea
manualmente o por Plan de Mantenimiento) que a fin de cuentas, también
actualiza estadísticas.

Otra razón de pérdida de rendimiento, podrían ser los bloqueos.

Puedes ayudarte de trazas, para identificar qué consultas se demoran,
bloqueos, etc.

De cualquier modo, si no consigues mejorar el rendimiento porque se lanzan
consultas que actúan sobre grandes conjuntos de registros para hallar


medias,
totales, y estadísticas en general, estarás ante un escenario ideal para
implementar Analysis Services.

Saludos,
Guillermo Roldán
"Silverius" escribió:

> Hola a todos,
>
> Tenemos una bbdd con tablas mensuales de unos 3 millones de registros


(no me
> digais por favor el error de trabajar asi,que ya esta tenido en


cuenta,pero
> la aplicacion esta asi ahora mismo y es complejo cambiarla).Estas tablas


se
> consultan mucho por una aplicacion en la que usamos sql dinamico para


que
> segun el rango de fechas atacar una tabla u otra, y se consultan por


muchas
> consultas distintas con parametros distintos.
>
> La mayoria de las consultas son relativas a los 10 dias, y un porcentaje
> menor de consultas llega a 30 dias.Otro 10 % de las consultas lo hacen
> contra tablas anteriores.Cuando el rango de fechas comprende 2 tablas


(no se
> pueden consultar mas de 2) hacemos un union en la consulta dinamica.Como
> estamos modificando la aplicacion poco a poco, lo primero que he pensado


es
> en crear una vista sobre digamos los dos ultimos meses, y solo en caso


de
> que la consulta sea contra fechas anteriores seguir usando el


sqldinamico de
> antes,sino hacerlo contra la vista.La pregunta es:
>
> -Creeis que es una buena opcion para mejorar el rendimiento de forma
> notable?
> -En las tablas se agregan filas con una cadencia aproximada de 3 por
> segundo en momentos punta, esto afectara a la vista?
>
> Todas las opiniones o consejos son agradecidos,aunque como digo que no
> impliquen cambiar totalmente la arquitectura de golpe por favor
>
> Gracias y un saludo.
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida