Preguntas y respuestas acerca de SQLExpanda las bases de datos, use IFilters y conéctese de forma remota

Editado por Matthew Graven

Sugerencia: Borre la memoria caché

¿Se ha preguntado alguna vez por qué un procedimiento almacenado puede funcionar bien en un entorno de pruebas y, sin embargo, tener un rendimiento insuficiente cuando se implementa en el SQL Server de producción? Esto puede deberse a un problema relacionado con la memoria caché. Antes de implementar procedimientos almacenados en su entorno de producción, pruebe los procedimientos en el entorno de pruebas después de borrar planes de consultas en caché. Así podrá saber el rendimiento que presentarán los procedimientos almacenados en un entorno "frío" de memoria caché. Aquí le ofrecemos un par de trucos que podrá llevar siempre en su chistera.

Para borrar el procedimiento en caché en un SQL Server:

DBCC FREEPROCCACHE
Go

Consulta para incluir en una lista todos los planes en caché:

Select * from sys.dm_exec_cached_plans
Go

P Tengo una base de datos que presenta un gran volumen de tráfico durante el día y no quiero usar la función de crecimiento automático porque esto podría causar tiempos de espera si SQL Server® decide realizar esta acción en horas de máxima intensidad. Me gustaría implementar un trabajo periódico para aumentar el archivo de base de datos en un porcentaje específico del espacio usado. ¿Cómo puedo hacerlo?

R La expansión de archivos es una operación de disco que consume mucha E/S, de modo que si SQL Server tiene que esperar a que los archivos de datos o de registro se expandan, el rendimiento y los tiempos de respuesta pueden verse ciertamente afectados. El incremento de expansión predeterminado es de 1 MB para archivos de datos y del 10 por ciento para archivos de registro. Estos incrementos pueden ser insuficientes para sistemas ocupados. Además, depender de la función de crecimiento automático puede causar la fragmentación del disco si los archivos de datos o de registro no ocupan un lugar contiguo en el disco. Esto significa que los tiempos de respuesta pueden demorarse más de lo necesario, ya que los datos están físicamente dispersados en el disco.

La clave de un buen rendimiento consiste en asignar proactivamente el espacio suficiente de archivo para archivos de datos y de registro desde el principio. A menudo, esto requiere un análisis de tendencias y una previsión del crecimiento. El resultado es un mejor rendimiento porque los archivos ocupan un lugar contiguo en el disco y evitan el costo de E/S que requiere la función de crecimiento automático en momentos de máxima intensidad. Generalmente, la función de crecimiento automático debe permanecer habilitada, puesto que los archivo de datos o de registro completamente cargados evitan el acceso a la base de datos. Tenga presente, no obstante, que la función de crecimiento automático debe considerarse una protección en vez de una característica para administrar bases de datos.

Debe evitarse la programación de expansiones regulares de archivos de base de datos, ya que de lo contrario se puede dar pie a archivos que no ocupen un lugar contiguo en el disco y reducir consecuentemente el rendimiento. Se puede lograr la supervisión proactiva mediante la ejecución regular de un script para determinar el porcentaje de espacio libre para cada base de datos (ejecutado por un trabajo del Agente SQL) y realizando entonces una acción (como enviar una alerta de correo electrónico a través del Correo electrónico de base de datos). El código de la figura ofrece un script de ejemplo que muestra cómo reunir el porcentaje de espacio libre para la base de datos actual.

Cuando se genera una alerta, puede ejecutar un script de expansión de archivo de un solo uso con el comando ALTER DATABASE. También puede usar un trabajo del Agente SQL para programar la ejecución de esta acción fuera de horas de máxima intensidad. Pruebe a expandir el archivo hasta un tamaño que sea suficiente para el futuro inmediato para evitar pequeñas expansiones incrementales de archivo. También es una idea buena asegurarse de que la autorreducción no está habilitada en ninguna base de datos, ya que esto podría crear ciclos innecesarios de reducción o expansión de las bases de datos.

—Justin Langford

Determinación del espacio libre en una base de datos

-- Script to gather size, free space and 
-- calculate % free space for current 
-- USER database
DECLARE @size DEC(15,2)
DECLARE @free DEC(15,2)
DECLARE @result DEC(15,2)

SELECT @size = SUM(size)*1.0/128
FROM sys.database_files

SELECT @free = 
(SUM(unallocated_extent_page_count)*1.0/128)
FROM sys.dm_db_file_space_usage

PRINT 'DB Size ' + CONVERT(VARCHAR(15), @size)
PRINT 'Free Space ' + 
CONVERT(VARCHAR(15), @free)

SELECT @result = (@free/@size)*100

