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
Speaker Bio
2
Picture Here
Speaker Bio - Alejandro Cordero
2
SQLTURBO.COM
DBA en Pythian
Scrum Master Certified
alejandro@sqlturbo.com
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
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.
5
Operaciones Minimally Logged
SSIS
Bcp
BULK INSERT
INSERT... SELECT
Select into operations
5
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
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
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
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);
Revisando Page Allocations
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
El plato Principal – la carga de datos
SSIS
BCP
BULK INSERT
SELECT INTO
INSERT SELECT
Comparativa de Rendimiento entre las 5 recetas
SSIS
BCP
BULK INSERT
SELECT INTO
INSERT SELECT
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
Cargas de datos simultaneas
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.
Preguntas?
Correo electrónico: alejandro@sqlturbo.com
Twitter: @ale_corderocr
LinkedIn:
https://cr.linkedin.com/in/alejandrocorderocr
BLOG: Sqlturbo.com
MCTS, CSM
Thank You for Attending
Follow @pass24hop
Share your thoughts with hashtags
#pass24hop & #sqlpass

La receta de la abuela para mejores cargas de datos

  • 1.
    La receta dela 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
  • 2.
    Speaker Bio 2 Picture Here SpeakerBio - Alejandro Cordero 2 SQLTURBO.COM DBA en Pythian Scrum Master Certified alejandro@sqlturbo.com
  • 3.
    3 Agenda El papel delos 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.
  • 5.
    5 Operaciones Minimally Logged SSIS Bcp BULKINSERT INSERT... SELECT Select into operations 5
  • 6.
    6 Páginas y Extentsde 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 unacarga 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 unacarga 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);
  • 10.
  • 11.
    11 Cuando se haceuna 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
  • 13.
    Comparativa de Rendimientoentre las 5 recetas SSIS BCP BULK INSERT SELECT INTO INSERT SELECT
  • 14.
    14 Resumen Functionality Integration ServicesBULK 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
  • 15.
    Cargas de datossimultaneas
  • 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.
  • 17.
    Preguntas? Correo electrónico: alejandro@sqlturbo.com Twitter:@ale_corderocr LinkedIn: https://cr.linkedin.com/in/alejandrocorderocr BLOG: Sqlturbo.com MCTS, CSM
  • 18.
    Thank You forAttending Follow @pass24hop Share your thoughts with hashtags #pass24hop & #sqlpass