performance

09/05/2005 - 21:16 por Eduardo De Luca | Informe spam
Pregunta de Performance :



A) un tabla con 100 millones de registros



B) Diez tablas con 10 millones de registros unidas por una vista
(particionamiento de la tabla) , con sus correspondientes check



En ambos casos las mismas reciben un alto grado de actualizaciones y
consultas.





De los dos casos planteados, y recurro a la experiencia que alguno haya
tenido con manejo de tablas de gran volumen

Que opción recomiendan?

Gracias

Preguntas similare

Leer las respuestas

#6 Miguel Egea
10/05/2005 - 20:40 | Informe spam
En realidad no tiene por que ser exacatmente lo mismo, de hecho no lo es,
pero eso tampoco quiere decir que haya una solución para cada caso.

Hace un tiempo tuvimos una discusión de 31 hilos al respecto y creo que
darle una leida puede aclararte (o liarte más claro) las ideas.


http://groups.google.es/groups?hl=e...26rnum%3D1

Saludos
Miguel Egea
"Eduardo De Luca" escribió en el mensaje
news:Or7%
El tema seria asi : me dieron para optimizar un producto que el bach esta
tardando como 7 horas en correr , ya tengo acotados las partes en donde
mas se degrada .

Como premisa te voy a decir que este modelo no lo diseñe , y no se puede
cambiar dada la naturaleza del producto

Te doy un ejemplo :



una tabla tiene 45 gb mas 30gb de indices 15 gb de espacio no usado (ahi
creo que tengo la primer falla),

el tema es que (te paso la version resumida) , para insertar 100000 reg
tarda como 1 hora.

Como realiza en insert : a traves de un cursor evalua 3 o cuatro 4 reglas
, todas sencillas y sin complejidad y en virtud al resultado de ellas
inserta los registros.

El caso es que el cursor esta optimizado (solo avance solo lectura) , las
evaluaciones que te comente arriba también, descarto que sea el Server
(tiene 8 prosesarores y discos SCSI de ultima tecnología - en otra
consulta ya te lo había mencionado).

Entonces con este escenario pensé en particionar la tabla y unirla por
vistas , pero no me quería jugar a hacer esta jugada si , para gente que
ya aya tenido experiencia es lo mismo no le aporto ninguna mejora

En pocas palabras , estoy medio trabado y no se para donde ir . A mi me
parece que la tabla en si esta para atrás y quería probar con recrearla ,
ya que en ambientes de desarrollo , haciendo una prueba , pero con una
tabla de menor volumen (exactamente la mitad 20 gb) la consulta me tardo
1min 20 seg.



Pd : Maxi de paso te quiero agradecer tu incondicional ayuda que en varios
casos me brindas



"Maxi" escribió en el mensaje
news:e%
Hola, yo he trabajado con tablas de 100 a 300 millones de registros sin
problemas. Podes partir si queres pero para eso deberias hacer un estudio
mas profundo de los datos y como se usan. Quizas los historicos los podes
poner en una tabla y no se consulten tantos y solo dejar los actuales en
la real. Pero que problemas estas teniendo?


Salu2
Maxi


"Eduardo De Luca" escribió en el mensaje
news:
Entonces para vos es lo mismo las dos opciones?

El problema es que estoy trabajando con volumenes altos de datos y
estoy tratando de mejorar los tiempos de proceso
"Maxi" escribió en el mensaje
news:
Opinion con respecto a que? 100 millones de registros no deberian ser
un problema para sqlserver :-)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas
Msn:

Maxi.da[arroba]gmail.com

"Eduardo De Luca" escribió en el mensaje
news:u$
Pregunta de Performance :



A) un tabla con 100 millones de registros



B) Diez tablas con 10 millones de registros unidas por una vista
(particionamiento de la tabla) , con sus correspondientes check



En ambos casos las mismas reciben un alto grado de actualizaciones y
consultas.





De los dos casos planteados, y recurro a la experiencia que alguno
haya tenido con manejo de tablas de gran volumen

Que opción recomiendan?

Gracias


















Respuesta Responder a este mensaje
#7 Manuel Etcheto
10/05/2005 - 20:46 | Informe spam
Hola
¿estás seguro de que no se puede hacer sin el cursor?

