martes, 6 de julio de 2010

Averiguar conexiones externas hacia nuestro SQL Server

Últimamente estoy participando en bastantes proyectos de migración de SQL Server 2000 a SQL Server 2008 R2. Independientemente de la arquitectura existente en cada cliente, siempre hemos de conocer la topologia de consultas que se lanzan y sobre todo QUIEN las lanza.

En un proyecto de migración nunca podemos dejar cabos sueltos y menos cuando uno de los cabos sueltos puede llevar a que aplicaciones (sean o no críticas) no funcionen.

La opción más sensata siempre es crear una traza de profiler para SQL Server 2000, que nos capture durante un tiempo prudencialmente amplio y significativo, la actividad de nuestro servidor

¿Qué nos interesa conocer?

  1. La consulta que ha sido lanzada (posteriormente lo utilizaremos para que SSUA analice si hay patrones conflictivos)
  2. El hostname desde donde se lanza
  3. El login utilizado
  4. El nombre de la aplicación
  5. La BBDD sobre la que se está ejecutando la consulta

 

Dicho esto, nos podemos hacer una idea de los eventos e información que necesitamos capturar en SQL Server profiler…y ahora viene la parte divertida…la explotación de esos datos Smile

-- Create table with data
--
CREATE TABLE [dbo].ExternalConnectionAnalysis(
[ServerName] [nvarchar](256) NOT NULL,
[databaseid] [int] NULL,
[applicationname] [nvarchar](256) NULL,
[hostname] [nvarchar](256) NULL,
[loginname] [nvarchar](256) NULL,
queries_executed bigint not null
) ON [PRIMARY]

GO

INSERT into dbo.ExternalConnectionAnalysis(ServerName, databaseid,
          applicationname, hostname, loginname,queries_executed)
SELECT 'atlante3' AS ServerName , databaseid, applicationname,
       hostname, loginname,COUNT(*)
FROM ::fn_trace_gettable('path_to_file.trc', default)
GROUP BY databaseid, applicationname, hostname, loginname
go



Tenemos esa opción que evidentemente te lee el fichero de traza .trc (y los que vengan detrás en caso de haberse creado con multiples ficheros) y agrupa por la información que queremos, o podemos optar por una forma algo más rebuscada y eficiente para procesar los datos como esta otra:



declare @srvname sysname = 'my_server'
declare @trcpath varchar(max) = 'path_to_file.trc'
;

with existent_data as(
select ServerName, databaseid,
applicationname,hostname,loginname
from dbo.ExternalConnectionAnalisys
where ServerName = @srvname
),
trc as (
SELECT @srvname AS ServerName
, trc.databaseid, trc.applicationname,
trc.hostname, trc.loginname
FROM ::fn_trace_gettable(@trcpath, default) trc
)
INSERT into dbo.ExternalConnectionAnalysis(ServerName, databaseid,
applicationname, hostname, loginname,queries_executed)
SELECT @srvname AS ServerName , trc.databaseid, trc.applicationname,
trc.hostname, trc.loginname ,COUNT(*)
FROM trc left join existent_data ed on
(trc.DatabaseID = ed.databaseid
and trc.ApplicationName = ed.applicationname
and trc.HostName = ed.hostname
and trc.LoginName = ed.loginname
)
where ed.databaseid is null or ed.applicationname is null or
ed.hostname is null or ed.loginname is null
GROUP BY trc.databaseid, trc.applicationname, trc.hostname, trc.loginname



La gran ventaja de utilizar la consulta anterior radica principalmente en que es una consulta que solo añadirá las nuevas filas con información que le vayamos proponiendo. Es decir, que como es normal, tendremos ficheros de traza a traves del tiempo (cada dia previsiblemente tendremos .trc nuevos) y los podremos procesar independiemente de tener todos los ficheros de traza y procesarlos de golpe.



Evidentemente es una gran ventaja…pero otra ventaja oculta es si miras un poco más alla de la simple consulta y te das cuenta de que al utilizar el left join y el group by, nuestro SQL Server ha generado un plan de ejecución eficiente mediante un fantástico MERGE JOIN



image



 



Queda a tu disposición probar la consulta sin el left join, mediante un cruce de los de toda la vida y ver que ocurre…y sobre todo el tiempo que tarda, por culpa del super LOOP JOIN que te mete Smile



 



Salu2!

domingo, 23 de mayo de 2010

Impartiré sesión en el lanzamiento de SQL Server 2008 R2

Hola, tengo la suerte de poder impartir junto a mi compañero y amigo Enrique Puig, una sesión sobre SQL Server Azure en el lanzamiento oficial de SQL Server 2008 R2 que tendrá lugar en Madrid el próximo dia 14 de Junio.

Si deseas inscribirte aqui va el link directo

Para más información: http://www.microsoft.com/spain/sql/eventos/lanzamientos2008r2/index.aspx

viernes, 12 de marzo de 2010

Soy Microsoft Active Professional 2010!

Muy grata la sorpresa que he tenido hoy al descubrir en mi mail, un correo de Microsoft diciendome que formo parte del top 5% de galardonados con el premio Microsoft Active Professional 2010. Desde luego, algo que me hace mucha ilusión y que desde luego pienso seguir haciendo para merecer.

Un saludo a todos!

martes, 26 de enero de 2010

