Otro debate (mas) sobre los Procedimientos Almacenados

28/04/2008 - 14:00 por Pablo Roca | Informe spam
Siento si el tema es recurrente, pero ahi va:

El siguiente hilo es para proponer un debate (amistoso) sobre los
procedimientos almacenados.

Llegué hace poco a SQL Server 2005 y de lo primero que hice fué empezar a
programar todo o casi todo con procedimientos almacenados. Hasta aquí bien,
en momentos noté que (a ratos) las consultas no iban todo lo bien que
debieran ...

Soy un cliente final, y mi casuistica particular me impone que tenga que
utilizar unas 60 bases de datos. Por lo que uno piensa en buscarse la manera
de sincronizar los procedimientos almacenados entre BBDD, alternativamente
mira uno de poner los SPs en la BBDD master, lo que simplifica la
administración y mantenimiento (hasta cierto punto, porque trabajar en
pruebas contra master es un tanto latazo), pero se me presenta el problema
de que tengo que dar acceso a master a todos los usuarios que utilicen la
aplicación, cosa que no me gusta nada.

Lo que es el modelo de poner todo el acceso a datos dentro de la BBDD, la
verdad que me gusta. Pero despues de leer y comprobar en el post de Eduardo
Quintás

http://geeks.ms/blogs/quintas/archi...nados.aspx

Que los procedimientos almacenados no reutilizan sus planes de ejecución si
se ejecutan en BBDD distintas, eso ya me tiró por el suelo a los SPs. Y me
dió una pista de porque los SP's me iban bien a veces (si consultaba siempre
contra la misma BBDD)

Pegas que le veo a los SPs

- la fundamental es la no reutilización de planes de ejecución entre BBDD
distintas.
- si uno se pone a escribir SPs como si fuera un lenguaje normal de
programación puede caer en el error de hacer esto:

IF condicion1
SELECT uno
ELSE
IF condicion2
SELECT dos
ELSE


hacer grandes bloques de if y consultas SELECT es de las peores cosas que se
pueden hacer con un SP, ya que: los planes de ejecución variaran en funcion
de las condiciones de la consulta, la compilación del plan de ejecución se
hace muy lenta.

En lugar de hacer eso es mucho mas optimo hacer:

IF condicion1
EXEC sp1
ELSE
IF condicion2
EXEC sp2
ELSE


¿Porque? Por la reutilización de planes de ejecución. En este segundo
ejemplo el plan de ejecución del SP principal es siempre el mismo, y el de
cada SP que es llamado tambien. Se evitan tiempos de compilación, cacheo,
...

Ventajas de los SPs

- tener todo el código de acceso centralizado en un único sitio
- facilidad de mantenimiento (incluso en producción)

Bien ante todo esto, estoy empezando a cambiar el chip y pasar mis consultas
a la capa de negocio del lado del servidor (lo que estoy haciendo es una
aplicación SOA) utilizando consultas parametrizadas (ahora decirme que las
consultas parametrizadas no se reutilizan entre BBDD y ya se me lió el
invento :)).

Al hilo de esto.

¿Como trabajar de una manera segura con los SPs en master? ¿Metiendo los SPs
en esquemas personalizados y jugando con los permisos?

Bueno .. cualquier comentario es bienvenido.


Saludos,

Pablo Roca
La Coruna - Spain
http://www.portalfox.com

Preguntas similare

Leer las respuestas

#36 Maxi
30/04/2008 - 19:30 | Informe spam
Por Favor Alfredo no digas tantas cosas idiotas al mismo tiempo, ya
francamente me he convencido 100% que eres un troll de verdad, que tiene que
ver SOA con lo que vos estas diciendo, por Dios! Estudia un poco y luego
hablamos si?, pero no des afirmaciones que no son correctas SOA es una
arquitectura de servicios y eso no tiene nada que ver conque SQL sea un
servicio de Windows, hay miles de servicios y no son SOA, por favor no
confunda a la gente y si quiere demostrarlo muestrenos en la documentacion
del producuto donde indica que SQLServer siempre fue un sistema SOA, sin eso
es como que yo diga: Señores El cielo es rojo, la tierra es cuadrada.



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Alfredo Novoa" escribió en el mensaje
news:
On Wed, 30 Apr 2008 18:45:36 +0200, Alfredo Novoa
wrote:

On Wed, 30 Apr 2008 13:17:22 -0300, "Maxi"
wrote:

Alfredo, demuestranos que SOA ha sido siempre SQL please, porque hasta la
version 2005 no se disponian Web Service pór ejemplo



SQL Server siempre nos ha ofrecido el servicio de gestionarnos las
bases de datos :-)



O más claro aun: SQL Server tiene una Arquitectura Orientada a darnos
el Servicio de gestionar bases de datos :-)


Saludos
Respuesta Responder a este mensaje
#37 Maxi
30/04/2008 - 19:32 | Informe spam
Alejandro: te doy un consejo sano, no sigas este hilo, esta gente en todos
los foros (buscalos en google y despues me contas) hacen lo mismo, vas a
llenar 100 post para discutir de blanco y negros, pero bueno fijate tu, si
quieres perder el tiempo con estos personajes conocidos en los foros
actualmente ;-)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Alejandro Mesa" escribió en el
mensaje news:
Carlos M. Calvelo,

Pero es que yo estaba reaccionando a tu proposición:



