Wednesday, April 27, 2011

Optimización de Ad Hoc Queries en SQL Server

A partir de SQL Server 2008 existe una opción llamada optimize for ad hoc workloads (http://msdn.microsoft.com/en-us/library/cc645587.aspx) esta opción permite optimizar el uso de memoria para el almacenamiento de caché de planes de ejecución, en resumen el caso es el siguiente: cada vez que ejecutamos un T-SQL en SQL Server se crea un plan de ejecución que se almacena para su posible reutilización, sin embargo existen muchos planes de ejecución que será utilizados una única vez, por lo tanto almacenar ese plan de ejecución utiliza memoria para un plan que no se va a volver a utilizar. La opción ‘optimize for ad hoc workloads’ configura SQL Server para que solo aquellos planes de ejecución que se utilizan más de una vez sean almacenados en caché.

Para activar  dicha opción se debe ejecutar el siguiente T-SQL

 

sp_CONFIGURE 'show advanced options',1
RECONFIGURE
GO

sp_CONFIGURE ‘optimize for ad hoc workloads’,1
RECONFIGURE
GO

 

Para probar este comportamiento utilizamos el siguiente script

 

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO

USE AdventureWorks2008R2
GO

/* Ejecutar un TSQL Ad Hoc */
SELECT * FROM Person.Address
GO

/* El siguiente TSQL verifica si el plan esta en cache */
SELECT usecounts, cacheobjtype, objtype, TEXT
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE
TEXT LIKE '%SELECT * FROM Person.Address%'

GO

El resultado default de SQL Server es el siguiente

 

image

 

Podemos ver en el resultado anterior que el plan aunque fue ejecutado una vez, ya está en caché. Ahora configuremos optimize for ad hoc workloads en SQL Server.

image

 

Ahora ejecutemos nuevamente el TSQL anterior y vemos que ahora se muestra un Compiled Sub Plan y no muestra el plan compilado en cache

 

image

 

Si ejecutamos el TSQL más de una vez, el plan completo quedará en caché, tal y como se muestra a continuación

 

image

 

 

Saludos,

 

Eduardo Castro Martinez

http://ecastrom.blogspot.com

http://comunidadwindows.org

twitter: edocastro

Friday, April 15, 2011

Habilitar DAC (Dedicated Administrative Connection) en SQL Server Express

El DAC está deshabilitado en SQL Server Express por default, para habilitarlo se tiene que agregar un parámetro más en el inicio del servicio, los pasos son los siguientes:

 

1) Ingrese a Panel de Control Servicios

2) Detenga el Servicio SQL Server Express

3) Ingrese al SQL Server Configuration Manager

image

 

4) Agregue el parámetro "-T7806" dentro de los parámetros de inicio

 

image

5) Inicie el Servicio de SQL Server Express

Ahora puede utilizar el DAC de SQL Server Express

C:>SQLCMD -E -S.\SQLEXPRESS –A

Si se presenta el siguiente error:

 

HResult 0xFFFFFFFF, Level 16, State 1
SQL Server Network Interfaces: An error occurred while obtaining the dedicated a
dministrator connection (DAC) port. Make sure that SQL Browser is running, or ch
eck the error log for the port number [xFFFFFFFF].
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : A network-related or in
stance-specific error has occurred while establishing a connection to SQL Server
. Server is not found or not accessible. Check if instance name is correct and i
f SQL Server is configured to allow remote connections. For more information see
SQL Server Books Online..
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Login timeout expired.

Verifique el puerto en el cual esta escuchando el DAC, esto lo puede hacer ingresando al Event Viewer

image

También si desea, temporalmente puede habilitar el SQL Browser.

 

image

 

También puede conectarse utilizando DAC desde el Management Studio

 

image

 

Saludos,

 

Ing. Eduardo Castro Martinez

http://comunidadwindows.org

SQL Server Performance

WEBCast Introducción a Failover Clustering con SQL Server

Alta disponibilidad, recuperación ante desastres, tolerancia a fallos.

Si estas palabras no están en el vocabulario de su departamento de TI, es probable que su organización no esté preparada para hacer frente a los inevitables tiempos de inactividad del servidor.

Asista a este webcast para aprender acerca de Windows Server 2008 R2 failover clustering con SQL Server, una solución de alta disponibilidad de Microsoft. Failover clustering conecta servidores y monitores, la salud de los servidores y aplicaciones que se ejecutan allí.

En el caso de un fallo del servidor, las aplicaciones y bases de datos pueden conmutar por error a otro servidor y continuar funcionando con la mínima interrupción a sus aplicaciones de misión crítica.

