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

18
#dotNetSpain2016 Enrique Catalá Mentor SolidQ (www.solidq.com) [email protected] | @enriquecatala www.sqlpass.es Como hacer tuning a capas de acceso a datos en .NET

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

#dotNetSpain2016

Enrique CataláMentor SolidQ (www.solidq.com)[email protected] | @enriquecatalawww.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

[email protected]

www.solidq.com

@enriquecatala

[email protected]

www.enriquecatala.com

#dotNetSpain2016

Capas de acceso a datos

#dotNetSpain2016

HardwareTuning 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

Fu

nd

am

en

tos • 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ás

mo

tivo

s • 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 filaCapas 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ñulsMentor SolidQ (www.solidq.com)[email protected] | @enriquecatala

http://aka.ms/DOTNETT6S4