Es muy probable que allí puedas encontrar el problema de performance.
Aquí hay mucha gente que podría ayudarte con eso si posteas el caso

Suerte
Manuel

Eduardo De Luca escribió en el mensaje de
noticias Or7#
El tema seria asi : me dieron para optimizar un producto que el bach esta
tardando como 7 horas en correr , ya tengo acotados las partes en donde


mas
se degrada .

Como premisa te voy a decir que este modelo no lo diseñe , y no se puede
cambiar dada la naturaleza del producto

Te doy un ejemplo :



una tabla tiene 45 gb mas 30gb de indices 15 gb de espacio no usado (ahi
creo que tengo la primer falla),

el tema es que (te paso la version resumida) , para insertar 100000 reg
tarda como 1 hora.

Como realiza en insert : a traves de un cursor evalua 3 o cuatro 4 reglas


,
todas sencillas y sin complejidad y en virtud al resultado de ellas


inserta
los registros.

El caso es que el cursor esta optimizado (solo avance solo lectura) , las
evaluaciones que te comente arriba también, descarto que sea el Server
(tiene 8 prosesarores y discos SCSI de ultima tecnología - en otra


consulta
ya te lo había mencionado).

Entonces con este escenario pensé en particionar la tabla y unirla por
vistas , pero no me quería jugar a hacer esta jugada si , para gente que


ya
aya tenido experiencia es lo mismo no le aporto ninguna mejora

En pocas palabras , estoy medio trabado y no se para donde ir . A mi me
parece que la tabla en si esta para atrás y quería probar con recrearla ,


ya
que en ambientes de desarrollo , haciendo una prueba , pero con una tabla


de
menor volumen (exactamente la mitad 20 gb) la consulta me tardo 1min 20
seg.



Pd : Maxi de paso te quiero agradecer tu incondicional ayuda que en varios
casos me brindas



"Maxi" escribió en el mensaje
news:e%
> Hola, yo he trabajado con tablas de 100 a 300 millones de registros sin
> problemas. Podes partir si queres pero para eso deberias hacer un


estudio
> mas profundo de los datos y como se usan. Quizas los historicos los


podes
> poner en una tabla y no se consulten tantos y solo dejar los actuales en
> la real. Pero que problemas estas teniendo?
>
>
> Salu2
> Maxi
>
>
> "Eduardo De Luca" escribió en el mensaje
> news:
>> Entonces para vos es lo mismo las dos opciones?
>>
>> El problema es que estoy trabajando con volumenes altos de datos y


estoy
>> tratando de mejorar los tiempos de proceso
>> "Maxi" escribió en el mensaje
>> news:
>>> Opinion con respecto a que? 100 millones de registros no deberian ser


un
>>> problema para sqlserver :-)
>>>
>>>
>>> Maxi - Buenos Aires - Argentina
>>> Desarrollador 3 Estrellas
>>> Msn:
>>>
>>> Maxi.da[arroba]gmail.com
>>>
>>> "Eduardo De Luca" escribió en el mensaje
>>> news:u$
>>>> Pregunta de Performance :
>>>>
>>>>
>>>>
>>>> A) un tabla con 100 millones de registros
>>>>
>>>>
>>>>
>>>> B) Diez tablas con 10 millones de registros unidas por una vista
>>>> (particionamiento de la tabla) , con sus correspondientes check
>>>>
>>>>
>>>>
>>>> En ambos casos las mismas reciben un alto grado de actualizaciones y
>>>> consultas.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> De los dos casos planteados, y recurro a la experiencia que alguno


haya
>>>> tenido con manejo de tablas de gran volumen
>>>>
>>>> Que opción recomiendan?
>>>>
>>>> Gracias
>>>>
>>>>
>>>
>>>
>>
>>
>
>


Respuesta Responder a este mensaje
#8 Miguel Egea
10/05/2005 - 20:54 | Informe spam
Bueno, el tema lo más probable que esté en el cursor. Ponnos un ejemplo e
intentamos buscar una vuelta sin cursor.

Me gusta decir que el mejor cursor es el cursor muerto, pero vamos igual soy
un poco radical con esto :-)


Miguel Egea
Microsoft SQL-Server MVP
http://www.portalsql.com
Brigada Anti-cursores--