No no, yo no propongo, la realidad nos fuerza a tomar esas decisiones. No
todos los proyectos pueden durar el tiempo necesario para ser
implementados
como se deberia. Tampoco las compañias tienen el tiempo necesario para que
las cosas se hagan como se deben. Nunca has escuchado a tu jefe decir que
lo
necesitan para ayer?

Ademas, ni los propios software de desarrollo te brindan todas las
posibilidades.

La teoria y la practica no siempre van de mano.

De todas manera, la razon por la que Pablo no quiere usar sps no es justa
si
se le compara con el mismo comportamiento que se tiene con consultas Adhoc
y
preparadas.

AMB


"Carlos M. Calvelo" wrote:

Hola Alejandro,

On 30 apr, 16:53, Alejandro Mesa
wrote:
> Carlos M. Calvelo,
>
> > Entonces con no dar permisos de insert/update/delete ya está.
> > Solo al proceso ETL que es el mismísimo creador de los datos.
> > Y contra un SA no hay base de datos que se defienda. Es que
> > es precisamente este el que tiene asegurar estas cosas.
>
> No crees que el desarrollador del paquete ETL o lo que sea que se use,
> pueda
> cometer un error?

Si claro!

>
> Por experiencia, prefiero usar integridad referencial declarativa y no
> procedural. Vamos, que somos humanos.
>

En eso estamos de acuerdo. Y no solo la referencial. Y si no puede
ser declarativa, pues (de mala gana!) tendrá que ser procedimental.
Lo esencial es la centralización de las reglas.

Pero es que yo estaba reaccionando a tu proposición:

> > > En la practica se recomienda que no se usen restricciones de
> > > integridad
> > > referencial

Que no estoy de acuerdo con esa recomendación. Pero si se se
le hace caso a esta recomendación entonces la integridad es
reponsabilidad del proceso ETL y para los demas usuarios/
aplicaciones no se darían entonces permisos de acturalización
de datos, para evitar todavía más 'posibles errores'.

Eso era todo.

Saludos,
Carlos

Respuesta Responder a este mensaje
#38 Carlos M. Calvelo
30/04/2008 - 19:34 | Informe spam
Hola Maxi,

On 30 apr, 18:16, "Maxi" wrote:
Carlos, creo que volvemos al principio, para mi las reglas de negocio no son
sinonimo de integridad, de hecho el otro dia he tenido el placer de asistir
a una importante conferencia de arquietectura donde se compartia esto mismo,
una cosa son las reglas de negocio y otra cosa las reglas de intregridad.
Ahora bien una regla de negocios se puede implementar como parte de la
integridad declarativa? pues si claro que se puede, pero es la unica forma?
no, hay otras altertivas

Una regla de integridad (tipo de datos, constraint , fk) deben estar dentro
del motor o fuera.
En la teoria y en la mayoria de los sistemas OLTP dentro, en los ETL
coincido con Alejandro.

Ahora bien, creo que estamos igual que siempre, decirle regla de negocios a
integridad, son cosas totalmente distintas y eso ya lo discutimos. La misma
palabra lo define, es una regla del negocio, y el negocio para una misma
aplicacion , misma bdd son los procesos de tus clientes.




:-(

De ninguna manera me puedo imaginar que reacción esperas después de
todo lo que se ha dicho sobre eso.
No voy a repetir aquí lo que son 'reglas de nogocio'.

Saludos,
Carlos
Respuesta Responder a este mensaje
#39 Maxi
30/04/2008 - 19:41 | Informe spam
No es necesario que tu lo repitas lo que para ti es una regla de negocios,
porque francamente para eso ya hay libros y documentos de expertos en la
materia y son el material que todos van a considerar a la hora de aprender


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Carlos M. Calvelo" escribió en el mensaje
news:
Hola Maxi,

On 30 apr, 18:16, "Maxi" wrote:
Carlos, creo que volvemos al principio, para mi las reglas de negocio no
son
sinonimo de integridad, de hecho el otro dia he tenido el placer de
asistir
a una importante conferencia de arquietectura donde se compartia esto
mismo,
una cosa son las reglas de negocio y otra cosa las reglas de intregridad.
Ahora bien una regla de negocios se puede implementar como parte de la
integridad declarativa? pues si claro que se puede, pero es la unica
forma?
no, hay otras altertivas

Una regla de integridad (tipo de datos, constraint , fk) deben estar
dentro
del motor o fuera.
En la teoria y en la mayoria de los sistemas OLTP dentro, en los ETL
coincido con Alejandro.

Ahora bien, creo que estamos igual que siempre, decirle regla de negocios
a
integridad, son cosas totalmente distintas y eso ya lo discutimos. La
misma
palabra lo define, es una regla del negocio, y el negocio para una misma
aplicacion , misma bdd son los procesos de tus clientes.




:-(

De ninguna manera me puedo imaginar que reacción esperas después de
todo lo que se ha dicho sobre eso.
No voy a repetir aquí lo que son 'reglas de nogocio'.

Saludos,
Carlos
Respuesta Responder a este mensaje
#40 Carlos M. Calvelo
30/04/2008 - 19:50 | Informe spam
On 30 apr, 19:41, "Maxi" wrote:
No es necesario que tu lo repitas lo que para ti es una regla de negocios,
porque francamente para eso ya hay libros y documentos de expertos en la
materia y son el material que todos van a considerar a la hora de aprender




Los cuales no has leído.
Pero no ha sido porque yo no te los haya recomendado.

Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida