#dotNetSpain2016
Enrique Catalá
Mentor SolidQ (www.solidq.com)
ecatala@solidq.com | @enriquecatala
www.sqlpass.es
Como hacer tuning a
capas de acceso a datos
en .NET
Patrocinadores
Colaboradores
#dotNetSpain2016
Comunidad PASS Spain:
Próximos eventos
http://www.sqlpass.es/
#dotNetSpain2016
1. Introducción
2. Demo time!
Agenda
#dotNetSpain2016
 Ingeniero Informático
 Microsoft Data Platform MVP
 Mentor en SolidQ
ecatala@solidq.com
www.solidq.com
@enriquecatala
enrique@enriquecatala.com
www.enriquecatala.com
#dotNetSpain2016
Capas de acceso a datos
#dotNetSpain2016
Hardware
Tuning HW (cabina,
red,..)
ServiciosTuning SQL, IIS
Aplicación Tuning aplicaciones
#dotNetSpain2016
Tipología de
acceso
Por conjuntos Por cursores
Patrones de
bajo nivel
Dinámico
Adhoc
Parametrizable
Estático
Stored
procedures
Arquitecturas
Modelo
conectividad
Conectada
Desconectada
Modelo de
desarrollo
Manual
ORM
#dotNetSpain2016
Fundamentos
• Tiempo de desarrollo
• Diferencia de roles
• Desarrollador vs. DBA
• Independencia de la
aplicación
• Uso de modelo de
datos
• Abstracción de servidor
de base de datos
Másmotivos
• Rechazo a T-SQL
• Manejo de cadenas
para acceso a datos
• Errores en tiempo de
ejecución vs.
Compilación
• Uso de lenguajes más
familiares
• Es más “cool”
#dotNetSpain2016
Librería Método ¿Qué hace?
Query.PlanCompiler.Pl
anCompiler
Compile(cqt.DbCommandTree ctree, …….) Compila query hacia SQL Server. Coste de
compilación. Aquí generalmente es donde
debemos poner esfuerzos en optimizar linq
Objects.Elinq.Compile
dELinqQueryState
GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado
previamente
Objects.Elinq.ELinqQu
eryState
GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado
Objects.ObjectQuery
<T>
GetResults(MergeOption? forMergeOption) Obtiene datos. Incluye datos GetExecutionPlan,
Compile y el coste de materializar incluido. Es el
coste total
#dotNetSpain2016
Deja rodar tu app un tiempo y mira qué mejorar
#dotNetSpain2016
• List<T> -> O(n)
• Dictionary<T,U> -> O(1)
#dotNetSpain2016
Generalmente es preferible hacer menos operaciones
a la BBDD con mas conjuntos de filas
#dotNetSpain2016
• Evita procesados fila a fila
Capas de acceso
a datos
• La estructura de datos importa, no es
todo BBDD
Complejidad
algorítmica
• Centra el tiro a donde esté el
problema
Profiling de una
aplicación .NET
• Ya no estamos en los 90. Hasta tu
móvil tiene 8 núcleos 
Consideraciones
de concurrencia
No olvides realizar la encuesta
¡Gracias!
#dotNetSpain2016
Enrique Catalá Bañuls
Mentor SolidQ (www.solidq.com)
ecatala@solidq.com | @enriquecatala
http://aka.ms/DOTNETT6S4

Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)