Nosotros cubrimos los fundamentos de la conmutación por error en este webcast, y proporcionamos la información para ayudarle a conseguir un clúster de conmutación por error configurado e implementación en cuestión de horas.

Registrese en https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032482580&EventCategory=4&culture=es-AR&CountryCode=AR

 

Saludos,

 

Ing. Eduardo Castro Martinez

http://comunidadwindows.org

DMV para optimización en SQL Server Tip 07

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

Otro de los componentes que se pueden revisar para la optimización de SQL Server es el Buffer Pool, que es el componente que almacena y administra el caché de datos de SQL Server. La información detallada sobre el Buffer Pool la podemos obtener mediante la DMV sys.dm_os_buffer_descriptors,  esta DMV devuelve información sobre todas las páginas que están siendo utilizadas por el  Buffer Pool, con base en estos resultados podemos ver la distribución del Buffer Pool de acuerdo al uso que se le está dando, y devuelve el pagetype que puede ser un Data Page, Index Page o un TEXT_MIX_PAGE (más información sobre los tipos páginas disponible en http://msdn.microsoft.com/en-us/library/ms190969.aspx).

 

Si ejecutamos el siguiente estatuto

 

select * from sys.dm_os_buffer_descriptors

 

Se obtiene información de la distribución del Buffer Pool. En este resultado vemos todas las páginas que están siendo utilizadas por el buffer pool, recordemos que cada página de SQL Server es de 8KB, en este caso cada página de datos del caché tiene un descriptor del buffer. Los descriptores del buffer representan de forma única cada página que está actualmente siendo utilizada en caché de una instancia de SQL Server.

 

image

 

Si queremos una vista resumida de esta información podemos ejecutar el siguiente T-SQL.

 

SELECT count(database_id) * 8 / 1024 AS 'Cache Usado (MB)' --multiplicamos la cantidad paginas para convertilas en MB
    ,CASE database_id
        WHEN 32767 THEN 'BD Recursos'
        ELSE db_name(database_id)
        END AS 'NombreBaseDatos'
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id

 

Este T-SQL da como resultado la cantidad de caché utilizado por cada base de datos de la instancia actual de SQL Server.

 

image

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

 

SQL Server Performance

Tuesday, April 12, 2011

Laboratorio de Entrenamiento de SQL Azure Scripts

Les comparto los links para descargar los laboratorios sobre SQL del Entrenamiento para desarrollar en la Nube Parte (WorkShop) tercer día , para descargar los recursos para el laboratorio ingresen al siguiente enlace  http://bit.ly/g8UZFt ahí encontrarán las instrucciones para hacer el laboratorio, la PPT y los scripts de demostración utilizados en el entrenamiento.

 

 

Saludos,

Eduardo Castro

http://ecastrom.blogspot.com

 

SQL Server Performance

Monday, April 11, 2011

SQL Server Peer-to-Peer Transactional Replication para escalabilidad y alta disponibilidad

El Peer-to-Peer Transactional Replication de SQL Server es útil cuando deseamos escalabilidad en las operaciones de sólo lectura de ambientes grandes, por ejemplo, si tenemos una aplicación Web, podemos tener varias instancias de SQL Server y configurar el Peer-to-Peer Transactional Replication entre ellas, de esta forma las operaciones de lectura pueden ser distribuidas entre las distintas instancias. También podríamos escalar las escrituras ya que todas actualizaciones, inserciones y borrados se replican de una instancia a las demás, en este caso se debe tener en cuenta lo siguiente:

 

  • Si una fila se modifica en más de un nodo, puede producir un conflicto o que una actualización en un nodo sobreescriba la actualización de otro.

  • Siempre hay alguna latencia implicada cuando se realiza la replicación. Para las aplicaciones que requieren que se vea el cambio más reciente inmediatamente esta configuración puede no ser la más adecuada. Para mayor información sobre detección de conflictos pueden leer este artículo Detección de conflictos en la replicación punto a punto

 

Los siguientes son escenarios comunes para replicación Peer-To-Peer (http://technet.microsoft.com/es-es/library/ms151196.aspx)

 

Peer-to-peer replication, two nodes

 

Peer-to-peer replication to dispersed locations

 

Peer-to-peer replication, three and four nodes

 

 

 

Saludos,

 

Eduardo Castro Martínez

http://ecastrom.blogspot.com

http://comunidadwindows.org

http://tiny.cc/comwindows

 

SQL Server Performance

Friday, April 08, 2011

DMV para optimización en SQL Server Tip 06

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución. Las DMV más comunes para determinar problemas de rendimiento con SQL Server son las siguientes:

 

  • DMV relacionadas con Memory allocation tracking
    sys.dm_os_memory_brokers
    sys.dm_os_memory_nodes

 

  • DMV relacionadas con el Resource Governor
    sys.dm_resource_governor_configuration
    sys.dm_resource_governor_resource_pools
    sys.dm_resource_governor_workload_groups

 

  • DMV relacionadas con Query performance 
    sys.dm_exec_query_stats
    Sys.dm_exec_requests
    sys.dm_exec_procedure_stats
    sys.dm_exec_trigger_stats

 

En siguientes post veremos el detalle de cada una de ellas.

 

Saludos,

 

Ing. Eduardo Castro Martinez, PhD

http://ecastrom.blogspot.com

http://comunidadwindows.org

24 Horas SQL Pass Recordings están disponibiles

Las sesiones grabadas que puede ser vistas por demanda del Evento de 24 Horas de SQL Pass están disponibles en la siguiente dirección http://bit.ly/hDiudC Dentro de las sesiones podrán encontrar el siguiente contenido:

 

March 15, 2011 (GMT)

Session 01: SQL Server Alwayson: The Next Generation High Availability Solution (Lara Rubbelke)

Session 02: Dashboards Design And Practice Using SSRS (Jen Stirrup)

Session 03: Spatial Data: Cooler Than You'd Think (Hope Foley)

Session 04: SQL Server Performance Tools (Cindy Gross)

Session 05: Cool Tricks To Pull From Your SSIS Hat (Julie Smith)

Session 06: No More Bad Dates: Best Practices for Working with Dates and Times (Kendra Little)

Session 07: SQL Server Performance (Isabel de la Barra)

Session 08: T-SQL Code Sins: The Worst Things We Do To Code And Why (Jen McCown)

Session 09: Multidimensional Thinking (Stacia Misner)

Session 10: Bad Plan! Sit! (Gail Shaw)

Session 11: Indexes And Execution Plans (Kim Tessereau)

Session 12: Many-To-Many Dimensions: ETL To Cube (Lisa Phillip)

March 16, 2011 (GMT)

Session 13: Reporting Services 201: the Next Level (Jes Borland)
Session 14:
Replication, Log Shipping and Mirroring: Oh My! (Wendy Pastrick)
Session 15:
Entity Framework: Not As Evil As You May Think (Julie Lerman)

Session 16: All About SQL Server Memory Settings For DBAs (Vyshnavi Thota)

Session 17: Tips & Tricks For Dynamic Reporting Services Reports (Pam Shaw)

Session 18: T-SQL Awesomeness: 3 Ways To Write Cool SQL (Audrey Hammonds)

Session 19: Intelligent ETL With SQL Server (Jyoti Gupta)

Session 20: Clever Queries: Crafting MDX Queries To Get The Most Out Of SSRS (Erika Bakse)

Session 21: Five Physical Database Design Blunders And How To Avoid Them (Karen Lopez)

Session 22: What You Don't Know About SSRS 2008 R2 (Kathi Kellenberger)

Session 23: Index Internals For Mere Mortals (Michelle Ufford)

Session 24: Twitterdata On Azure (End-To-End Demo) – How We Did It (Lynn Langit)

 

Saludos,

 

Eduardo Castro Martinez

http://ecastrom.blogspot.com

http://comunidadwindows.org

Laboratorio de Entrenamiento de SQL Azure Links

Les comparto los links para descargar los laboratorios sobre SQL del Entrenamiento para desarrollar en la Nube Parte (WorkShop) , para descargar los recursos para el laboratorio es el siguiente http://bit.ly/g8UZFt ahí encontrarán las instrucciones para hacer el laboratorio, la PPT y los scripts de demostración utilizados en el entrenamiento.

 

Saludos,

 

Eduardo Castro

http://ecastrom.blogspot.com

Wednesday, April 06, 2011

DMV para optimización en SQL Server Tip 05

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

 

SQL Server 2008 incluye el system_health que es un XEvent que nos ayuda a realizar resolución de problemas de desempeño del motor de SQL Server. Si queremos ver que este está ejecución, corremos el siguiente comando:

 

select * from sys.dm_xe_sessions

image

 

Si queremos ver los resultados de este XEvent ejecutamos el siguiente T-SQL

 

select CAST(xet.target_data as xml) from sys.dm_xe_session_targets xet
join sys.dm_xe_sessions xe
on (xe.address = xet.event_session_address)
where xe.name = 'system_health'

 

 

Esto T-SQL nos dará el resultado en formato XML con al información correspondiente.

 

image

 

Si abrimos ese XML veremos algo parecido a lo siguiente

image

 

Si el motor de SQL Server está teniendo problemas, entonces podemos revisar ese XML que contiene entre otras cosas lo siguiente:

 

  • El sql_text y session_id para cualquier sesión con error de severidad >=20
  • El sql_text y session_id para cualquier sesión con error de memoria tales como  17803, 701, etc 
  • Cualquier registro de "non-yielding problems” por ejemplo errores in tales como Msg 17883
  • La callstack, sql_text, y session_id de cualquier sesción que haya esperado por "external waits” o "pre-emptive waits".
  • La callstack, sql_text, y session_id de cualquier sesción que tenga esperas en “latches” mayor a 15 segundos
  • The callstack, sql_text, and session_id for any sessions who have waited on locks for > 30 seconds
  • The callstack, sql_text, and session_id for any session that have waited for an extended period of time for "external" waits or "pre-emptive waits".

 

 

Saludos,

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

DMV para optimización en SQL Server Tip 03

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

SQL Server 2008 incluye un nuevo componente que nos puede ayudar a determinar problemas de rendimiento, este es el MDW Management Datawarehouse. El MDW se utiliza para recolectar estadísticas de desempeño de SQL Server. Las estadísticas se obtienen mediante rutinas que con llamadas Data Collections, el MDW puede contener información de una única instancia o puede guardar información de desempeño de múltiples instancias. Los Data Collector utilizan tareas calendarizadas en el SQL Agent para recolectar los datos y lo almacenas en el MDW.

Los Data Collector básicos que se ofrecen por default son para información de desempeño de Disco, Análisis de Actividad de las Consultas y Actividad del servidor. La arquitectura general del MDW se muestra a continuación:

 

image

 

El Data Collection está desactivado por default, para activarlo tienen que ingresar al SQL Server Management Studio, y seguir el Wizard de configuración del MDW que se muestra a continuación:

 

1. Inicio del Asistente de configuración

image

 

2. Configurar la instacia donde se va a crear de MDW

image

 

3. Configurar los usuarios que se van a utilizar

image

 

4. Creación exitosa del MDW

image

5. Una vez configurado, tendrán la opción de MDW disponible en el SQL Server Management Studio

image

 

Los siguientes son algunos de los reportes estándar que pueden ejecutar desde el MDW

image

 

image

 

image

 

El siguiente reporte muestra la actividad y desempeño general del servidor

 

image

Incluye además información sobre el uso de disco.

image

 

Saludos,

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

DMV para optimización en SQL Server Tip 04

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

Les comparto la presentación que utilicé en el evento sobre optimización de SQL Server, la pueden ver en esta dirección http://slidesha.re/hUvQ4R

 

image

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

DMV para optimización en SQL Server Tip 02

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

Si deseamos verificar si tenemos problemas de memoria física del servidor podemos consultar información sobre el buffer manager.

 

SELECT * FROM SYS.SYSPERFINFO WHERE
OBJECT_NAME='SQLSERVER:BUFFER MANAGER'

 

image

 

De la información anterior podemos verificar los valores de Target Pages y de Stolen Pages. El contador Stolen Pages indica la cantidad de páginas que fueron “robadas” del caché para satisfacer la demanda de memoria física. En este caso la cantidad de Stolen Pages debe permanecer estable durante el transcurso del tiempo, si no lo es, entonces tenemos un problema de cantidad de memoria física disponible.

 

El contador SQL Server:Buffer Manager - Database pages, indica la cantidad de páginas que forman el cache de datos de SQL, usualmente este valor es estable en el tiempo, si se presentan cambios abruptos indica que se está haciendo swap del caché, por lo tanto podría ser una indicación de aumentar la memoria física del servidor.

 

El contador SQL Server:Buffer Manager - Buffer cache hit ratio, indica el porcentaje de páginas que han sido encontradas en memoria, por lo tanto, cuanto más alto este valor mejor.

 

El contador SQL Server:Page life expectancy, representa el promedio de segundos que una máquina permanece en caché, para los sistemas OLTP un Page life expectancy normal de 300 es cinco minutos, un valor inferior a ese puede representar un problema de memoria, índices no actualizados o que se limpió el caché.

 

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

DMV para optimización en SQL Server Tip 01

Esta serie de blogs incluye T-SQL y DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server y su posible solución.

Si deseamos verificar si tenemos problemas de CPU, podemos utilizar la DMV sys.dm_os_schedulers . Esta DMV informaciones acerca de los calendarizadores de SQL Server, normalmente en un ambiente sin problemas de desempeño de CPU los valores de esta DMV tienden a ser cero, por lo tanto, valores que sean superiores a cero significa que existen tareas que tienen que esperar para ser ejecutadas, si estos valores son muy altos, entonces estamos ante la presencia de un problema de capacidad de CPU.

 

 

select 
    scheduler_id,
    current_tasks_count,
    runnable_tasks_count ,
    current_workers_count,
    active_workers_count,
    context_switches_count, 
    work_queue_count,
    pending_disk_io_count
from 
    sys.dm_os_schedulers
where 
    scheduler_id < 255

 

image

 

Los valores los podemos interpretar de la siguiente forma:

-  runnable_tasks_count debe tender a ser cero

-  current_workers_count indica la cantidad de workers que están asociados con este calendarizador. -  work_queue_count cantidad de tareas que están esperando a que sean asignadas a un worker

-  pending_disk_io_count candata de IO que está esperando a ser completada.

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

Tips para optimización de SQL Server 2008

Esta es una serie de post sobre la optimización de SQL Server.

 

Cuando se tiene que optimizar un SQL Server deben revisar los siguientes componentes de infraestructura y programación:

 

  • Cuellos de botella en tempdb. Cada instancia de SQL Server cuenta con una única base de datos tempdb, lo cual puede implicar problemas de desempeño, puesto que se puede llegar a tener contención en tempdb o algo más serio como falta de espacio. Una aplicación mal construida puede hacer uso excesivo de tempdb ya que puede generar operaciones excesivas y costosas de DDL y DML. Esto puede causar que otras aplicaciones o bases de datos que utilizan tempdb se vean afectadas en su rendimiento.
  • Una consulta que ejecuta muy lento.  El desempeño de consultas existentes puede cambiar debido distintos factores tales como:  estadísticas que no han sido actualizadas o índices que no han sido reconstruidos o peor aún índices faltantes que provocan table scans.
  • Cambios en el sistema de discos o SAN, un cambio en el tipo de disco que se está utilizando puede afectar el desempeño.
  • Bloqueos. Cuando las consultas han sido optimizadas, muchas veces las aplicaciones lentas se deben a que se están generando bloqueos, debido a mal diseño de la aplicación o debido a que ha eligido los niveles de aislamiento no adecuados.

 

En siguientes post cubriremos DMV que pueden ser utilizadas para detectar problemas de rendimiento de SQL Server.

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

http://ecastrom.blogspot.com

Saturday, April 02, 2011

Enlaces del Evento de SQL Server Denali

Les compartimos una serie de enlaces con el material del Evento de SQL Server Denali. Esperamos contar con su presencia en futuros eventos, pueden enviar sugerencias sobre temas y eventos

 

Grabación del Evento

http://ecastrom.blogspot.com/2011/03/evento-sobre-sql-server-denaliprimera.html
http://ecastrom.blogspot.com/2011/03/evento-sobre-sql-server-denalisegunda.html

 

Fotos del Evento

http://www.facebook.com/album.php?aid=2107182&id=1024994226&l=0ec081a497

 

Notas de la presentación PowerPoint
http://comunidadwindows.org/files/folders/20110324/entry917.aspx

 

Scripts de las demostraciones

http://comunidadwindows.org/files/folders/20110324/entry915.aspx

 

Guía de instalación de SQL Server Denali y AlwaysOn

http://comunidadwindows.org/files/folders/20110324/entry913.aspx

 

Artículo sobre Column Store Indexes

http://comunidadwindows.org/files/folders/20110324/entry911.aspx

Notas sobre nuevas características de SQL Server Denali

En la siguiente dirección http://comunidadwindows.org/files/folders/20110324/entry917.aspx  pueden descargar las notas de la presentación realizada sobre SQL Server Denali.

 

Saludos,

 

Ing. Eduardo Castro Martínez

http://comunidadwindows.org

Scripts sobre nuevas funcionalidades de SQL Server Denali

En la siguiente dirección http://comunidadwindows.org/files/folders/20110324/entry915.aspx pueden descargar los Scripts de demostraciones que he realizado sobre las mejoras en SQL Server Denali, se incluyen demos para paginación, manejo de errores, secuencias, entre otros.

 

Saludos,

 

Ing. Eduardo Castro Martinez

http://comunidadwindows.org

Guía de Instalación de SQL Server Denali

En este documento se incluye el paso a paso para la instalación de SQL Server Denali y también para la creación de un escenario de SQL AlwaysOn con Availability Groups. Para descargar el documento pueden ingresar a http://comunidadwindows.org/files/folders/20110324/entry913.aspx o http://www.slideshare.net/ecastrom/guia-instalacion-sql-server-denali

 

 

Saludos,

 

Ing. Eduardo Castro Martinez

http://comunidadwindows.org

SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover...