El Troll Ebus Profile picture
Tengo perros y gatos. Seguido me apendejo. Libertario. Hago software. Hablo inglés, español y pendejadas. También se parte leña en @LaTrolleria_ A.I. Picks

Aug 4, 2021, 13 tweets

Hilo nerd, DBs SQL Server. Aviso para que si no les interesa ni se metan.

Como les decía, quiero eficientar un proceso para reducir sus tiempos, ya que 5 minutos pues es demasiado. Llevo casi 20 horas ejecutándolo y pues me caga.

El primer paso es encontrar que es lo que está tragándose todo ese tiempo, como ven en el screenshot anterior, algo no estoy cronometrando y eso es lo que se está comiendo todo ese tiempo. Procedo.

Procedí a cargar el segundo archivo más grande a una base de datos vacía, para no tener el problema de búsquedas en índices ni nada por estilo. Eso nos muestra a los primeros culpables, aquí en orden de importancia. Se cargaron 8.4 millones de registros.

El proceso culpable es el bulk load de el archivo .csv a la base de datos. Es una carga plana a una tabla sin índices, así que las opciones de optimización no son muchas. La base de datos como fue recién creada está en el disco C, que es un SSD.

La única optimización posible es mover la BD de datos a un disco más rápido, así que la moveré al NVME y corro de nuevo el proceso. Este es el query para mover la base.

OJO al comentario, no la vayan a cagar.

Cierren las conexiones abiertas a la DB antes de ponerla offline, or expect some pain, BTW.

Y moverlo al NVME sirvió para pura verga. 5 marginales segundos de ganancia.

La sugerencia de @alnrdzrcc fue la que dio en el clavo. Se redujo el tiempo de carga a casi la mitad al poner el archivo de datos y el log en distintos discos. Vamos con el pedo que sigue.

Metiéndole mas detalle a la medición de los tiempos, nos brincan 2 culpables más. El primero es una generación de un índice a la tabla de staging que necesito, así que ni pedo. el otro es la inserción de los datos geográficos. Vamos a darle por ese lado a ver cuanto más baja.

Y obviamente la había cagado. La tabla no tenía índice, al transferirla de la base de datos fuente los índices no se crean. El tiempo se redujo a una octava parte al cargar los datos geográficos.

Toca correr la carga completa a ver cuanto se logro reducir.

Pues ayer detuve la carga a las 19 horas de ejecución y todavía no terminaba.

Tener que recargar la base de datos completa no debe ser una ocurrencia común, pero para lo que estoy haciendo era necesario. y 13:05:22 es un tiempo más que razonable.

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling