La receta de la abuela para mejores cargas de datos

18
La receta de la abuela para mejores cargas de datos Alejandro Cordero Database Consultant – Pythian Group Correo electrónico: [email protected] Twitter: @ale_corderocr LinkedIn: https://cr.linkedin.com/in/alejandrocorderocr BLOG: Sqlturbo.com MCTS, CSM

Transcript of La receta de la abuela para mejores cargas de datos

Page 1: La receta de la abuela para mejores cargas de datos

La receta de la abuela para mejores cargas de datos

Alejandro CorderoDatabase Consultant – Pythian Group

Correo electrónico: [email protected]: @ale_corderocrLinkedIn: https://cr.linkedin.com/in/alejandrocorderocrBLOG: Sqlturbo.comMCTS, CSM

Page 2: La receta de la abuela para mejores cargas de datos

2

Speaker Bio

Picture Here

Speaker Bio - Alejandro Cordero

2

SQLTURBO.COM

DBA en Pythian

Scrum Master Certified

[email protected]

Page 3: La receta de la abuela para mejores cargas de datos

3

Agenda

El papel de los modelos de recuperaciónOperaciones “Minimally logged”TraceFlag 610Importando con SSISImportando con BCPImportando con Bulk InsertImportando con Select Into / Insert .. SelectConclusiones de la abuela

3

Page 4: La receta de la abuela para mejores cargas de datos

4

Transacción Completa

4

1

3LOG

Data

OK

write-ahead logging (WAL)

sincrónico

2Transacción

Bitacora de transaccionesO transaction log

Archivo de datosO 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.

Page 5: La receta de la abuela para mejores cargas de datos

5

Operaciones Minimally Logged

SSISBcpBULK INSERTINSERT... SELECTSelect into operations

5

Page 6: La receta de la abuela para mejores cargas de datos

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 loggedO Minimally logged y en un Mixed extentEsto puede pasar para una página que sea De datos o de índices, significa que en unExtent mixto puedo tener también un Comportamiento Mixto, donde mis Páginas de datos son Minimally loggedPero las páginas de los índices son Fully logged.

El mejor escenario es cuandoLogro que mis páginas deDatos e índices sean Minimally logged.

Page 7: La receta de la abuela para mejores cargas de datos

7

Ingredientes para una carga de datos-Pre requisitos para operaciones ML-Base de datos en Simple/Bulk LoadLa tabla no esta siendo replicadaLa tabla es bloqueada por medio de un TABLOCKSi 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

Page 8: La receta de la abuela para mejores cargas de datos

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 loadsen diferentes batches. Cada vez que termina un batchEl log puede ser limpiado por un transaction log backup cuando se está en bulk-logged mode.

PéroEl primer batch será Minimally logged…..los demás seránMixtos o Full.

Page 9: La receta de la abuela para mejores cargas de datos

9

Traceflag 610 – el Ingrediente secreto

Cuando se usa este traceflag se habilita la posibilidadDe hacer operaciones minimally loggedSobre í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 modelAND NOT replicatedAND (                (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 t610Usar el batchsize más grande posible

DBCC TRACEON (610, -1);

Page 10: La receta de la abuela para mejores cargas de datos

Revisando Page Allocations

Page 11: La receta de la abuela para mejores cargas de datos

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 YesHeap + Index Any TABLOCK Full Depends (3) NoCluster 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 NoCluster + Index Any None Full Depends (3) Yes (2)Cluster + Index Any TABLOCK Full Depends (3) No

Page 12: La receta de la abuela para mejores cargas de datos

12

El plato Principal – la carga de datos

SSISBCPBULK INSERTSELECT INTOINSERT SELECT

Page 13: La receta de la abuela para mejores cargas de datos

Comparativa de Rendimiento entre las 5 recetasSSISBCPBULK INSERTSELECT INTOINSERT SELECT

Page 14: La receta de la abuela para mejores cargas de datos

14

ResumenFunctionality Integration Services BULK INSERT BCP INSERT … SELECT

SQL Dest. OLE DB Dest

Protocol Shared Memory TCP/IPNamed Pipes

In Memory TCP/IPShared MemoryNamed 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 ORDERNot 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

Page 15: La receta de la abuela para mejores cargas de datos

Cargas de datos simultaneas

Page 16: La receta de la abuela para mejores cargas de datos

16

Conclusiones

Usar Traceflag 610 – Pero, probar primero!Usar SSIS o bulk Insert de preferenciaTomar en cuenta espacio necesario para el crecimientoTomar en cuenta el modelo de recuperaciónTomar en cuenta CPU disponiblesTomar en cuenta si tengo trasaction logs corriendo.

Page 17: La receta de la abuela para mejores cargas de datos

Preguntas?

Correo electrónico: [email protected]: @ale_corderocrLinkedIn: https://cr.linkedin.com/in/alejandrocorderocrBLOG: Sqlturbo.comMCTS, CSM

Page 18: La receta de la abuela para mejores cargas de datos

Thank You for AttendingFollow @pass24hop

Share your thoughts with hashtags #pass24hop & #sqlpass