P+R SQLAumente bancos de dados, use iFilters e conecte-se remotamente

Edited by Matthew Graven

Dica: Limpe o cache

Você já pensou por que um procedimento armazenado pode funcionar bem no ambiente de teste, mas funcionar com desempenho ruim quando implantado no SQL Server de produção? Esse problema pode estar relacionado com o cache. Antes de implantar procedimentos armazenados ao seu ambiente de produção, teste os procedimentos no ambiente de teste após ter limpado planos de consulta em cache para que você saiba como seu procedimento armazenado será executado em um ambiente de cache "frio". Veja abaixo duas coisas úteis para manter na sua lista de técnicas.

Para limpar o cache de procedimento em um SQL Server:

DBCC FREEPROCCACHE
Go

Consulta para listar todos os planos em cache:

Select * from sys.dm_exec_cached_plans
Go

P Possuo um banco de dados que apresenta tráfego intenso durante o dia e eu não desejo usar o crescimento automático porque isso poderia potencialmente causar tempos limites, se o SQL Server® decidir fazer isso durante horários de pico. Gostaria de implementar um trabalho periódico para expandir o arquivo do banco de dados em uma porcentagem específica do espaço usado. Como posso fazer isso?

R O crescimento de arquivo é uma operação de E/S de disco intensiva e, se o SQL Server precisar esperar um arquivo de dados ou de log para ser expandido, você certamente poderia ver esse desempenho prejudicial e os tempos de resposta. O incremento do crescimento padrão é de 1 MB para arquivos de dados e 10% para arquivos de log, que podem ser incrementos de crescimento insuficientes para sistemas movimentados. Além disso, confiar no crescimento automático pode levar à fragmentação do disco porque os arquivos de dados ou log não são contínuos no disco — isso significa que os tempos de resposta podem ser mais longos que o necessário, uma vez que os dados ficam fisicamente espalhados pelo disco.

A chave para o bom desempenho é alocar de maneira proativa espaço suficiente para arquivos de dados e log antecipadamente. Isso muitas vezes requer alguma análise de tendência e previsão de crescimento e resultará em um melhor desempenho porque os arquivos estarão contínuos no disco, além de evitar o custo de E/S exigido pelo crescimento automático durante períodos de pico. O crescimento automático deve geralmente ficar ativado, pois um arquivo de dados ou log completamente cheio impedirá o acesso ao banco de dados no total. Mas tenha em mente que o crescimento automático deve ser considerado uma rede de segurança, e não um recurso para gerenciar bancos de dados.

O agendamento de expansões de arquivos de banco de dados regulares deve ser evitado porque pode também levar a arquivos não-contínuos no disco e, conseqüentemente, a um desempenho reduzido. O monitoramento proativo pode ser atingido pela execução regular de um script com o objetivo de determinar a porcentagem do espaço livre para cada banco de dados (executado por um trabalho do SQL Agent) e, em seguida, pela execução de uma ação (como enviar um alerta por email pelo Correio do Banco de Dados). O código da figura fornece um script de amostra que revela como reunir a porcentagem de espaço livre para o banco de dados atual.

Depois que um alerta for gerado, você poderá fazer o script do crescimento de arquivo único com o comando ALTER DATABASE e poderá usar um trabalho do SQL Agent para agendar que essa ação ocorra fora dos horários de pico. Tente aumentar o arquivo para um tamanho que será suficiente até um futuro próximo para evitar futuras expansões de arquivos com incremento pequeno. Também é uma boa idéia verificar se o encolhimento automático não está ativado em nenhum banco de dados — isso pode criar desnecessariamente ciclos de encolhimento ou crescimento do banco de dados.

—Justin Langford

Determinando o espaço livre em um banco de dados

-- 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 Minha empresa armazena diferentes formatos de arquivos dentro do nosso banco de dados usando colunas varbinary e image. Eu soube que o SQL Server integrou uma funcionalidade que permitirá que eu pesquise esses diferentes formatos de arquivos. Como posso configurar o SQL Server para fazer isso?

