SQL Server 2000 : o Contra-Ataque

Sou partidário da idéia de que o melhor ataque é a defesa, e é nesse sentido que gostaria de iniciar nosso primeiro encontro: esclarescendo minha opinião sobre uma série de comentários à respeito do banco de dados da Microsoft.

Periodicamente o leitor é apresentado a matérias comparando o SQL Server com outros bancos de dados. Comparações são saudáveis, pois permitem nortear os usuários na escolha do produto que melhor se adapte às suas necessidades. Comparações também estimulam melhorias nos produtos, pois forçam produtos concorrentes a estarem evoluindo sempre.

O SQL Server 2000 não chegou onde está por acaso. São mais de dez anos e 3 grandes saltos (6.5, 7.0 e 2000). Para o início do ano que vem está prevista a versão 2005 (codename Yukon, se preferir), que está chegando para arrasar.

Destaquei algumas frases, que serão comentadas a seguir.

O SQL Server não “aguenta o tranco” ...

  • Quem faz esse tipo de afirmação está no mínimo desatualizado. Existem organizações sem fins lucrativos, reconhecidas internacionalmente por sua independência a quaisquer tipo de produto ou marca, que executam testes comparativos entre os principais SGBD´s existentes no mercado. Nesses benchmarks, que são bastante rigorosos e possuem auditagem de resultados independente, o SQL Server 2000 merece sempre posição de destaque. São aferidos itens como performance e escalabilidade em bases OLTP (TPC-C), em bases OLAP (TPC-H) e em número de iterações por segundo, simulando um processo de venda na Web (TPC-W) . Esses resultados podem ser comprovados em www.tpc.org/.
  • Alguns números das maiores instalações de SQL Server pelo mundo podem também ser confirmadas por recente pesquisa da Winter Corporation entre as maiores instalações de bancos de dados existentes pelo mundo no ano de 2003:(www.wintercorp.com/VLDB/2003_TopTen_Survey/TopTenWinners.asp):
    • Maior database no ambiente Windows (sexto na classificação geral) : 5.3 Terabytes;
    • Maior tabela em número de linhas em bases OLTP: 33 bilhões de linhas;
    • Segundo colocado em número de transações por segundo: 4.010 transações/segundo;
    • Ainda no item número de transações por segundo, das 10 maiores instalações do mundo, quatro operam com SQL Server.

O SQL Server custa caro ...

  • Sabemos que tudo tem seu preço. Tudo vai depender do que realmente precisamos e de onde queremos chegar. Você pode comprar um carro popular, o chamado ‘pé-de-boi’ e ficar bastante satisfeito. Sim, é difícil suportar aqueles dias de calor sem ar condicionado. Por várias vezes também um motor 1.0 deixa a desejar. Se isso não for um problema para você, então o tal carro popular que estamos falando serve para você. Sim, concordo que você pode colocar um ar-condicionado depois, mas o motor dificilmente será substituído. Com banco de dados (assim como tudo na vida!) acontece a mesma coisa. O que devemos ter em mente é a relação custo-benefício, aliada à satisfação dos usuários.
  • O banco de dados da Microsoft vale o quanto pesa. Já na versão Standard você consegue somar às funcionalidades do banco:
    • Replicação de dados: você pode, por exemplo, replicar alterações de preços e qualquer alteração em sua base de produtos para suas filiais. Em contrapartida, todas as transações realizadas nessas filiais podem ser replicadas para um servidor central de hora em hora, para uma visão consolidada de suas vendas;
    • Dispositivos para criação de bases redundandes: o SQL Server possui mecanismos para manter cópias atualizadas de sua base de dados noutro servidor, através de um processo conhecido por log shipping. A base no servidor secundário (também conhecido por stand-by) pode ainda ser utilizada em processos de leitura de dados, desafogando gargalos de processamento no servidor principal;
    • Geração de cubos para análise de tendências: o Data Warehousing tornou-se uma ferramenta fundamental nos dias de hoje. É através da garimpagem de dados históricos que são obtidas valiosas informações para serem utilizadas em processos de tomada de decisão;
    • Ferramentas nativas para análise e tuning de aplicações (Profiler, Index Tuning, Análise Gráfica do Plano de Execução): a captura de processos num servidor de banco de dados é fundamental para identificação e eliminação de gargalos. O Profiler, em conjunto com o Index Tuning Wizard e com a ajuda do Analisador Gráfico do Plano de Execução de Queries fornecem um universo de possibilidades para rastreamento, identificação e correção de problemas de performance;
    • Controle centralizado de jobs : controlar processos executados em diferentes servidores pode ser uma tarefa bastante estenuante. O SQL Server, através do recurso conhecido por Multi-Server Jobs viabiliza o gerenciamento centralizado de schedule de processos, facilitando bastante a administração de parques distribuídos de servidores;
    • Interface gráfica para controle e gerenciamento de servidores (Enterprise Manager): todos conhecemos o poder da Microsoft em criar interfaces ergonômicas. Quem já teve a oportunidade de “dar uma espiada” no Enterprise Manager sabe do que estou falando;
    • Interface gráfica para criação de queries, debug de stored-procedures, análise de planos de execução , object browser, etc (Query Analyser): sim, você consegue fazer tudo isso com um alguns cliques de mouse;
    • Suporte a todos os tipos de backup (full, diferencial e log). Acrescente a esse fato a capacidade de efetuar backup full em ambiente de produção – não é preciso parar o banco; os usuários podem continuar trabalhando enquanto o backup é executado.
  • Para uma listagem completa das funcionalidades do SQL Server 2000 acesse www.microsoft.com/sql/evaluation/overview/default.asp.

