47
Optimizando la Performance en la Web Alejandro Mihanovich Senior Consultant Andrés Iturralde Premier Field Engineer http://blogs.msdn.com/ai turralde

Msdn optimizando la performance en la web

Embed Size (px)

Citation preview

Page 1: Msdn   optimizando la performance en la web

Optimizando la Performance en la Web

Alejandro MihanovichSenior Consultant

Andrés IturraldePremier Field Engineerhttp://blogs.msdn.com/aiturralde

Page 2: Msdn   optimizando la performance en la web

Agenda

• ¿Por qué es importante el rendimiento?

• Desafíos comunes de rendimiento• Analizando problemas de rendimiento• Tácticas para Mejorar el Rendimiento

Page 3: Msdn   optimizando la performance en la web

¿Por qué es importante el rendimiento?− El rendimiento es primordial!− Es crítico en la calidad de cualquier

aplicación− El rendimiento debe ser considerado

desde las etapas iniciales del desarrollo

− Si tus aplicaciones son lentas, tus usuarios se quejaran

Page 4: Msdn   optimizando la performance en la web

Porcentaje de Abandono

* Fuente: How Loading Time Affects Your Bottom Line - http://blog.kissmetrics.com/loading-time/

Page 5: Msdn   optimizando la performance en la web

Desafíos Comunes de Rendimiento− Problemas frecuentes:

− Latencia de la red− Payload Size− Network Round Trips− Conexiones TCP limitadas− Código pobremente optimizado

− No son problemas exclusivos de ASP .NET

Page 6: Msdn   optimizando la performance en la web

Latencia de la Red

Región Average Round-Trip Time (ms) Average Packet Loss (%)

Africa 469 3.70

Australia 204 0.23

Balkans 202 0.74

Central Asia 597 1.24

East Asia 192 0.68

Europa 178 0.48

Latin America 270 1.15

Middle East 279 0.87

North America 59 0.09

Russia 243 2.48

South Asia 424 1.89

South East Asia 254 0.03

* Fuente: Universidad Stanford en Carolina del Norte

Estadísticas de la Red a través Internet por Región

Page 7: Msdn   optimizando la performance en la web

Payload Size & Network Round Trips− Payload Size, tamaño de los datos

transmitidos necesarios para renderizar una página

− Network Round Trips, número de requests TCP necesarios para obtener los datos

− Ejemplos típicos de problemas derivados:− Compresión de contenido no habilitada− Usar múltiples imágenes pequeñas estáticas

Page 8: Msdn   optimizando la performance en la web

Conexiones TCP limitadas

− Especificación HTTP/1.1 sugiere que los browsers deben descargar solo dos recursos a la vez

Tiempo

Arc

hiv

os

HTML

Recurso de la página

Page 9: Msdn   optimizando la performance en la web

Código Pobremente Optimizado− Algunos problemas frecuentes:

− Abuso de redirects− Búsquedas de DNS excesivos− JavaScript y CSS pobremente optimizado− Mal patrón de asignación− Leaks de memoria

Page 10: Msdn   optimizando la performance en la web

Analizando Problemas de Rendimiento− Herramientas recomendadas del lado del

cliente− Fiddler

http://www.fiddler2.com − Network Monitor

http://bit.ly/JF3osx − Visual Round Trip Analyzer (VRTA)

http://bit.ly/JvrrGz

Page 11: Msdn   optimizando la performance en la web

Tácticas para Mejorar el Rendimiento− Reducir el tamaño del payload− Hacer uso eficiente del Cache− Optimizar el tráfico de la red− Organizar y escribir código para mejor

rendimiento

Page 12: Msdn   optimizando la performance en la web

DEMO1. Reducir el tamaño del payload2. Cache eficiente3. Optimizar el tráfico de la red4. Organizar y escribir código para mejor rendimiento

Page 13: Msdn   optimizando la performance en la web

Analizando Problemas de Rendimiento− Herramientas recomendadas del lado del

servidor− Debug Diag 1.2

http://bit.ly/L9MGir − Failed Request Tracing (IIS 7 o superior)

http://bit.ly/vZldlT − LogParser 2.2

http://bit.ly/JeocF5 − Performance Counters (Perfmon)

http://bit.ly/H8ntr0

