Ver por etiquetas

Todas las etiquetas » Optimización (RSS)

Consultas para mejorar el rendimiento de tu SQL Azure (y no Azure)

Cuando trabajamos contra un SQL Server ‘on premise’ contamos con un motón de herramientas para averiguar que consultas están siendo más costosas y que índices podrían ayudarnos a mejorar el rendimiento de nuestra base de datos. Cuando trabajamos con SQL Azure, contamos un arsenal mucho más reducido de armas. Hoy quiero compartir dos consultas que me han sido de suma utilidad a la hora de mejorar el rendimiento de un importante proyecto que estamos realizando en Plain Concepts con SQL Azure. La primera...

Detectar cambios en los datos en SQL Server

Saber si los datos almacenados en una base de datos han cambiado es un problema al que nos enfrentamos frecuentemente. Son varios los escenarios en los que tenemos esta necesidad: Enviar solo a un cliente desconectado los datos que han cambiado mientras no tenía conexión. Actualizar datos cacheados solo si los datos subyacentes a la caché han cambiado. Refrescar la representación de los datos en una interfaz de usuario compleja solo si estos han cambiado. Los niveles a los que nos puede interesar...
Publicado por Rodrigo Corral | 3 comment(s)

Proxy cache con IIS Application Request Routing

Introducción IIS Application Request Routing (ARR) es una extensión que permite aumentar la escalabilidad y la fiabilidad de las aplicaciones Web desplegadas sobre IIS mediante el enrutamiento de peticiones basado en reglas, permitiéndonos añadir balanceo de carga  o cache de contenidos de manera muy simple. En concreto nos vamos a centrar en implementar un proxy que actuará como cache aliviando en número de peticiones que recibirá nuestro servidor Web. El proxy cache se sitúa entre el servidor...

Cacheitis: Lo mínimo que todo desarrollador debe saber sobre las cachés

Creo que, después de tanto artículo sobre Scrum, los lectores de mi blog agradecerán una entrada que no tenga nada que ver con las metodologías ágiles. Sí, sí, yo también estoy un poco saturado del tema, pero de todos modos, no dudéis que vamos a seguir hablando de ello en este blog. Pero antes de meterme en harina, permitidme que os presente www.scrumweek.com , una semana enterita de formación sobre metodologías ágiles. Pero como decía hoy no vamos a hablar de metodologías, sino de arquitectura...

Script para eliminar los índices que siguen un determinado patrón

Os dejo un script que elimina todos los índices que siguen un determinado patrón. Yo lo suelo utilizar para eliminar todos los índices que he creado tras usar el Index Tunning Wizard y seleccionar aquellos que realmente me resulta útiles o para poder volver a la línea base que tenía antes de utilizarlo. Podéis cambiar el LIKE ‘_dta_%’ por el patrón que deseéis. También suelo utilizar este script en sesiones de optimización. Voy añadiendo índices con diferentes prefijos según el escenario que estoy...
Publicado por Rodrigo Corral | 3 comment(s)

Como detectar cuando las consultas no parametrizadas dañan el rendimiento de SQL Server y que hacer

Que no parametrizar las consultas es fuente de problemas es algo que cada vez más desarrolladores conocen. Se ha hecho mucha labor didáctica sobre este tema en los últimos tiempos. Pero nunca esta de más recordar estos problemas. A raíz de un caso que hemos tenido recientemente en el Debuging & Optimization Team de Plain Concepts, me he decidido a hablar de este tema. Si no usamos consultas parametrizadas los problemas principalmente son dos: Uno de seguridad...

Luchando contra los interbloqueos en Sql Server (II): Read Commited y el modo snapshot

Hace ya un tiempo escribía sobre cómo evitar los interbloqueos en Sql Server y como diagnosticar que les está causando cuando se producen. Hoy quiero contar un pequeño ‘truco’ que nos puede ayudar a, sin cambio alguno en el código de nuestra aplicación, reducir las probabilidades de sufrir un bloqueo. Este pequeño truco es un ‘antídoto’ que nos permite solucionar a menudo problemas de interbloqueos con un mínimo impacto sobre la aplicación. Además, esta técnica también puede mejorar el rendimiento...
Publicado por Rodrigo Corral | 1 comment(s)

¿Qué hacer si MSMQ tarda mucho en enviar el primer mensaje?

MSMQ es una de esas tecnologías que de repente reviven, y pasan de ser usadas por unos pocos a ser ampliamente utilizadas. WCF y la popularidad que las arquitecturas EDA ( Event Driven Architecture ) han ganado tiene que ver mucho con este renacer. WCF ha facilitado enormemente la utilización de MSMQ llevando las ventajas de las comunicaciones basada en mensajería a una infinidad de arquitecturas. Si queréis saber más sobre el tema no os perdáis un webcast muy interesante del que ya hablé hace un...

Modelos de salud: ¿Cúanto tarda una operación determinada de mi aplicación?

Poder reponder esta simple pregunta cuando nuestra aplicación está en producción nos puede dar un motón de información sobre la salud de la misma. Todo modelo de salud de una aplicación debería darnos la respuesta a esta simple pregunta para las operaciones más significativas que realiza la aplicación. Evidentemente, en situaciones donde hay problemas de rendimiento, siempre podríamos responder esta cuestión utilizando un...