"Eduardo De Luca" escribió en el mensaje
news:Or7%
El tema seria asi : me dieron para optimizar un producto que el bach esta
tardando como 7 horas en correr , ya tengo acotados las partes en donde
mas se degrada .

Como premisa te voy a decir que este modelo no lo diseñe , y no se puede
cambiar dada la naturaleza del producto

Te doy un ejemplo :



una tabla tiene 45 gb mas 30gb de indices 15 gb de espacio no usado (ahi
creo que tengo la primer falla),

el tema es que (te paso la version resumida) , para insertar 100000 reg
tarda como 1 hora.

Como realiza en insert : a traves de un cursor evalua 3 o cuatro 4 reglas
, todas sencillas y sin complejidad y en virtud al resultado de ellas
inserta los registros.

El caso es que el cursor esta optimizado (solo avance solo lectura) , las
evaluaciones que te comente arriba también, descarto que sea el Server
(tiene 8 prosesarores y discos SCSI de ultima tecnología - en otra
consulta ya te lo había mencionado).

Entonces con este escenario pensé en particionar la tabla y unirla por
vistas , pero no me quería jugar a hacer esta jugada si , para gente que
ya aya tenido experiencia es lo mismo no le aporto ninguna mejora

En pocas palabras , estoy medio trabado y no se para donde ir . A mi me
parece que la tabla en si esta para atrás y quería probar con recrearla ,
ya que en ambientes de desarrollo , haciendo una prueba , pero con una
tabla de menor volumen (exactamente la mitad 20 gb) la consulta me tardo
1min 20 seg.



Pd : Maxi de paso te quiero agradecer tu incondicional ayuda que en varios
casos me brindas



"Maxi" escribió en el mensaje
news:e%
Hola, yo he trabajado con tablas de 100 a 300 millones de registros sin
problemas. Podes partir si queres pero para eso deberias hacer un estudio
mas profundo de los datos y como se usan. Quizas los historicos los podes
poner en una tabla y no se consulten tantos y solo dejar los actuales en
la real. Pero que problemas estas teniendo?


Salu2
Maxi


"Eduardo De Luca" escribió en el mensaje
news:
Entonces para vos es lo mismo las dos opciones?

El problema es que estoy trabajando con volumenes altos de datos y
estoy tratando de mejorar los tiempos de proceso
"Maxi" escribió en el mensaje
news:
Opinion con respecto a que? 100 millones de registros no deberian ser
un problema para sqlserver :-)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas
Msn:

Maxi.da[arroba]gmail.com

"Eduardo De Luca" escribió en el mensaje
news:u$
Pregunta de Performance :



A) un tabla con 100 millones de registros



B) Diez tablas con 10 millones de registros unidas por una vista
(particionamiento de la tabla) , con sus correspondientes check



En ambos casos las mismas reciben un alto grado de actualizaciones y
consultas.





De los dos casos planteados, y recurro a la experiencia que alguno
haya tenido con manejo de tablas de gran volumen

Que opción recomiendan?

Gracias


















Respuesta Responder a este mensaje
#9 Eduardo De Luca
12/05/2005 - 03:22 | Informe spam
donde se llama al EXEC E1_MOVIMIENTOS_INSERT2 solamente realiza el insert de
los datos mas una marca en otra talbla , los demas

va el codigo

desde ya les agradezco la ayuda anterior y la que puedan dar

SELECT @v_rep_total_reg = @v_regMov
SELECT @v_rep_total_rech = count(*) FROM in_e1mov WHERE
(inmov_error IS NOT NULL AND RTRIM(inmov_error)<>'')
SELECT @v_rep_total_desc = 0
SELECT @v_rep_total_inc = 0
SELECT @v_rep_total_no_inc = 0

OPEN cur_mov
FETCH NEXT FROM cur_mov INTO
@c_o_clave_mov, @c_o_cta_clave_mov, @c_o_mon_mov, @c_o_fecha_mov,
@c_o_con_mov,
@c_o_scn_mov, @c_o_com_mov,
@c_o_grupo_mov, @c_o_importe_mov, @c_o_signo_mov,
@c_o_obs_mov, @c_o_filer_mov, @c_o_cuo_mov
WHILE @@FETCH_STATUS = 0 BEGIN