Page 14: Msdn   optimizando la performance en la web

DEMOAnalizando problemas de rendimiento en el servidor

Page 15: Msdn   optimizando la performance en la web

Tácticas para Mejorar el Rendimiento− IIS 7:

− Application Pool: Integrated Mode− Application Pool: Evitar Reciclaje

− ASP .NET− Liberación correcta de recursos en

memoria− Evitar el mal patrón de asignación− ASP .NET 4.0: Auto-Start− Si no es necesario, evitar: Sesión y/o

ViewState− .NET 4.0: Operaciones Asíncronas

Page 16: Msdn   optimizando la performance en la web

Optimización de la capa de datos // SQL Server− Sistema de administración de datos

relacional (RDBMS)− Desafíos de rendimiento para la Base

de Datos− Costos de Parseo y compilación− Costos del Acceso a los datos− Costo de la “conexión”− Costo de la “transacción”− Implicaciones del “Paginado” de datos en

páginas Web

Page 17: Msdn   optimizando la performance en la web

Optimización de la capa de datos // SQL Server

Parseo y Compilación

Page 18: Msdn   optimizando la performance en la web

Parseo y Compilación

− El motor de datos debe convertir todo batch/sentencia TSQL en programa ejecutable antes de comenzar a retornar resultados

− También debe existir un mecanismo para aprovechar/reutilizar cada segmento de código compilado

− La unidad de abstracción que identifica a un determinado código compilado en SQL Server se llama "Plan de ejecución"

Page 19: Msdn   optimizando la performance en la web

Texto TSQL->Plan

SELECT P.FirstName, P.LastName, SC.AccountNumber, SC.ModifiedDateFROM Sales.Customer AS SCJOIN Person.Person PON SC.PersonID = P.BusinessEntityIDWHERE P.LastName in ('Adams')ORDER BY P.LastName, P.FirstName ;

Page 20: Msdn   optimizando la performance en la web

Parseo y Compilación

− El motor SQL Server conecta una sentencia/batch TSQL con su plan de ejecución mediante un "hash" del texto utilizado para generar dicho plan.Query 1 Se compila y se almacena en el cacheSelect * from Person.Address where AddressID in (1, 2) Query 2 Se compila y se almacena en el cacheSelect * from Person.Address where AddressID in (2, 1) Query 3 Se reutilizaSelect * from Person.Address where AddressID in (1, 2)

Page 21: Msdn   optimizando la performance en la web

Parseo y Compilación

− Aplicaciones Online (OLTP) envían muchas peticiones donde sólo varían los valores en los filtros (WHERE…AND…ETC.) 

− Procesos (DSS), ocurre generalmente lo opuesto.

− El SQL Server solo desecha planes de la memoria bajo condiciones de presión de memoria o si se alcanzó el límite asignado para el procedure cache (~50%-75% de la "memoria disponible“, según el motor SQL)

Page 22: Msdn   optimizando la performance en la web

Parseo y Compilación

− Vistas dinámicas (DMV) en SQL para monitoreo del cache de procedimientosSELECT qs.sql_handle, qs.statement_start_offset, qs.statement_end_offset, qs.creation_time, qs.last_execution_time, SUBSTRING(qt.text,qs.statement_start_offset/2+1, (CASE WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), qt.text)) * 2 ELSE qs.statement_end_offset end - qs.statement_start_offset )/2 ) AS query_text

FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt

Page 23: Msdn   optimizando la performance en la web

Parseo y Compilación− Consumo de memoria a nivel general

en SQL Server

Page 24: Msdn   optimizando la performance en la web

Parseo y compilación− System Monitor

− Memory Manager:Stolen Server Memory: Todo lo que no es cache de datos

− Memory Manager:Target Server Memory: (Representa la "memoria ideal" consumible por la instancia)

− General Statistics: Logins/Sec− General Statistics:Logouts/Sec− General Statistics:User Connections− SQL Statistics:Batch Requests/Sec− SQL Statistics:SQL Compilations/Sec

Page 25: Msdn   optimizando la performance en la web

Monitoreo General Demos− Comando para limpiar el cache

dbcc freesystemcache('all')

Page 26: Msdn   optimizando la performance en la web