MSBuild Profiler: ¿por qué mi build tarda una eternidad?

La cuadrillita del Debugging & Optimization Team de Plain Concepts somos bastante fanáticos de los profilers. Hay un arsenal de ellos: el profiler de Visual Studio , el CLR Profiler , el Memprofiler de SciTech, VTune de Intel, el profiler de SQL Server … cada uno con sus puentos fuertes y débiles. Todos estos profilers se centran en mejorar la velocidad de ejecución de nuestros programas. Pues bien, hoy me he topado con un profiler, el MSBuild Profiler , radicalmente diferente, pero igualmente...
Publicado por Rodrigo Corral | 1 comment(s)

Luchando contra los interbloqueos en Sql Server

La bases de datos utilizan los bloqueos para asegurar las propiedades ACID de las transacciones. Son un mecanismo imprescindible que tienen una cara oculta, un peaje necesario que muchas veces nos complica la vida: los interbloqueos . Los interbloqueos son una situación a la que todo desarrollador de aplicaciones que manejan un volumen elevado de datos o de peticiones concurrentes se enfrenta en alguna ocasión. Desde el punto de vista de proceso de desarrollo, el antidotó es simple: hacer pruebas...

¡La broma ha terminado!

¡La broma ha terminado...! es la frase que su agente de bolsa le dijo a Groucho Marx por teléfono minutos antes de suicidarse tras el crack del 29. La frase vuelve a estar de moda ahora que la crisis es una realidad de nuevo. Que nadie piense que me he vuelto loco y ahora mi blog va a tratar de economía. Hoy vengo a hablar de otra crisis que nos toca más directamente a los programadores: el fin de la Ley de Moore tal y como la conocíamos hasta ahora. No es que los microprocesadores vayan a dejar...

El rendimiento, la percepción y el teléfono escacharrado...

Dice el doctor House que los pacientes siempre mienten… yo digo que los usuarios no siempre dicen la verdad cuando hablan de rendimiento… al final las consecuencias son similares: House o yo acabamos dando palos de ciego. Lo más curioso de la situación es que, al contrario de los pacientes de House, los usuarios no mienten de manera consciente tratando de ocultar trapos sucios. Los usuarios no siempre dicen la verdad por dos motivos: el primero, por que su percepción le engaña a menudo, el segundo...

He leído: Dissecting SQL Server Execution Plans de Grant Fritchey

Los libros gratuitos proliferan como hongos tras día de lluvia por la red. Pero la categoría de los libros gratuitos que merece la pena leer y ya no digo imprimir creo que se cuenta con los dedos de las manos. Suelo descargar todo libro gratuito del que tengo noticia si la temática me interesa. Muchos pululan durante meses por mi escritorio, victimas de cortas visitas en los que los ojeo (¿será ojear correcto tratandose de libros electrónicos? ). Rara vez alguno me resulta del interés suficiente...

Bricomanía: añadiendo caché a nuestros servicios WCF

Resulta que andaba yo el otro día, como loco, buscando el equivalente al parámetro CacheDuration del atributo WebMethod de ASP.Net en WCF. Resumiendo necesitaba algo que me permitiese establecer declarativamente, en tiempo de desarrollo, que las llamadas a una operación de un servicio WCF devolviesen un resultado cacheado y que este caducase cada cierto tiempo. Esta posibilidad que nos brinda ASP.Net nos permite mejorar muchísimo la escalabilidad de nuestros servicios evitando que lleguen hasta el...

Ejecución remota de comandos contra máquinas Unix desde .Net

Estoy involucrado en un interesante proyecto que tiene por objetivo demostrar que VSTS for Tester es una plataforma interesante a la hora de testear arquitecturas no centradas en plataforma Microsoft, arquitecturas muy heterogéneas. Un primer post relacionado este proyecto fue: Pruebas web de Team System usando Firefox . Y seguro que habrá más. Uno de los primeros pasos que tengo que dar es obtener de manera remota información del comportamiento, desde el punto de vista del rendimiento, de una máquina...

Hacer pruebas, vale... pero hacerlas pa' na...

Me he visto recientemente involucrado en el proceso de selección de una herramienta para el testeo de aplicaciones web. Sobre todo para el análisis del rendimiento de la mismas. Evidentemente yo estaba presente en este proceso para comentar las excelencias de Visual Studio Team System for Testers en este campo, que son muchas. Yo defendía claramente la superioridad y capacidad técnica de VSTS for Testers a la hora de dotar al equipo de desarrollo con un entorno integrado, completo y ágil a la hora...

Un enfoque ágil para la optimización

Cuando empecé en esto de la programación, las aplicaciones eran mucho más sencillas desde el punto de vista arquitectonico y la optimización de las mismas era un oscuro arte que solo algunos programadores dominaban basado en conocer ciertos trucos o ser capaces de generar código en ensamblador mejor que el compilador. El rendimiento de la aplicación se obtenía a base de mejoras de implementación, o incluso derivaban de usar un lenguaje u otro (quien no ha escrito un componente en C++ para llamarlo...