R Essa funcionalidade é incorporada no serviço de indexação de texto completo. O serviço fornece a flexibilidade de usar interfaces IFilter, possibilitando o desenvolvimento e o carregamento de filtros que podem extrair informações úteis a partir de dados proprietários. Esses IFilters são também usados para outros produtos, como o Microsoft® Office SharePoint® Server, para coletar informações sobre arquivos rastreados.

Um IFilter é fornecido pelo criador do formato de arquivo ou por terceiros. O SQL Server já contém alguns IFilters carregados quando o FTS (FulltextService) é instalado — eles incluem filtros para arquivos HTML e DOC. No entanto, mais IFilters podem ser adicionados conforme necessário. Por exemplo, filtros para Adobe PDF podem ser encontrados no site da Adobe e um novo pacote de filtros para extensões do sistema Office 2007 foram publicadas no final de 2007. Observe que você deve saber qual versão do IFilter é necessária. Por exemplo, um IFilter pretendido para sistemas de 32 bits não funcionará com instalações de 64 bits do SQL Server.

Após executar o pacote de instalação no cliente, o IFilter normalmente será registrado no ecossistema do SO. Com os bits registrados no SO, será necessário executar algumas etapas para que o FTS possa carregar os IFilters. Após iniciar sua ferramenta de execução de consulta, emita os seguintes comandos:

  • sp_fulltext_service 'load_os_resources',1. (Essa instrução permitirá que o FTS carregue os bits registrados para processamento, incluindo componentes como separadores de palavras e lematizadores.)
  • sp_fulltext_service'verify_signature',0. (Com isso o SQL Server irá ignorar a ação de verificar se os filtros usados são assinados, uma vez que vários fornecedores não assinam seus filtros de acordo com o padrão.)
  • Reinicie a instância do SQL Server e a instância do FTS.
  • Crie seu índice de texto completo nas colunas tendo a coluna binária como o conteúdo para o IFilter a ser rastreado e a coluna de extensão (isto é, a coluna com o tipo de extensão, como DOCX) para o SQL Server escolher o filtro para o qual o conteúdo será redirecionado.

Mais informações podem ser encontradas em go.microsoft.com/?linkid=7912971.

—Jens Suessmeyer

P Não consigo me conectar a um SQL server remoto. Preciso configurar o firewall no meu cliente ou na máquina do servidor?

R Conexões remotas ao SQL Server 2005 podem falhar por várias razões, mas a configuração do firewall é um dos problemas mais comuns. O blog dos Protocolos do SQL (blogs.msdn.com/sql_protocols) é um grande recurso para obter informações sobre como fazer uma conexão SQL.

A instalação padrão do SQL Server 2005 não permite conexões remotas. A partir da máquina que executa o SQL, no menu Iniciar, selecione Microsoft SQL Server 2005 | Ferramentas de configuração | Configuração da Área de Superfície do SQL Server. Aqui, vá para Configuração da Área de Superfície de Serviços e Conexões, selecione Conexões Remotas e selecione o botão de rádio "Usando TCP/IP e pipes nomeados". Para que a alteração tenha efeito, é necessário reiniciar o SQL.

Por padrão, o SQL Server usa a porta 1433. Para verificar se a porta está aberta, use o seguinte comando do telnet, substituindo <ipaddress> pelo endereço IP real da máquina que executa o SQL Server:

telnet <ipaddress> 1433

Se você receber uma resposta de falha de conexão, abra o Firewall do Windows®, vá até a guia Exceções, selecione Adicionar Porta e adicione a porta TCP 1433. O Telnet deve agora ser bem-sucedido. (Observe que o Telnet não está instalado por padrão no Windows Vista®.)

—Rick Anderson

Agradecemos aos seguintes especialistas em SQL Server por contribuírem para essa coluna:
Justin Langford trabalha para a Coeo Ltd., uma empresa Integradora de Sistemas e Parceira Certificada pela Microsoft com base na Inglaterra. Jens Suessmeyer é consultor de banco de dados na Microsoft da Alemanha. Rick Anderson trabalha na Formação do Usuário Desenvolvedor na Microsoft. Saleem Hakani é engenheiro sênior de banco de dados e líder da comunidade do SQL Server na Microsoft.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..