DEMOCosto de parseo y compilación

Page 27: Msdn   optimizando la performance en la web

Optimización de la capa de datos // SQL Server

Acceso a Datos

Page 28: Msdn   optimizando la performance en la web

Acceso a disco

− Tasa de transferencia ordenes de magnitud más lenta que la memoria

− Capacidad del subsistema varía considerablemente si los accesos son aleatorios Vs. secuenciales− IO aleatorio: IOPS (“paquetes” de IO por

segundo)− IO secuencial: Mbytes por segundo

Page 29: Msdn   optimizando la performance en la web

Acceso a disco – Contadores en Windows

− System Monitor− PhysicalDisk o LogicalDisk

− Disk Bytes/Sec− Disk Transfers/Sec− Avg Disk Sec/Transfer− Avg Bytes/Transfer− %Idle time

Page 30: Msdn   optimizando la performance en la web

DEMOAcceso a disco con SQLIO

Page 31: Msdn   optimizando la performance en la web

Operadores Join

Page 32: Msdn   optimizando la performance en la web

Nested Loop

Page 33: Msdn   optimizando la performance en la web

Operador Merge

Page 34: Msdn   optimizando la performance en la web

Operador Hash

Page 35: Msdn   optimizando la performance en la web

Indices

- Estructura de un índice− "Arbol" y "Hoja"− Arbol: “Acceso Directo””− Hoja:

− Está ordenada físicamente (ó podría estarlo)− Se puede recorrer en forma independiende (i.e sin

entrar por el arbol)− Muy importante!!: Conocer qué se almacena

en la hoja− El acceso por el arbol se llama "Index Seek".

El recorrido de la hoja se llama "Index Scan"

Page 36: Msdn   optimizando la performance en la web

Indices

Page 37: Msdn   optimizando la performance en la web

Indices− Indice Nonclustered Vs. Cluster

− El índice nonclustered es el índice que conocemos/imaginamos. Es decir, una estructura separada que “apunta” a la tabla.

− En la "hoja" del nonclustered estan únicamente las columnas del índice (+ columnas incluidas).

− Las columnas "incluidas" forman parte de la hoja, pero no del arbol.

− La "hoja" del índice cluster es la tabla entera ordenada físicamente por las columnas definidas en el índice.

Page 38: Msdn   optimizando la performance en la web

Indices

Page 39: Msdn   optimizando la performance en la web

Indices− Indice Nonclustered Vs. Cluster

− No tiene sentido "incluir" columnas en un índice cluster

− Sólo puede haber un único índice cluster definido para una tabla. Obvio, solo puedo ordenar la tabla entera una sola vez sin "duplicar".

Page 40: Msdn   optimizando la performance en la web

DEMOOperadores Join, Indices

Page 41: Msdn   optimizando la performance en la web

Costo de la conexión− Tráfico extra Handshake TCP/IP

(overhead) y negociados de sesión (autentificación).

− Tráfico de autenticación más pesado en versiones recientes de motor SQL que en anteriores.

− Tiempo de kernel (Switch User<->Kernel)

− Posible agotamiento puertos cliente -> Errores

− Disminución del rendimiento y escalabilidad.

Page 42: Msdn   optimizando la performance en la web

DEMOStress nuevas conexiones, Connection Pooling

Page 43: Msdn   optimizando la performance en la web

Costo de la transacción− Toda modificación a la Base de datos se

realiza dentro del marco de una transacción.− Implícita: INSERT INTO TABLA () VALUES…

(BEGIN TRAN y COMMIT TRAN explícitos)− Explícita: BEGIN TRAN UPDATE..INSERT..ETC

COMMIT TRAN− Durante la transacción, todas las

transacciones se almacenan en un buffer de log en memoria.− Sentencia COMMIT fuerza un “flush” del

buffer del log a disco.− Caso contrario, flush en bloques “grandes”

(256K-1024K)

Page 44: Msdn   optimizando la performance en la web

DEMOCosto de la transacción

Page 45: Msdn   optimizando la performance en la web

DEMO (bonus track)Paginado de datos

Page 46: Msdn   optimizando la performance en la web

¿Preguntas?

Page 47: Msdn   optimizando la performance en la web

© 2009 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.  The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond

to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. 

MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.