grilla con horas - gracias

20/04/2004 - 16:13 por egc | Informe spam
muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes el
armar un cursor en el servidor y procesar todo en el motor?

gracias nuevamente!

egc

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
20/04/2004 - 16:30 | Informe spam
El tema de los cursores es que se ejecutan en un entorno que no está
pensado para procesar elementos individualmente, sino conjunto de datos, y
un cursor está pensado justamente para lo contrario. Comprenderás entonces
que cada vez que en este grupo se escucha esa palabra, a muchos de nosotros
se nos erizan los pelillos...

Entiendo que tratar los registros de forma individual puede conseguir
que las consultas sean más sencillas, sintácticamente hablando, pero para el
motor es muy costoso. Casi todo lo que se puede conseguir con cursores se
puede realizar sin ellos (excepto contadas excepciones), sólo hay que
echarle un poquito de imaginación. SQL Server te lo agradecerá ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"egc" escribió en el mensaje
news:18f801c426e1$b2fdc890$

muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes el
armar un cursor en el servidor y procesar todo en el motor?

gracias nuevamente!

egc
Respuesta Responder a este mensaje
#2 egc
20/04/2004 - 16:48 | Informe spam
gracias carlos!

duda: ¿para que fueron creados entonces? ¿MS penso en una
tecnologia no recomendada, que tiende a ser evitada?

egc


El tema de los cursores es que se ejecutan en un


entorno que no está
pensado para procesar elementos individualmente, sino


conjunto de datos, y
un cursor está pensado justamente para lo contrario.


Comprenderás entonces
que cada vez que en este grupo se escucha esa palabra, a


muchos de nosotros
se nos erizan los pelillos...

Entiendo que tratar los registros de forma individual


puede conseguir
que las consultas sean más sencillas, sintácticamente


hablando, pero para el
motor es muy costoso. Casi todo lo que se puede conseguir


con cursores se
puede realizar sin ellos (excepto contadas excepciones),


sólo hay que
echarle un poquito de imaginación. SQL Server te lo


agradecerá ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"egc" escribió en el mensaje
news:18f801c426e1$b2fdc890$

muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes el
armar un cursor en el servidor y procesar todo en el


motor?

gracias nuevamente!

egc


.

Respuesta Responder a este mensaje
#3 Maximiliano D. A.
20/04/2004 - 16:57 | Informe spam
Hola,, que no sea recomendada no quiere decir que no se pueda usar, por eso
estan.

Es como todo amigo, en programacion tambien pasa lo mismo, hay buenas
tecnicas de programacion y uno se pregunta y el resto? bue los cursores hay
casos que si valen la pena (son los minimos) pero por ej:

si vos queres por ej hacer un backup de todas tus bases de datos no
importando el Servidor y lo queres poner en un Store por ej, aca no te va a
quedar que usar cursores, pero como ves, el desplazamiento es minimo, ahora
si tenes una tabla de 10.000.000 de registros y pones un cursor, te moris :(

Hace una prueba, no creas en lo que te podamos decir ;-)

Create una tabla

Insertale con un bucle 1.000.000 de registros
luego borra los registros con Delete from
toma el tiempo

repeti el paso de crear la tabla y poner los registros, pero ahora armate un
cursor y borralos asi
Delete from tablita where id=@id

@id es el que tomas del cursor

Toma el tiempo y comentanos como te ha ido ;-)

Si no queres borrar los registros podes hacerle un Update, como quieras,
pero notaras un sustancial cambio :)

Suerte


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"egc" escribió en el mensaje
news:1a1b01c426e6$837baab0$

gracias carlos!

duda: ¿para que fueron creados entonces? ¿MS penso en una
tecnologia no recomendada, que tiende a ser evitada?

egc


El tema de los cursores es que se ejecutan en un


entorno que no está
pensado para procesar elementos individualmente, sino


conjunto de datos, y
un cursor está pensado justamente para lo contrario.


Comprenderás entonces
que cada vez que en este grupo se escucha esa palabra, a


muchos de nosotros
se nos erizan los pelillos...

Entiendo que tratar los registros de forma individual


puede conseguir
que las consultas sean más sencillas, sintácticamente


hablando, pero para el
motor es muy costoso. Casi todo lo que se puede conseguir


con cursores se
puede realizar sin ellos (excepto contadas excepciones),


sólo hay que
echarle un poquito de imaginación. SQL Server te lo


agradecerá ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"egc" escribió en el mensaje
news:18f801c426e1$b2fdc890$

muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes el
armar un cursor en el servidor y procesar todo en el


motor?

gracias nuevamente!

egc


.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.661 / Virus Database: 424 - Release Date: 19/04/2004
Respuesta Responder a este mensaje
#4 Eladio Rincón
20/04/2004 - 17:15 | Informe spam
Hola,

los cursores no son propietarios de MS; se crearon para tratar registros uno por uno; supongo que los primeros creadores de SGBD (IBM o Informix) lo decidirían en su momento. SQL Server (como otros SGBD) están orientados a manejar conjuntos de registros; está pensado para tratar muchas filas al mismo tiempo; ¿qué se consigue con esto? evitar tratar las filas una por una; estoy seguro que modificar una fila es muchísimo más rápido que modificar unos cuantos cientos de miles, pero el costo de esa fila (tiempo, bloqueos, concurrencia, ...) por los cientos de miles de registros del ejemplo nos dará un resultado en el que deberíamos tener la base de datos en exclusiva para el proceso.

