jairh
Usuario (Argentina)
Envíos De Dinero a México Envía dinero por Internet a México de manera rápida por tan solo $4.99 www.xoom.com Introducción al uso del Microsoft SQL Server Profiler (o Analizador) Esta útil –aunque fea- herramienta permite ver “el interior” de los sistemas. Nos deja visualizar en tiempo real la actividad del servidor de base de datos, lo que a su vez permite detectar cuellos de botella en las aplicaciones. Una consulta mal diseñada o un índice inexistente puede provocar una terrible demora en las operaciones más sencillas. El Profiler nos deja hacer un seguimiento detallado y encontrar “dónde le duele” a la base de datos. Además es totalmente inocuo, no se puede “romper nada” con él, así que para meter la cabeza dentro del servidor es una perfecta opción. Cómo se usa El acceso para ingresar está en el mismo grupo de programas que el resto de las herramientas de cliente de SQL Server. Los ejemplos y pantallas que siguen corresponden a la versión 2000. La primer pantalla es un poco triste: Al menos no asusta con incontables funcionalidades… Vamos a empezar: Archivo -> Nueva -> Traza Una “traza” es un registro de actividades del servidor. La traza se genera en tiempo real, con los parámetros que especifiquemos. Acto seguido el sistema solicitará conectarse a un servidor: No voy a explicar ahora cómo se conecta, asumo que ya eso lo pueden hacer sin problemas. Click en “Aceptar” y seguimos. Ahora viene la papota: La primer solapa permite colocar un nombre a la traza (cosa que se puede obviar a menos que querramos guardarla, y de todos modos se puede poner al final). La “Plantilla” es lo segundo que permite seleccionar. La plantilla es un conjunto de las selecciones de las otras tres solapas. Hay algunas precargadas que se pueden utilizar. Esas las dejo para que investiguen. Siempre se debe seleccionar una, la llamada “SQLProfilerStandard” es la que llamaríamos “traza por default”. Vamos a tomarla como base y configurar una “manualmente”. La primer solapa permite configurar “sucesos”. Dichos “sucesos” son los eventos que generarán un registro en la traza. Por default no son muchos (hay más para elegir). Para el caso basta con los que aparecen cargados: Audit login y Audit logout: marcan el comienzo del registro y el final. Además de la fecha y hora, se genera un resumen de la actividad auditada. RPC Completed: Cuando se completa una ejecución de Procedimiento Almacenado (Store procedure para los amigos) generará un registro. TSQL: BatchCompleted: Al completarse una tarea por lotes de Transac-SQL (una consulta, insert, update, etc), también generará un registro. La segunda solapa corresponde a las “Columnas de datos” Algunas columnas serán interesantes para ver su contenido. Otras tal vez no, pero al principio nos servirán para determinar filtros adecuados para la traza. Vamos a dejarlo así por el momento. La última solapa permite determinar “Filtros”. Los filtros permitirán separar “paja del trigo”. Cuanto más carga tenga un servidor SQL, más necesario será que utilicemos un filtro. Caso contrario encontraremos miles de registros en la traza, lo que la hace imposible de seguir, además de aburrida. Empecemos por filtrar una base de datos en particular. Aunque hay dos criterios que nos permitirían hacerlo (DatabaseID y DatabaseName), no pude hacer funcionar el segundo. Tal vez solo esté cometiendo un error, pero ni lento de perezoso, busqué las ID de las bases de datos que tenemos. Para ello bastará con ejecutar en el Analizador de Consultas (o Query Analyzer), que es otra herramienta de cliente de SQL Server: select name, dbid from master.dbo.sysdatabases Esta consulta devuelve una lista con las bases de datos y su identificación. Por ejemplo voy a filtrar la base de datos con ID=17 Hay muchos otros campos para filtrar. En función de la aplicación que estemos queriendo analizar será el criterio aplicado. Hay que probar un poco para tener idea de qué valores colocar. Al darle click a “Ejecutar” comienza la traza. Cada renglón será un suceso capturado. Veremos en las columnas algunos datos de interés que marcan la performance. El más evidente es “Duration” que en SQL Server 2000 mide en milisegundos la duración del suceso. También deja medir el consumo de CPU y el acceso a disco (Read). Por cada conexión existente veremos un registro llamado “ExistingConnection”. Cada vez que una conexión de cliente se cierra se genera un resumen de la actividad monitoreada. Bueno, aquí ya se ve algo de data para examinar. Noten que hay dos sucesos que demoran muchísimo más que los otros. Uno de ellos tarda 17606 milisegundos (17 segundos humanizándolo). El otro suceso se trata de un “Audit logout”, o sea que resume una cantidad de operaciones, por lo tanto no es para alarmarse. Lo siguiente para mejorar la performance sería marcar el registro del suceso lento y ver en la parte inferior qué es lo que tarda tanto. En este caso corresponde con un store procedure, al que habrá que examinar para determinar por qué tarda tanto, y corregirlo. Pero eso será en otro post… (si lo piden, obviamente)... Llegó el siguiente post!!! http://www.taringa.net/posts/apuntes-y-monografias/7032863/Optimizacion-de-aplicaciones-cliente-servidor-_SQL_.html

