Bueno, solo queria escribiros para contaros algo que a estas horas me ha
dejado estupefacto, y es que, a pesar de que Miguel Egea ya me comento
esto que os voy a explicar ( que porsupuesto yo no le creí xDDD ).
Bueno, no es que desconfie de alguien tan sabio, solo que yo suelo
fiarme de las cosas que yo mismo compruebo ;)
Bueno al grano, tengo algo de tiempo porque estoy ayudando a mi novia a
hacer un howto de como configurar un servidor linux, y mientras estaba
tumbado leyendo algo de sql server.. en el capitulo de almacenamiento
interno, me dio el picazon de ver que hacia de verdad esta herramienta
cuando trabajaba con ella.
Me he quedado estupefacto cuando en algo tan simple como esto :
Creo una tabla que se llama "borrame", le añado dos campos uno identity
y un varchar.. ( el identity porspuesto lo declaro como la clave primaria ).
Abro el profiler que ya tenia puesto, y observo que hace mil
comprobaciones.. bueno , esto esta bastante bien. Aunque claro yo en el
Analizador de consultas me hubiera fallado al crear la tabla si ya
estubviese creada.. sin tanto rodeo.
Despues, meto registros en la tabla para que vaya creando numericos en
el campo identity. Cuando tengo unos 20 ( del 1 al 20 ), borro del 15 al
19, con lo que apartir de entonces, la secuencia de los numeros se ve
rota, ya que el identity sigue su curso sin rellenar los "huecos" "vacios".
Algo tan trivial como insertar datos en esa tabla de otra tabla que tb
tenia un campo con un valor identity, se me ocurre una forma que un
compañero me comento que hizo el en una de sus tablas ( yo ya sabia como
se hacia con el analizador de consultas( con el identity_insert ), pero
claro la forma que el me comentaba era muuuuuuuy sencilla y en 3 pasitos
). El hacia lo siguiente :
primero le daba a diseñar tabla y en el campo identity le daba a que no
era identity ( ponia, a No esa propiedad ) y guardaba.
segundo el copio datos de otra tabla uqe tenian identity y bueno todo
perfecto porque la mi tabla problematica, ( la receptora ) ya no tenia
un campo identity, si no un int.
tercero le daba a diseñar tabla y la ponia con identity a Si, y asi
ademas de no darle fallo, se le ponian bien todos los indices del
identity , es decir, empezaba de 1, hasta el numero de registro que
fuese, ( ejemplo = 1 al 100 ).
Bueno, la gracia esque despues de hacer esto, rebusco en las infinitas
lineas que a registrado profiler de la actividad del administrador
corporativo y esto es lo que encuentro:
Primero crea una tabla temporal identica a la mia llamada
dbo.tmp_borrame ( el nombre borrame, es porque mi tabla se llamaba así ) :P.
Segundo crea un CURSOR y carga en memoria los datos de mi tabla original
para irlos pasando a su tabla temporal. ( aqui me quedo flipao, usea,
que si tengo 8 millones de registros me lio a petar la memoria del
server?, es mas, puedo permitirme que en un servidor de produccion se
realize esta barbaridad para llenar log, y consumir el doble de
espacio???. el doble espacio es evidentek, porqeu hay un momento en el
que esisten dos tablas "iguales", la mia y la suya llamada tmp_).
Despues de esto, borra mi tabla. Luego la vuelve a crear, y viceversa
Bueno la verdad, no es por criticarlo, porque os diré qeu a mi me
resulta muy comodo para tareas como observar y dianosticar las
replicaciones, y los jobs junto con su estado, por ejemplo, que es mucho
mas "engorroso" hacerlo a mano ( por no decir casi que imposible :P ).
Esto solo lo expongo a la comunidad, para que lo sepais los que no lo
sabian, qeu yo , un alma inocente se a dado cuenta algo que podria
causar algun "digustillo" a mas de uno. Y por supuesto darme cuenta de
lo mucho uqe me queda por aprender y de investigar.
Sin mas me despido que ya es tarde ;)
Saludos Paulino Padial
ATTE: Miguel, lo digo y lo dire siempre, ¡eres una makina!
Leer las respuestas