Borrador de tracks del próximo SQM SUMMIT 2010

Ya se ha publicado el primer borrador de tracks de lo que va a ser el próximo summit 2010.


Nuevo ebook sobre migración de SQL Server 2000 a SQL Server 2008

Recientemente publicaron mi ebook sobre como afrontar con éxito una migración desde SQL Server 2000 a SQL Server 2008 con éxito y sin sorpresas desagradables.
Se puede encontrar aqui: http://www.solidq.com/ib/Press.aspx

"El proceso de migración hacia SQL Server 2008 no debería ser un proceso traumático. Para conseguirlo, hay que consensuar un plan lo suficientemente robusto y estable como para satisfacer todas las posibles particularidades del entorno que desee migrar en cuestión. Hay que ser consciente que como en cualquier proceso de riesgo, si es llevado a cabo negligentemente puede producir un resultado final lleno de errores e incompatibilidades de última hora que produzcan una migración traumática al final"

ISBN: 978-84-936417-6-4

sábado, 4 de julio de 2009

Salimos en portada

Bueno, los que me conocen ya saben que esto ocurrió hace un par de semanas, pero la verdad que no he tenido mucho tiempo desde entonces, asique aprovecho para escribirlo ahora.

Básicamente el resumen es que el servicio de healthcheck que hemos desarrollado desde SolidQ en la subsidiaria española, se ha lanzado en el mismísimo pentágono ;). Desde luego lo hemos lanzado en clientes igual de interesantes, pero este es uno de los más mediáticos y por los que se interesaron varios periódicos.

Aqui teneis la noticia con la que nos dieron una portada ni mas ni menos ;)

Por cierto, también salimos en Canal9, pero el vídeo lamentablemente no lo encuentro :(

jueves, 18 de junio de 2009

Reutiliza tus plantillas de perfmon de Windows 2003 en Windows 2008

Como sabeis, Windows Server 2008 introdujo una serie de cambios radicales en su herramienta de análisis de rendimiento. Aquello que antes era llamado “Performance Monitor” (perfmon.exe), ahora se llama “Realiability and Performance Monitor” (también su exe es perfmon.exe). Pero el cambio no se queda solo a nivel de nomenclatura, evidentemente, sino que se hace mucho mas poderoso intuitivo y jugueton…

image
Captura de Performance Monitor en Windows server 2003 (y XP)

image
Captura de Reliability and Performance Monitor en Windows Server 2008 (y vista)

Si recordamos, en Windows Server 2003, las plantillas tenían un formato basado en .htm. Dichas plantillas las podemos crear facilmente mediante perfmon.

Suponiendo que ya tenemos creado nuestro conjunto de contadores que deseamos capturar, si lo que queremos es incorporarlo sobre otro servidor, lo que haremos será exportarlo a un fichero .htm que copiaremos posteriormente a otro servidor e incorporaremos.

El siguiente proceso solo es válido para exportar/importar entre Windows 2003/XP como origen/destino:

  • Exportar plantilla:

image

Botón derecho sobre el log que queramos exportar

  • Copiar plantilla al servidor destino
  • Incorporar plantilla tal y como se ve en la imagen:

image 
Botón derecho sobre “Counter Logs” y luego “New Log Settings From…”

  • Elegimos nuestro template…

image 

Hasta aqui, todo normal, el problema viene cuando queremos incorporar la plantilla sobre un Windows Server 2008…porque el formato de las plantillas ha cambiado. Para empezar, la extensión es xml, lo cual ya nos da que pensar que no cargará los .htm ;)

Podeis probar a incorporar vosotros mismos un .htm y ver como no os deja, yo lo que voy a hacer es daros la solución, que pasa por utilizar la herramienta “logman” (que viene con Windows Server 2008) para exportar el template al formato de Windows Server 2008.

Para ello lo que tendremos que hacer es desde un Windows Server 2008, exportar las plantillas definidas en un Windows Server 2003 de forma remota:

image NOTA: Ejecutado desde Windows Server 2008, siendo 10.1.1.100 un Windows 2003 con la plantilla “miplantilla” definida (ver imágenes mas arriba)

Tal y como se vé en la imagen, desde un Windows Server 2008 estoy pidiendo exportar el log “miplantilla” que se encuentra en el servidor 10.1.1.100, al formato xml en el fichero miplantilla.xml.

Una vez tenemos ya la plantilla definida en el formato compatible de Windows Server 2008, podemos incorporarla fácilmente siguiendo estos sencillos pasos:

  • Ejecutar perfmon en Windows Server 2008
  • Boton derecho sobre “Data Collection Sets->User Defined”

image

  • Darle un nombre al data collection set sobre el que añadiremos la captura de datos mediante perfmon
  • Seleccionar “Create from a template”

image

  • Hacer click sobre “Browse” en lugar de utilizar las plantillas predefinidas

image

  • Una vez ya está importado, podremos configurar la ruta de salida del fichero .blg, planificaciones horarias,…e incluso modificar aquello que estimemos oportuno.

image

Por tanto, como hemos visto, pese a que pueda ser algo traumático para un DBA o responsable de sistemas, todo aquello de “las grafiquitas” que tanto nos gustaba en 2003 y nos “tuneamos”, lo podemos reutilizar en 2008 sin problemas.