Diagnosticos de performance en red o algunos test que podemos hacer cuando una maquina "funcione mal" o "lenta" en palabras de los usuarios. Atentti que los tips aplican a ambientes de red... Algunas cosas a revisar: 1) Red. Log del switch En ocasiones un cable hace falso contacto y eso hace que el equipo funcione terriblemente mal. Tal vez no provoque "errores de red" que se vean como el aviso de "Cable desconectado", pero alcanzan para jorobar la vida. Una forma de dianosticarlas es revisando los mensajes del Switch (si es administrable, obvio). Ping largo Un ping -t que se deja un buen rato puede cantar si hay -por ejemplo- un cable que al tocarse hace falso contacto. O una ficha semi floja. No debería haber fluctuaciones en una conexión normal. Si uno lo deja funcionando un buen rato, mejor. El valor "maximo" y el "medio" deberian ser parejos. Si el maximo se fue mucho o si el medio es muy alto habría que revisar el conexionado o el equipo de red. 2) Carga de CPU Puede que haya un proceso que esté consumiendo demasiados recursos y enlentezca la PC. A veces puede ser un proceso de background demasiado pesado (típicamente, el antivirus) que el usuario no ve, y por ende no tiene forma de percatarse que es eso lo que pone lenta la PC. La herramienta PSLIST de PSTools sirve para listar los procesos (programas y servicios) y el tiempo de CPU que llevan consumido. Para ver los procesos de una PC remotamente se ejecuta: pslist nombreDePC Algunos parametros que se pueden usar: -m: detalles de uso de memoria -s: permite verlo "on line" como si fuera el administrador de tareas. Se sale con ESC. Combinado con el parametro -m presenta la info ordenado por uso de memoria. (Muy bueno) Abreviaturas Pri Priority Thd Number of Threads Hnd Number of Handles VM Virtual Memory (Memoria virtual = uso de disco como memoria = lento) WS Working Set Priv Private Virtual Memory Priv Pk Private Virtual Memory Peak Faults Page Faults (Fallos de pagina = operaciones que derivaron en buscar paginas de memoria en disco) NonP Non-Paged Pool Page Paged Pool Cswtch Context Switches Mucha memoria virtual o muchos fallos de página se solucionan agregando memoria (o al menos se disminuye la marca). Aca se puede bajar la herramienta pslist (y un par mas, muy buenas). Esto era de sysinternals hace muuuucho tiempo, luego lo compro el amigo Bill "etera" Gates... Espero les sirva! Con algun comentario alentador tendré inspiración para agregar cosas...
Cuando es uno mismo quien ha diseñado una base de datos tal vez solo necesite “seguir su instinto” para encontrar lo que busca. Sin embargo, generalmente tenemos que bucear en la base de datos que creó alguien más, y aprender su instinto se complica… La profundidad de información que necesitaremos dependerá de lo que vayamos a hacer con la base de datos. Para empezar voy a mostrarles cómo explorar las tablas y la relación entre ellas con una herramienta sencilla de MS SQL Server: los Diagramas. Para manejar diagramas deberán ingresar al SQL Server Enterprise Manager (o Administrador Corporativo), desplegar el árbol hasta llegar a la base de datos en cuestión. Allí habrá una sección “Diagramas”, seleccionándola permitirá ver los existentes en el panel derecho, además de poder generar alguno nuevo con el menú contextual (click derecho para los amigos). Creación de diagramas En SQL Server 2000 disponemos de un asistente para generar un diagrama. Es bastante sencillo, solo consultará las tablas que deseamos agregar. Además se encarga de incluir las tablas relacionadas hasta un n-ésimo nivel, regulado por el usuario. Cada vez que se agregue una tabla el asistente adicionará las relacionadas. Click en Siguiente, Finalizar, y ya contamos con un diagrama de las tablas seleccionadas más aquellas que se encuentren relacionadas. El campo de relación corresponderá con las claves primarias y foráneas (primary key / foreign key) según se haya diseñado. El resultado será el diagrama, donde cada tabla aparece (por default) como una lista de los campos que la componen. Las relaciones son representadas por conexiones entre las tablas. Puede que veamos algo así (hay un control de zoom): Para hacer más sencilla la explicación voy a recortar una sección: Los campos que conforman la clave primaria (uno o varios) aparecen con una llave junto al nombre (tanto la palabra llave como clave en inglés serían “key”). Las relaciones también tienen señalizados los extremos de forma que sepamos si se trata de una relación 1:1 (llaves en las dos puntas) o 1:muchos (llave de un lado y signo de infinito en el otro –aunque parezca un ocho, no lo es-). Seleccionando la relación con un click podremos ver el nombre de la misma. También podemos hacer que cada relación aparezca con su “etiqueta” habilitando esto con el menú contextual. Pero eso no es todo! Lo mejor –a mi gusto- viene ahora. Si se hace click derecho en cada tabla aparecen varias opciones. En la “Vista de tabla” tenemos para elegir: La vista “Nombres de columna” es la predeterminada. Tomar en cuenta que aquí columna = campos. Si se pide ver “Claves” solamente presentará las keys de cada tabla (primarias y foráneas). Cuando seleccionamos “Sólo nombre” nos mostrará solo un rectángulo con el nombre de la tabla. Con esto se logra lo más parecido a un DER (Diagrama Entidad Relación) de la base. (En algunos casos no será un DER propiamente dicho porque las relaciones ternarias y muchos:muchos se implementan con tablas secundarias, aun cuando existan en los DER teóricos). Finalmente tenemos la vista “Estándar”, que no es otra que la que brinda SQL Server para diseñar las tablas. Por ejemplo: Aunque hemos repasado lo que hace a la “visualización” de la base de datos, con esta misma herramienta (click derecho mediante) podemos cambiar claves, modificar campos, administrar permisos, triggers, etc. Todo lo que se ve se puede imprimir (la herramienta incluso se encarga de hacer el paginado). Además podemos agregar notas (click derecho -> agregar anotación de texto) Pero eso será para otro post…

