El grupo al cual envías entradas es un grupo Usenet. Si envías mensajes a este grupo, cualquier usuario de Internet podrá ver tu dirección de correo electrónico
Hola, me veo en la necesidad de insertar registros desde un Adodb.Recordset. En estos momentos mediante un doble bucle recorro los registros (y los fields) de dicho objeto y paso los valores de cada fila y cada campo a un procedimiento almacenado que realiza el insert.
La pregunta : Seria más eficaz pasar a un store procedure una cadena xml que permita insertar directamente un conjunto de filas. Lo pregunto porque al mirar un plan de ejecución con esta última estrategia, veo que para sql server tiene un coste elevado recorrer dicho conjunto de filas (obtenido con OpenXml), ya que realiza un Scan.
Igual lo puedes hacer todo en una única instrucción INSERT ... SELECT si nos indicas exactamente qué es lo que estás haciendo.
-- ----------------------------- "Caminar sobre el agua y desarrollar software a partir de unas especificaciones es fácil, si ambas están congeladas." Edward V. Berard, ingeniero informático
"raipon" <raimoneg...@hotmail.com> wrote in message
> Hola, me veo en la necesidad de insertar registros desde un > Adodb.Recordset. En estos momentos mediante un doble bucle recorro los > registros (y los fields) de dicho objeto y paso los valores de cada fila y > cada campo a un procedimiento almacenado que realiza el insert.
> La pregunta : Seria más eficaz pasar a un store procedure una cadena xml > que permita insertar directamente un conjunto de filas. Lo pregunto porque > al mirar un plan de ejecución con esta última estrategia, veo que para sql > server tiene un coste elevado recorrer dicho conjunto de filas (obtenido > con OpenXml), ya que realiza un Scan.
Hola, gracias por responder. El escenario es el siguiente, tengo una serie de datos que quiero incorporar a un servidor Sql Server 2005. Estos datos están contenidos en archivos obtenidos con el método Save de un Adodb.Recordset. Para pasar los datos a Sql Server, desde una aplicación intermedia, abro recordsets que tienen el origen en dichos archivos, recorro sus filas y mediante un objeto command que tiene como orígen un store procedure voy insertando de registro en registro. Los recordsets (mediante el método save ) pueden generar también una cadena xml. He probado a pasar directamente esa cadena a un procedimiento almacacenado y mediante OpenXml obtener un conjunto de filas valido para poder insertar todos los registros a la vez. Sin embargo antes realizar pruebas en un escenario real, he probado el réndimiento de n inserts de un solo registro (pasando un valor para cada campo) y un conjunto de n filas obtenido mediante OpenXml, y veo que el plan de ejecución real considera mucho más rápido el insertar n filas de una en una.
Hola, muchas veces el tiempo de respuesta tambien varia deacuerdo a la cantidad de datos. pero que yo sepa con XML debería ser rapido, cómo te digo, quizas en tu prueba usaste pocos registros, pero cuando trabajes con miles ahi notarás la diferencia. Ademas no sólo depente del tiempo de ejecución, sino tambien de los recursos que utiliza esa operación, ambas van de la mano. 1 a 1 pude tomarte 1 miliseg. xml pude tomarte 1 miliseg. pero en recursos 1 a 1 te puede consumir 10% CPU xml te puede consumir 1% CPU
Esto quiere decir que cuando te quedes con poco recursos en CPU ahí sufrirá en ejecutarse tu proceso 1 a 1.
Saludos. Samuel S.M.H
"raipon" <raimoneg...@hotmail.com> escribió en el mensaje de noticias:eyucCHkXKHA.1...@TK2MSFTNGP05.phx.gbl...
> Hola, gracias por responder. > El escenario es el siguiente, tengo una serie de datos que quiero > incorporar a un servidor Sql Server 2005. Estos datos están contenidos en > archivos obtenidos con el método Save de un Adodb.Recordset. Para pasar > los datos a Sql Server, desde una aplicación intermedia, abro recordsets > que tienen el origen en dichos archivos, recorro sus filas y mediante un > objeto command que tiene como orígen un store procedure voy insertando de > registro en registro. > Los recordsets (mediante el método save ) pueden generar también una > cadena xml. He probado a pasar directamente esa cadena a un procedimiento > almacacenado y mediante OpenXml obtener un conjunto de filas valido para > poder insertar todos los registros a la vez. Sin embargo antes realizar > pruebas en un escenario real, he probado el réndimiento de n inserts de un > solo registro (pasando un valor para cada campo) y un conjunto de n filas > obtenido mediante OpenXml, y veo que el plan de ejecución real considera > mucho más rápido el insertar n filas de una en una.
¿Por qué no usas un paquete de Integration Services para ese tipo de cargas masivas? Se pensaron justamente para tareas como las que comentas
-- ----------------------------- "Caminar sobre el agua y desarrollar software a partir de unas especificaciones es fácil, si ambas están congeladas." Edward V. Berard, ingeniero informático
"raipon" <raimoneg...@hotmail.com> wrote in message
> Hola, gracias por responder. > El escenario es el siguiente, tengo una serie de datos que quiero > incorporar a un servidor Sql Server 2005. Estos datos están contenidos en > archivos obtenidos con el método Save de un Adodb.Recordset. Para pasar > los datos a Sql Server, desde una aplicación intermedia, abro recordsets > que tienen el origen en dichos archivos, recorro sus filas y mediante un > objeto command que tiene como orígen un store procedure voy insertando de > registro en registro. > Los recordsets (mediante el método save ) pueden generar también una > cadena xml. He probado a pasar directamente esa cadena a un procedimiento > almacacenado y mediante OpenXml obtener un conjunto de filas valido para > poder insertar todos los registros a la vez. Sin embargo antes realizar > pruebas en un escenario real, he probado el réndimiento de n inserts de un > solo registro (pasando un valor para cada campo) y un conjunto de n filas > obtenido mediante OpenXml, y veo que el plan de ejecución real considera > mucho más rápido el insertar n filas de una en una.
Al final lo he probado ya en situación real, con una cantidad de registros representativa, y el rendimiento es mucho mejor pasando directamente una cadena xml que valor a valor, registro a registro. Sin embargo me queda la duda de si realmente la mejoría está solo en la lógica de la aplicación que hace de pasarela, pues con el primer método tan solo tiene que obtener el xml mediante un método propio del objeto : Save, mientras que con el segundo hay un bucle para recorrer los registros, y otro para recorrer los fields. En fin, sea como sea, a pesar de la sorpresa al leer los resultados del 'plan de ejecución', el rendimiento es mucho mejor en el primer caso. Muchas gracias.