BEGIN -- Valida que la Clave no exista
SELECT @v_temp = 0
SELECT @v_temp = 1
WHERE NOT exists(SELECT 1 FROM in_e1_alta_aut WHERE
alt_tabla='mov' AND alt_clave = @c_o_clave_mov)

IF @v_temp = 0 BEGIN

SELECT @v_rep_total_desc = @v_rep_total_desc + 1

IF RTRIM(@c_o_filer_mov) = 'S'
BEGIN

UPDATE e1_movimientos set mov_baja_fecha = getdate()
FROM in_e1_alta_aut
WHERE alt_tabla = 'mov' AND alt_clave = @c_o_clave_mov
AND mov_id = alt_id
END


END
END

IF @v_temp = 1 BEGIN
BEGIN
SELECT @v_id_cta_mov = 0
SELECT @v_id_cta_mov = alt_id FROM in_e1_alta_aut WHERE
alt_tabla='cta' AND alt_clave = @c_o_cta_clave_mov
END

BEGIN
SELECT @v_id_mon_mov = 0
SELECT @v_id_mon_mov = mon_id FROM monedas WHERE
monedas.mon_nombre_corto = rtrim(@c_o_mon_mov) AND monedas.mon_baja_fecha IS
NULL
END
BEGIN
SELECT @v_id_con_mov = 3
SELECT @v_id_con_mov = con_id FROM conceptos WHERE
conceptos.con_nombre_corto = rtrim(@c_o_con_mov) AND
conceptos.con_baja_fecha IS NULL
END
BEGIN
SELECT @v_id_scn_con = 0
SELECT @v_id_scn_con = scn_id FROM sub_conceptos WHERE
scn_nombre_corto = rtrim(@c_o_scn_mov) AND scn_baja_fecha IS NULL
END
BEGIN -- componentes
SELECT @v_id_com_mov = 1
UPPER(componentes.com_nombre_corto) = UPPER(@c_o_com_mov) AND
componentes.com_baja_fecha IS NULL
END

BEGIN -- filler
cta_id = @v_id_cta_mov
@esc_id, @string out

SELECT @string =''
SELECT @c_o_filer_mov = @string
END

SELECT @v_id_cuo_mov = 0


SELECT @v_usu_id_mov = 1
SELECT @v_o_fecha_mov = CONVERT(DATETIME,@c_o_fecha_mov,112)
SELECT @v_o_importe_mov =
CONVERT(numeric(9,2),@c_o_importe_mov)
SELECT @v_id_grp_mov = 0 -- Dentro del sp de insert se incrementa
(@c_o_grupo_mov).


EXEC E1_MOVIMIENTOS_INSERT2
@v_id_cta_mov,
@v_id_mon_mov,
@v_id_con_mov,
@v_id_scn_con,
@v_o_fecha_mov,
@c_o_signo_mov,
@v_o_importe_mov,
@c_o_obs_mov,
@c_o_filer_mov,
@v_id_com_mov,
@v_id_grp_mov,
@v_id_cuo_mov,
@v_fecha_alta,
@v_usu_id_mov,
@v_cod_ret_mov output,
@v_id_mov output

IF @v_cod_ret_mov = 0 BEGIN
INSERT INTO in_e1_alta_aut
(alt_tabla,
alt_clave,
alt_id)
VALUES
('mov',
@c_o_clave_mov,
@v_id_mov)

Si ingresa un movimiento de tarjetas con fecha valor marco la cuenta
en e1_cuentas_actualizar
IF @v_o_fecha_mov < @v_fec_proceso BEGIN
INSERT e1_cuentas_actualizar VALUES (@v_id_cta_mov,@v_o_fecha_mov)
END