O tempo de treinamento é longo ...

A Microsoft possui vários cursos para SQL Server, cada um deles focado numa particularidade do banco. Basicamente, existem três cursos: no primeiro deles você aprenderá como administrar um servidor SQL Server, incluindo sua arquitetura, processo de instalação, criação de databases, política de segurança, procedimentos para backup e recovery, replicação de dados e métodos de monitoramento. Esse curso tem a duração de 5 dias. Outro curso é destinado para a construção de queries, e tem o objetivo de apresentar ao usuário - aquele que nunca se deparou com um comando select - a linguagem T-SQL. Esse curso tem a duração de2 dias. O último curso possui duração de 5 dias e é indicado para aqueles que serão responsáveis pela criação de objetos, definição de regras, análise de performance de queries e programação de acesso em dados distribuídos entre vários servidores.

Como pode-se observar, o tempo total para preparação se resume em 12 dias. Se você já conhece alguma linguagem SQL, esse tempo cai para 10 dias. Para se tornar um DBA Certificado, a Microsoft entende que além dos recursos relacionados ao banco são necessários também conhecimentos do Sistema Operacional, pois a performance do servidor de banco de dados depende não somente do banco em sí, mas também do conjunto formado pelo hardware (memória, discos, processador e rede) e Sistema Operacional onde o banco está inserido. O candidato do título MCDBA tem ainda que se submeter a uma última prova, atestando que possui também conhecimentos noutra ferramenta (Data WareHousing, Visual Basic .Net, C#, entre outras). Nessa condição, para se tornar um DBA Certificado o tempo de treinamento sobe para uma média de 22 dias.

A certificação fornecida pela Microsoft – assim como outras cerfificações no mundo da informática – visa diferenciar e qualificar profissionais na utilização do produto. O que não deve ser confundido é que no processo de titulação são exigidos alguns conhecimentos adicionais, acarretando num maior tempo de treinamento.

O SQL Server não trabalha com bloqueios de linha ...

Quem diz esse tipo de coisa está desatualizado. O SQL Server trabalha com bloqueios de linha desde a versão 7.0.

Os níveis de isolamento do SQL Server não são adequados ....

O SQL Server 2000 trabalha com todos os níveis de isolamento assegurados pela convenção ANSI-92 (Read Uncommitted, Read Committed, Repeateble Read e Serializable). O nível de isolamento padrão é o Read Committed, que permite somente a leitura de dados comitados por transações.

Processos de leitura utilizam um tipo de bloqueio chamado Shared. Imagine o índice de um livro. Você seleciona um tópico, que indica a página de número 101. Você procura pela página, e percebe que essa página não existe. Da página 100, o livro “pula” para a página 102. Para evitar esse tipo de situação, existe o shared lock. O que é importante frisar é que esse bloqueio persiste SOMENTE durante a leitura, e não durante toda a transação. Vamos supor que você precise ler informações na página 101 da tabela A, depois acessar uma página na tabela B. Assim que o engine do banco finalizar a leitura na página 101, o shared lock é liberado independentemente do término da transação (ou se preferir, da leitura na tabela B). Esse bloqueio é extremamente curto, e serve para garantir a integridade da informação.

Se você utilizar um nível de isolamento mais restritivo, como Repeateble Read ou Serializable para leituras, a transação de leitura irá bloquear a transação de atualização. Isso é verdade. Agora, o que acontece de fato é que esses níveis de isolamento raramente são utilizados – na empresa onde trabalho simplesmente não existe nenhum processo que utilize tais níveis de isolamento.

Existem bancos de dados que trabalham com um nível de isolamento conhecido por Snapshot, que permite o versionamento de registros. Funciona mais ou menos assim: imagine a transação A alterando o valor de venda de um produto de R$5,00 para R$6,00. Essa transação continua ativa quando a transação B requisita a leitura do mesmo produto. Com o nível de isolamento snapshot, a transação B conseguiria ler a última versão comitada do registro (=R$5,00), sem ter que aguardar o fim da transação A.

O versionamento com certeza é uma característica bastante interessante, por isso a Microsoft implementou essa mudança no SQL Server 2005, que teve seu lançamento postergado para o início do ano que vem. Falarei um pouco das principais features do SQL Server 2005 no próximo artigo.

O SQL Server não trabalha com before triggers ...

O SQL Server trabalha com after e instead of triggers. Essas últimas podem ser utilizadas como before triggers, permitindo que se trabalhe, por exemplo, uma violação de foreing key ANTES que ela de fato aconteça. Imagine uma aplicação que esteja tentando inserir uma linha com a opção ‘WW’ para a unidade de federação do endereço do cliente. Ora, todos sabemos que não existe um estado com essa sigla. A before trigger poderia ser utilizada para interceptar essa alteração, corrigir a unidade da federação pelo CEP do cliente e gravar a linha adequadamente.

Em tempo: as possibilidades para resolução do problema visto no parágrafo anterior são muitas. Conseguiríamos um resultado bem mais interessante encapsulando o processo de inserção do cliente numa stored-procedure, deixando a checagem da unidade da federação FORA dos limites da transação - antes do begin tran. Com a stored-procedure, além de agregar bastante flexibilidade ao código, contribuiríamos para otimizar a transação de inserção de clientes, isentando-a do processo de checagem.

MSDE suporta somente 5 conexões simultâneas ...

Quem faz esse tipo de afirmação também está desatualizado. Nesse exato momento, estou rodando uma mesma query em 8 conexões concorrentes sob o MSDE, instalado em minha máquina.

O MSDE, anacrônimo de Microsoft SQL Server 2000 Desktop Engine, é uma versão enxuta e redistribuível do SQL Server destinada a aplicações desktop. Verifique algumas respostas a perguntas freqüentes sobre essa versão do produto em www.microsoft.com/sql/msde/howtobuy/msdeuse.asp. Essa questão em particular, referente ao número conexões concorrentespode ser confirmada em:

... Can I use MSDE as a database for Web applications ?
A resposta é …
… Yes, MSDE is an ideal solution for basic Web applications with up to 25 concurrent users.

Conclusão:

O objetivo central desse artigo foi mostrar a você leitor que o SQL Server 2000 possui uma posição bastante consolidada no mercado de banco de dados. A Microsoft tem investido muito nessa área, que o diga o SQL Server 2005 - ou YUKON - que traz uma série de novidades para torná-lo ainda melhor. Em nosso próximo encontro, falaremos um pouco dessas features.

Forte abraço a todos e até a próxima!