quarta-feira, 1 de abril de 2009

SQL Server com TCP/IP, SQL ANSI e Truncate

Hoje cedinho eu comecei a ministrar um treinamento de SQL Server e o primeiro capítulo foi dedicado a uma visão geral da arquitetura do SQL Server e processamento lógico/físico das consultas. Sendo um treinamento de querying, será interessante revisitar alguns tópicos e tentar mostrar para a turma, de maneira acessível, como podemos escrever nossas consultas de forma limpa e eficiente. Depois de pegar um pouco de bagagem com o SQL Server, esse curso sobre consultas será uma experiência bem interessante (difícil é conter o lado geek e não sair entrando em detalhes…). Abaixo alguns pontos discutidos hoje…

1) Otimização da configuração do TCP/IP

Pergunta: “Como podemos fazer para otimizar o nosso canal de comunicação? É possível usarmos UDP ao invés do TCP”?
Resposta: Sendo UDP uma proposta inviável para a comunicação com o SQL Server, ele somente é utilizado pelo serviço de browsing. Me lembrei de uma otimização para o Windows 2003, relacionada com o TCP/IP chimney offload, descrito neste post: http://blogs.msdn.com/psssql/archive/2008/10/01/windows-scalable-networking-pack-possible-performance-and-concurrency-impacts-to-sql-server-workloads.aspx 

Também sabemos de algumas melhores práticas normalmente relacionadas com a configuração do seu cluster, mas não me lembro de bate pronto de um documento específico sobre o tuning de TCP/IP com SQL Server. Concordo que temos que atentar para a configuração de rede e garantir que não têm ninguém no meio do caminho perdendo pacotes TCP/IP e causando o reenvio destes, o que atrasaria o tempo total de execução de uma consulta na visão do cliente, mas vejo uma abordagem mais eficiente para esse tipo de cenário. Uma solução bem arquitetada que minimiza a conversa entre o cliente/servidor, somente transfere os dados necessários e evita um canal “chatty”, é uma abordagem mais eficiente para se manter um ambiente com bom desempenho do que simplesmente ficar fazendo pequenos ajustes em registros obscuros. Concordam?
Recomendo um outro blog muito bacana: http://blogs.msdn.com/sql_protocols

2) SQL ANSI

O SQL Server 2008 não é totalmente ANSI compliant com a especificação SQL ANSI 2003 mas, segundo bibliografia, ele implementa uma série de funcionalidades importantes (simples assim). Gosto de padrões e das observações no wikipedia http://en.wikipedia.org/wiki/SQL, mas com o amadurecimento das tecnologias eu não acho que os projetos devam ser desenvolvidos somente usando SQL ANSI X, para tentar garantir uma eventual portabilidade para outros SGBDRs, que na minha experiência raramente acontece. Se quer ficar independente do banco de dados, procure uma tecnologia de mapeamento objeto-relacional (ou monte o seu framework) que crie essa abstração, analisando os prós e contras.

3) Truncate Table – DDL ou DML?

Pergunta: “O truncate table é uma instrução de DDL ou DML?”
Resposta: Não sei, mas em um primeiro momento eu diria DML, pois envolve manipulação dos dados. Depois de uma pesquisa rápida, um aluno tirou a dúvida e o truncate é uma instrução DDL.
Aqui está uma boa referência: http://weblogs.sqlteam.com/mladenp/archive/2007/10/03/SQL-Server-Why-is-TRUNCATE-TABLE-a-DDL-and-not.aspx. Sua vida não muda em nada, mas fica aqui a curiosidade.

Até um próximo post…

[]s
Luciano Caixeta Moreira
luticm79@hotmail.com

Nenhum comentário:

Postar um comentário