No se prendente decir que los cursores son el demonio; hay que pensar que "posiblemente" se pueda realizar sin usar cursores.

Conozco a bastante gente (sobre todo trabajando en la Banca con mainframes) para los que es tabú el uso de JOINs en SELECTs; eso implica que también debe estar prohibido en UPDATEs y DELETEs así que imaginate de qué forma se realizan los procesos ...

Saludos,

Eladio Rincón
Torrevieja - Alicante
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG


egc wrote:
gracias carlos!

duda: ¿para que fueron creados entonces? ¿MS penso en una
tecnologia no recomendada, que tiende a ser evitada?

egc


El tema de los cursores es que se ejecutan en un entorno que no
está pensado para procesar elementos individualmente, sino conjunto
de datos, y un cursor está pensado justamente para lo contrario.
Comprenderás entonces que cada vez que en este grupo se escucha esa
palabra, a muchos de nosotros se nos erizan los pelillos...

Entiendo que tratar los registros de forma individual puede
conseguir que las consultas sean más sencillas, sintácticamente
hablando, pero para el motor es muy costoso. Casi todo lo que se
puede conseguir con cursores se puede realizar sin ellos (excepto
contadas excepciones), sólo hay que echarle un poquito de
imaginación. SQL Server te lo agradecerá ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"egc" escribió en el mensaje
news:18f801c426e1$b2fdc890$

muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes el
armar un cursor en el servidor y procesar todo en el motor?

gracias nuevamente!

egc


.
Respuesta Responder a este mensaje
#5 egc
20/04/2004 - 17:31 | Informe spam
gracias maxi!!

es cierto que no se requiere un cursor para una operacion
tan simple como borrar millones de registros; suponiendo
que el procesamiento aplicado a cada registro es bastante
complejo (hablemos de varios sps involucrados), la
cuestion es saber si es mas eficiente recorrer los
millones de registros con un cursor y procesar cada uno o
traer los registros al cliente, recorrerlos alli y
procesar cada uno (aqui claro que podria traerse de a
partes o algo parecido pues tampoco es tan bueno llevar
millones de registros a un cliente)
mi duda era esa, si conviene dejar el proceso
completamente en el motor (incluso como una tarea
programada de SQL-Server) o repartirlo entre cliente y
servidor.

gracias nuevamente por tu respuesta!
egc



Hola,, que no sea recomendada no quiere decir que no se


pueda usar, por eso
estan.

Es como todo amigo, en programacion tambien pasa lo


mismo, hay buenas
tecnicas de programacion y uno se pregunta y el resto?


bue los cursores hay
casos que si valen la pena (son los minimos) pero por ej:

si vos queres por ej hacer un backup de todas tus bases


de datos no
importando el Servidor y lo queres poner en un Store por


ej, aca no te va a
quedar que usar cursores, pero como ves, el


desplazamiento es minimo, ahora
si tenes una tabla de 10.000.000 de registros y pones un


cursor, te moris :(

Hace una prueba, no creas en lo que te podamos decir ;-)

Create una tabla

Insertale con un bucle 1.000.000 de registros
luego borra los registros con Delete from
toma el tiempo

repeti el paso de crear la tabla y poner los registros,


pero ahora armate un
cursor y borralos asi
Delete from tablita where id=@id

@id es el que tomas del cursor

Toma el tiempo y comentanos como te ha ido ;-)

Si no queres borrar los registros podes hacerle un


Update, como quieras,
pero notaras un sustancial cambio :)

Suerte


Salu2
-


-
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"egc" escribió en el mensaje
news:1a1b01c426e6$837baab0$

gracias carlos!

duda: ¿para que fueron creados entonces? ¿MS penso en una
tecnologia no recomendada, que tiende a ser evitada?

egc


El tema de los cursores es que se ejecutan en un


entorno que no está
pensado para procesar elementos individualmente, sino


conjunto de datos, y
un cursor está pensado justamente para lo contrario.


Comprenderás entonces
que cada vez que en este grupo se escucha esa palabra, a


muchos de nosotros
se nos erizan los pelillos...

Entiendo que tratar los registros de forma individual


puede conseguir
que las consultas sean más sencillas, sintácticamente


hablando, pero para el
motor es muy costoso. Casi todo lo que se puede conseguir


con cursores se
puede realizar sin ellos (excepto contadas excepciones),


sólo hay que
echarle un poquito de imaginación. SQL Server te lo


agradecerá ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"egc" escribió en el mensaje
news:18f801c426e1$b2fdc890$

muchas gracias adrian por tu respuesta!

una consulta

he leido en varios posts la no recomendacion de utilizar
cursores del lado del servidor

¿cuales son las contras de utilizar cursores de SQL-




Server
en SPs?
si por ejemplo debe realizarse un proceso por lotes que
recorra gran cantidad de registros (del orden del millon)
y procese cada uno de ellos... ¿tendria inconvenientes




el
armar un cursor en el servidor y procesar todo en el


motor?

gracias nuevamente!

egc


.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.661 / Virus Database: 424 - Release Date:


19/04/2004


.

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