Es bien sabido que para cualquier sistema operativo el espacio libre en disco es un punto crítico de control. Quedarse con poco o ningun byte libre es sinónimo de tropezones y caídas... de ahí que los administradores de red con frecuencia deban verificar que los servidores a su cargo tengan tela suficiente para no agonizar en el peor momento. Lo mismo aplica a quienes administran redes y deben encargarse del mantenimiento de las PC de los usuarios. Para colmo parece que cuanto más chico el rígido (o partición), mayor el deseo del usuario de bajar porquerías de internet o recolectar MP3 como para musicalizar cinco radios en simultáneo. ¿Como supervisar el espacio libre sin tener que ir máquina por máquina? Powershell puede darnos una mano. Windows 7 lo incluye, en XP hay que instalarlo (lo sugiere como Update opcional), y en Vista no tengo idea. En las versiones server: 2008 lo tiene, en 2003 es opcional. Voy a encarar el tema asi: primero varias opciones para hacer basicamente lo mismo. Luego voy a explicar qué cambia y cómo funciona. Si alguien quiere ejecutarlo y no sabe por donde empezar... fijese si tiene el enterno en Menu Inicio -.> Accesorios -> Windows PowerShell Si no lo tiene, busquelo como update via Windows Update. Luego abrir el "Powershell ISE". Se puede probar los comandos en la ventana inferior, algo asi como un "inmediato". Variante 1 Recibe la lista de computadoras por una lista de nombres Devuelve una bonita ventana en unidades legibles $computers = @("pc2","server1", "fileserver", "server2" Get-WmiObject Win32_LogicalDisk -filter "DriveType=3" -computername $computers | Select SystemName,DeviceID,VolumeName,@{Name="Size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Out-GridView Variante 2 Devuelve el resultado en una lista CSV (archivo separado por comas, leible con hoja de cálculo) $computers = @("pc2","server1", "fileserver", "server2" Get-WmiObject win32_logicaldisk -computer (Get-Content .Servers.txt) Where-Object { $_.DriveType -eq 3 } | Select SystemName,DeviceID,VolumeName,@{Name="Size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Export-Csv C:tempMyDiskSpace.Csv Variante 3 Nuevamente devuelve un archivo CSV. Acepta como parametro una lista en un archivo de texto. El archivo tiene un nombre de computadora por renglon (solo eso, sin comillas ni nada). Por ejemplo el archivo Servers.txt con este contenido: server2 fileserver pc2 Get-WmiObject win32_logicaldisk -computer (Get-Content c:tempServers.txt) | Where-Object { $_.DriveType -eq 3 } | Select SystemName,DeviceID,VolumeName,@{Name="Size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Export-Csv C:tempMyDiskSpace.Csv Variante 4 Acepta la lista por archivo de texto Devuelve en pantalla los resultados (feo para mi gusto) No formatea los valores devueltos, observar las unidades gigantes en bytes Get-WmiObject win32_logicaldisk -computer (Get-Content c:tempServers.txt) | Where-Object { $_.DriveType -eq 3 } | Select-Object SystemName, DeviceID, VolumeName, FreeSpace, Size Ahora entendamos un poco mejor qué es todo eso. Las variantes permiten entender mejor qué se está haciendo en ese choclo de comando. Algo asi... La papota es el comando "Get-WmiObject" que obtiene instancias (o sea, objetos) del Instrumental de Administracion de Windows (de esto es la sigla WMI). El objeto que estamos usando es win32_logicaldisk. Para ver qué datos devuelve se puede ejecutar así crudo nomás: Get-WmiObject win32_logicaldisk Se puede indicar que el comando busque el espacio libre en varios equipos de la red. Dos variantes: a) Preparando una variable que contenga los nombres de los equipos. Esto hace que en lugar de un solo comando tengamos un script de dos lineas... $computers = @("pc1","pc2", "fileserver", "notebook" Notar que el vector comienza con arroba y tiene los valores separados por comas y encerrados en paréntesis. Ademas como son textos estan entre comillas. Luego se usa el parámetro -computername para indicar que el vector que definimos tiene el dato: Get-WmiObject win32_logicaldisk -computername $computers b) Guardando los nombres de los equipos en un archivo de texto, un nombre por renglon. Sencillamente agrego el parámetro -computer y a continuacion, como si se tratara de un llamado a funcion, entre paréntesis la lectura del archivo c:tempservers.txt Get-WmiObject win32_logicaldisk -computer (Get-Content c:tempServers.txt) Hay que pensar en el comando get-wmiObject win32_logicalDisk como en un SELECT de SQL. De hecho así lo manejaremos. De los varios campos, nos quedaremos solo con algunos. Podríamos sencillamente hacer un select así (canalizando la salida al select): Get-WmiObject win32_logicaldisk | Select-Object SystemName,DeviceID,VolumeName,FreeSpace,Size Pero como el espacio medido en bytes no es precisamente fácil de interpretar a prima facie, se puede dar un formato que lo presente en GB, así: Get-WmiObject win32_logicaldisk | Select SystemName,DeviceID,VolumeName,@{Name="Size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} Es un choclo y no lo voy a explicar en detalle, pero notar que el @ (arroba) precede a una expresion. Name es el nombre del campo. Expression es el valor. El signo peso con guion bajo representa el registro actual, notar que apunta al registro actual y a su propiedad (o miembro, siendo objetivos). Le da formato numerico "{0:N1}" y lo divide por 1 GB para hacerlo legible. Si hay SELECT puede haber WHERE. El campo DriveType tiene un valor numérico que indica, ¡adivinen! el tipo de unidad. 3: disco local 4: disco de red 5: disco removible Por eso vamos a pedir solamente el tipo 3, los discos rigidos locales. Se puede hacer de dos maneras: Como filtro, en la primera parte de la sentencia: Get-WmiObject Win32_LogicalDisk -filter "DriveType=3" -computername $computers (sigue como antes) Es sencillo, no? El campo es DriveType, el filtro es: -filter "DriveType=3" O como un WHERE de SQL. Los SQLeros sabrán que el WHERE se resuelve antes que el SELECT. Por eso aunque no es el orden normal, aquí se pone primero el WHERE. Una canalizacion luego de la lectura del objeto indicando que el campo DriveType del registro actual tiene que ser igual a 3: Get-WmiObject win32_logicaldisk | Where-Object { $_.DriveType -eq 3 } | (sigue el SELECT) Para terminar podemos hacer que el resultado vaya a un archivo separado por comas (queda bonito, como planilla de calculo), agregando al final: | Export-Csv C:tempMyDiskSpace.Csv Notar que se canaliza la salida a un archivo (ruta completa explícita) O tambien se puede generar una simpatica ventanita colocando esto al final: | Out-GridView Espero les sirva. Hay mucho más en la dimensión Powershell... ¿habrá algun otro post en el futuro? Fuentes: http://edwinfriesen.nl/content/?p=741 http://blogs.technet.com/b/tommos/archive/2011/12/03/enumerating-free-disk-space-on-remote-computers-with-powershell.aspx