SELECT @v_rep_total_inc = @v_rep_total_inc + 1
END ELSE BEGIN
INSERT e1_print_out SELECT 'Ingreso
Cuentas',GETDATE(),'cod_ret=' + STR(@v_cod_ret)
SELECT @v_rep_total_no_inc = @v_rep_total_no_inc + 1
END
END
SELECT @v_error=@@Error
IF @v_error <> 0 BEGIN
INSERT e1_print_out SELECT 'Ingreso
Cuentas',GETDATE(),'Error: '+CONVERT(VARCHAR(10),@v_error)
INSERT e1_print_out SELECT 'Ingreso
Cuentas',GETDATE(),@c_d_clave_pdc
SELECT @v_rep_total_no_inc = @v_rep_total_no_inc + 1
END
FETCH NEXT FROM cur_mov INTO @c_o_clave_mov, @c_o_cta_clave_mov,
@c_o_mon_mov, @c_o_fecha_mov, @c_o_con_mov,
@c_o_scn_mov, @c_o_com_mov,
@c_o_grupo_mov,
@c_o_importe_mov, @c_o_signo_mov, @c_o_obs_mov, @c_o_filer_mov,
@c_o_cuo_mov
END
CLOSE cur_mov
DEALLOCATE cur_mov





"Miguel Egea" escribió en el mensaje
news:
Bueno, el tema lo más probable que esté en el cursor. Ponnos un ejemplo e
intentamos buscar una vuelta sin cursor.

Me gusta decir que el mejor cursor es el cursor muerto, pero vamos igual
soy un poco radical con esto :-)


Miguel Egea
Microsoft SQL-Server MVP
http://www.portalsql.com
Brigada Anti-cursores--


"Eduardo De Luca" escribió en el mensaje
news:Or7%
El tema seria asi : me dieron para optimizar un producto que el bach esta
tardando como 7 horas en correr , ya tengo acotados las partes en donde
mas se degrada .

Como premisa te voy a decir que este modelo no lo diseñe , y no se puede
cambiar dada la naturaleza del producto

Te doy un ejemplo :



una tabla tiene 45 gb mas 30gb de indices 15 gb de espacio no usado
(ahi creo que tengo la primer falla),

el tema es que (te paso la version resumida) , para insertar 100000 reg
tarda como 1 hora.

Como realiza en insert : a traves de un cursor evalua 3 o cuatro 4 reglas
, todas sencillas y sin complejidad y en virtud al resultado de ellas
inserta los registros.

El caso es que el cursor esta optimizado (solo avance solo lectura) , las
evaluaciones que te comente arriba también, descarto que sea el Server
(tiene 8 prosesarores y discos SCSI de ultima tecnología - en otra
consulta ya te lo había mencionado).

Entonces con este escenario pensé en particionar la tabla y unirla por
vistas , pero no me quería jugar a hacer esta jugada si , para gente que
ya aya tenido experiencia es lo mismo no le aporto ninguna mejora

En pocas palabras , estoy medio trabado y no se para donde ir . A mi me
parece que la tabla en si esta para atrás y quería probar con recrearla ,
ya que en ambientes de desarrollo , haciendo una prueba , pero con una
tabla de menor volumen (exactamente la mitad 20 gb) la consulta me tardo
1min 20 seg.



Pd : Maxi de paso te quiero agradecer tu incondicional ayuda que en
varios casos me brindas



"Maxi" escribió en el mensaje
news:e%
Hola, yo he trabajado con tablas de 100 a 300 millones de registros sin
problemas. Podes partir si queres pero para eso deberias hacer un
estudio mas profundo de los datos y como se usan. Quizas los historicos
los podes poner en una tabla y no se consulten tantos y solo dejar los
actuales en la real. Pero que problemas estas teniendo?


Salu2
Maxi


"Eduardo De Luca" escribió en el mensaje
news:
Entonces para vos es lo mismo las dos opciones?

El problema es que estoy trabajando con volumenes altos de datos y
estoy tratando de mejorar los tiempos de proceso
"Maxi" escribió en el mensaje
news:
Opinion con respecto a que? 100 millones de registros no deberian ser
un problema para sqlserver :-)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas
Msn:

Maxi.da[arroba]gmail.com

"Eduardo De Luca" escribió en el mensaje
news:u$
Pregunta de Performance :



A) un tabla con 100 millones de registros



B) Diez tablas con 10 millones de registros unidas por una vista
(particionamiento de la tabla) , con sus correspondientes check



En ambos casos las mismas reciben un alto grado de actualizaciones y
consultas.





De los dos casos planteados, y recurro a la experiencia que alguno
haya tenido con manejo de tablas de gran volumen

Que opción recomiendan?

Gracias






















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida