En esta sesión veremos mejores prácticas para cargas de datos a ser utilizados en ETLs de alto volumen, veremos técnicas de carga y configuración de la base de datos, uso de particiones, compresión, indexes columnstore y más. Esta receta estará cargada de buenas demos, todas aprobadas por la abuela desde épocas que datan antes del windows 3.1!
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
La receta de la abuela para mejores cargas de datos
1. La receta de la abuela para
mejores cargas de datos
Alejandro Cordero
Database Consultant – Pythian Group
Correo electrónico: alejandro@sqlturbo.com
Twitter: @ale_corderocr
LinkedIn: https://cr.linkedin.com/in/alejandrocorderocr
BLOG: Sqlturbo.com
MCTS, CSM
3. 3
Agenda
El papel de los modelos de recuperación
Operaciones “Minimally logged”
TraceFlag 610
Importando con SSIS
Importando con BCP
Importando con Bulk Insert
Importando con Select Into / Insert .. Select
Conclusiones de la abuela
3
4. 4
Transacción Completa
4
1
3
write-ahead logging (WAL)
sincrónico
2
Transacción
Bitacora de transacciones
O transaction log
Archivo de datos
O Data file
Modelos de Recuperación
• Full – Se guardan todas las operaciones.
• Bulk-logged – Se guardan operaciones
excepto ciertas operaciones de carga de
alto rendimiento.
• Simple – Solo guarda información
temporalmente y son truncadas luego
de un checkpoint.
6. 6
Páginas y Extents de datos
Página de datos - 8 KB
Extent – unidad básica -8
páginas o 64kb
Las páginas pueden ser fully logged
O Minimally logged y en un Mixed extent
Esto puede pasar para una página que sea
De datos o de índices, significa que en un
Extent mixto puedo tener también un
Comportamiento Mixto, donde mis
Páginas de datos son Minimally logged
Pero las páginas de los índices son
Fully logged.
El mejor escenario es cuando
Logro que mis páginas de
Datos e índices sean
Minimally logged.
7. 7
Ingredientes para una carga de datos
-Pre requisitos para operaciones ML-
Base de datos en Simple/Bulk Load
La tabla no esta siendo replicada
La tabla es bloqueada por medio de un TABLOCK
Si la tabla no tiene índices, las paginas de datos son “Minimally logged”
Si la tabla no tiene índice Clustered y tiene índices Non Clustered las páginas
de datos son “Minimally logged”, sin embargo las páginas de los índices serán
ML solo si la tabla esta vacía
8. 8
Ingredientes para una carga de datos
-Pre requisitos para operaciones ML-
Si la tabla tiene un índice clustered y está vacía ambas paginas de índice y de
datos son Minimally logged. En contraste si la tabla no está vacía la operación
será Fully Logged
Mejores Prácticas Para conservar tamaño: Trate de
hacer varios bulk loads
en diferentes batches. Cada vez que termina un batch
El log puede ser limpiado por un transaction log backup
cuando se está en bulk-logged mode.
Péro
El primer batch será Minimally logged…..los demás serán
Mixtos o Full.
9. 9
Traceflag 610 – el Ingrediente secreto
Cuando se usa este traceflag se habilita la posibilidad
De hacer operaciones minimally logged
Sobre índices B-tree, los árboles B, son el algoritmo usado por SQL Server en sus índices.
De esta forma podrémos tener operaciones ML sobre Índices clustered llenos . Con ciertas
excepciones. Solo cuando el dato se guarda sobre una página nueva y no dentro de una
existente, este va a ser ML.
non-FULL recovery model
AND NOT replicated
AND (
(Heap AND TABLOCK)
OR (B-tree AND empty AND TABLOCK)
OR (B-tree AND empty AND TF-610)
OR (B-tree AND nonempty AND TF-610 AND NEW key-range)
Mejores Prácticas : cuando se usa el t610
Usar el batchsize más grande posible
DBCC TRACEON (610, -1);
11. 11
Cuando se hace una operación Minimally Logged
Table Indexes Rows in table Hints Without TF 610 With TF 610
Concurrent
possible
Heap Any TABLOCK Minimal Minimal Yes
Heap Any None Full Full Yes
Heap + Index Any TABLOCK Full Depends (3) No
Cluster Empty TABLOCK, ORDER
(1)
Minimal Minimal No
Cluster Empty None Full Minimal Yes (2)
Cluster Any None Full Minimal Yes (2)
Cluster Any TABLOCK Full Minimal No
Cluster + Index Any None Full Depends (3) Yes (2)
Cluster + Index Any TABLOCK Full Depends (3) No
12. 12
El plato Principal – la carga de datos
SSIS
BCP
BULK INSERT
SELECT INTO
INSERT SELECT
14. 14
Resumen
Functionality Integration Services BULK INSERT BCP INSERT … SELECT
SQL Dest. OLE DB Dest
Protocol Shared Memory TCP/IP
Named Pipes
In Memory TCP/IP
Shared Memory
Named Pipes
In Memory
Speed Faster / Fastest(4) Fast / Fastest (1) Fastest Fast Slow / Fastest (2)
Data Source Any Any Data File Only Data File Only Any OLE DB
Bulk API Support Not Native Not ORDER
Not Native
All All No Hints Allowed
Lock taken with
TABLOCK hint on
heap
BU BU BU BU X
Can transform in
transit
Yes Yes No No Yes
I/O Read block
Size
Depends(3) Depends(3) 64 kilobytes (KB) 64 KB Up to 512 KB
SQL Server
Version
2005 and 2008 2005 and 2008 7.0, 2000, 2005,
and 2008
6.0, 7.0, 2000,
2005, and 2008
2008
Invoked from DTEXEC / BIDS DTEXEC / BIDS Transact-SQL Command Line Transact-SQL
16. 16
Conclusiones
Usar Traceflag 610 – Pero, probar primero!
Usar SSIS o bulk Insert de preferencia
Tomar en cuenta espacio necesario para el crecimiento
Tomar en cuenta el modelo de recuperación
Tomar en cuenta CPU disponibles
Tomar en cuenta si tengo trasaction logs corriendo.