PRINT '% Free Space ' + 
CONVERT(VARCHAR(15), @result)

P Mi compañía almacena formatos de archivo diferentes en nuestra base de datos usando columnas de varbinary e imagen. He oído que SQL Server ha integrado la funcionalidad que me permitirá buscar estos formatos de archivo diferentes. ¿Cómo puedo configurar SQL Server para hacer esto?

R Esta funcionalidad está integrada en el servicio de indización de texto. El servicio proporciona la flexibilidad para usar interfaces de IFilter, haciendo posible el desarrollo y la carga de filtros que pueden extraer información útil de datos propietarios. Estos IFilters se usan también con otros productos, como Microsoft® Office Sharepoint® Server, para reunir información acerca de archivos rastreados.

Los IFilter son proporcionados por el creador del formato de archivo o por proveedores de terceros. SQL Server ya contiene algunos IFilters que se cargan al instalar FulltextService (FTS). Entre éstos se incluyen filtros para archivos HTML y DOC. Sin embargo, se pueden agregar más IFilters según sea necesario. Por ejemplo, los filtros para los archivos PDF de Adobe se pueden encontrar en el sitio web de Adobe. Además, a finales de 2007 se publicó un nuevo paquete de filtros para las extensiones de 2007 Office system. Tenga en cuenta que debe saber qué versión de IFilter se ajusta a sus necesidades. Por ejemplo, un IFilter diseñado para sistemas de 32 bits no funcionará con instalaciones de 64 bits de SQL Server.

Después de ejecutar el paquete de instalación en el cliente, el IFilter se registrará en el ecosistema del sistema operativo. Con los bits registrados en el sistema operativo, tendrá que realizar algunos pasos para que FTS pueda cargar los filtros. Después de iniciar la herramienta de ejecución de consultas, emita los siguientes comandos:

  • sp_fulltext_service 'load_os_resources',1. Esta instrucción permitirá que FTS cargue los bits registrados para el procesamiento, incluidos componentes como separadores de palabras y lematizadores.
  • sp_fulltext_service 'verify_signature',0. Esta instrucción omitirá SQL Server para comprobar si los filtros usados están firmados, ya que muchos proveedores no firman sus filtros según los estándares.
  • Reinicie la instancia de SQL Server y la instancia de FTS.
  • Cree su índice de texto en las columnas que tienen la columna binaria como el contenido que debe rastrear el IFilter y la columna de extensión (es decir, la columna con el tipo de extensión, como DOCX) para que SQL Server elija el filtro al que redireccionar el contenido.

Puede encontrar más información en go.microsoft.com/?linkid=7912971.

—Jens Suessmeyer

P No puedo conectarme a un SQL Server remoto. ¿Necesito configurar el firewall en mi equipo cliente o servidor?

R Las conexiones remotas a SQL Server 2005 pueden generar errores por muchas razones, pero la configuración del firewall es uno de los problemas más comunes. El blog de los protocolos de SQL (blogs.msdn.com/sql_protocols) es un gran recurso para obtener información sobre cómo hacer una conexión SQL.

La instalación predeterminada de SQL Server 2005 no admite conexiones remotas. Desde el equipo que ejecuta el SQL, en el menú Inicio, seleccione Microsoft SQL Server 2005 | Herramientas de configuración | Configuración de superficie de SQL Server. A continuación, vaya a Configuración de superficie para servicios y conexiones, seleccione Conexiones remotas y seleccione el botón de radio "Usar TCP/IP y canalizaciones con nombre". Ahora deberá reiniciar SQL para que el cambio surta efecto.

De forma predeterminada, SQL Server usa el puerto 1433. Para comprobar que el puerto está abierto, use el siguiente comando de Telnet reemplazando <ipaddress> por la dirección IP del equipo que ejecuta SQL Server:

telnet <ipaddress> 1433

Si obtiene una respuesta de conexión errónea, abra el Firewall de Windows®, vaya a la ficha Excepciones, seleccione Agregar puerto y agregue el puerto TCP 1433. Ahora, el comando de Telnet debería realizarse correctamente. Recuerde que Telnet no está instalado de forma predeterminada en Windows Vista®.

—Rick Anderson

Gracias a los siguientes expertos en SQL Server por contribuir a esta columna:
Justin Langford trabaja para Coeo Ltd., un integrador de sistemas y Microsoft Certified Partner con sede en Inglaterra. Jens Suessmeyer trabaja en Alemania como consultor de bases de datos para Microsoft. Rick Anderson trabaja como desarrollador de planes de enseñanza para usuarios en Microsoft. Saleem Hakani es ingeniero principal de bases de datos y miembro destacado de la comunidad SQL Server en Microsoft.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.