Fabiano Neves's profileFabiano Neves Amorim - S...PhotosBlogListsMore Tools Help

Blog


    August 28

    Falando sobre Gustavo, Luciano, Laercio, Diego, Junior Galvão e Fabiano

    Depois vou postar as minhas centenas de fotos e videos sobre o Community Zone, mais essa foto que o Diego postou no blog dele ficou show, ... Galera do mal essa eim... É uma honra pra mim pousar do lado desses feras...

    Valeu Diego.

    Citação

    Gustavo, Luciano, Laercio, Diego, Junior Galvão e Fabiano

    Viu galera, reparam uma coisa? o "01" é o 1º a aparecer na foto coincidência não?....hahaha...

    August 27

    Entrevista 1 - Mauro Pichiliani

    Pessoal vou dar inicio ao que imagino que seja a primeira de muitas entrevistas que virão.

     

    Minha idéia é a seguinte, iniciar uma séria de entrevistas com especialistas em SQL Server, inicialmente com os MVPs e Colunistas brasileiros, depois com funcionários da Microsoft e então partirei para os MVPs gringos e funcionários da Microsoft Corp.

     

    Já tenho alguns questionários respondidos, irei tentar publicar 1 por semana.

    O primeiro da Lista é o Mauro Pichiliani que é colunista no imasters.uol.com.br.

     

    Sem mais, vamos ao questionário. Espero que gostem...

     

    1.       Vamos começar falando da novidade do momento, quais as novas features do SQL Server 2008 que você acha mais importante, e porque? Nomeie pelo menos 3.

    a.       Bom, o SQL Server 2008 traz uma série de novas funcionalidades. Eu escrevi uma coluna explicando as 10 funcionalidades que mais me impressionaram,  a coluna pode ser visualizada no link abaixo:

    http://imasters.uol.com.br/artigo/9712/sql_server/top_10_funcionalidades_do_sql_server_2008/

    b.      Dentre as três principais posso citar:

    1.       As melhorias no Reporting Services, que facilitam a vida de quem precisa criar relatórios bem apresentáveis.

    2.       Os recursos para compactação, que vão reduzir sensivelmente o espaço utilizado por bancos de dados.

    3.       Algumas mudanças na linguagem, como o operador MERGE, que é bem interessante e vai facilitar a comparação de dados entre tabelas.

    2.       Em relação a performance no SQL Server 2008, quais as features você acha mais importante?

    a.       São várias, mas creio que a utilização de filtros nos índices é a feature mais importante que pode melhorar muito a performance se utilizada corretamente.

    3.       Quais suas dicas para um profissional que está iniciando em SQL Server?

    a.       Eu sempre recomendo a quem está iniciando procurar estudar muito. Outro ponto importante é possuir uma mente aberta, ser criativo e saber improvisar. Muitas vezes os profissionais são conservadores e não arriscam muito, o que pode fazer a diferença no final do dia.

    4.       O que é necessário para se tornar um usuário Master em SQL Server?

    a.       Apenas uma palavra: Estudo. Obviamente é preciso também muita prática e o famoso jogo de cintura, mas com certeza o estudo é o principal.

    5.       O que é necessário para se tornar um usuário Master em Transact SQL Server?

    a.       Mais uma vez, muito estudo. O Transact-SQL, em particular, é uma linguagem fácil se comparada com outras, mas mesmo assim é preciso conhecê-la muito bem para dominar suas particularidades e saber utilizá-la a seu favor.

    6.       Qual sua opinião em relação ao uso excessivo de Triggers no banco de dados?

    a.       Bem, o uso de Triggers deve ser ponderado e utilizado com bom senso. Em algumas situações vale a pena utilizar triggers, pois um trigger é um ótimo mecanismo para programar regras de negócio. Contudo, já observei usos irracionais de triggers que apenas tornaram o banco de dados mais complexo e suscetível a erros.

    7.       Qual o maior erro que uma pessoa pode cometer ao analisar um plano de execução?

    a.       Analisar o plano de execução e tomar uma decisão errada. Isso sem contar que para analisar o plano de execução é preciso conhecer os seus componentes, algo que muitas pessoas ignoram.

    8.       Quando usar um Clustered Index e quando usar um Non Clustered Index?

    a.       Depende muito da situação. Em geral o uso do índice clusterizado já é implementado automaticamente quando se cria uma chave primária e, a partir daí, todos os outros índices criados são do tipo não clusterizados. Porém isso não deve ser visto como uma regra e sim como uma diretriz.

    9.       Porque estatísticas são importantes?

    a.       As estatísticas são importantes para avaliar a densidade e seletividade de índices e são utilizadas pelo SQL Server, de forma automática ou não. Há casos onde o SQL Server pode atualizar as estatísticas e gerar um plano de execução melhor. Devido a esta característica vale a pena ver se no plano de execução há alguma mensagem sobre a falta de estatísticas atualizadas.

    10.   O quanto fragmentação no banco de dados pode afetar performance? Existe algum beneficio em ter fragmentação no banco?

    a.       Mais uma vez esta questão depende muito de cada cenário. Em tabelas grandes que fazem o uso de muitos índices é possível que a fragmentação prejudique o desempenho, porém há casos onde a fragmentação pode fazer sentido, principalmente quando se utiliza opções como o FILLFACTOR e PAD_INDEX.

    11.   Afinal parallelismo é bom ou ruim?

    a.       Com certeza é algo bom, mais isso vai depender de cada instrução. Em geral o otimizador de consultas já avalia o paralelismo automaticamente e não precisamos nos preocupar muito com isso.

    12.   Você utiliza alguma ferramenta para auxiliar na resolução de problemas de performance? Quais?

    a.       Sim, utilizo. Com certeza o Profiler é uma das ferramentas mais adequadas para isso. Outra ferramenta muito importante é o próprio Management Studio, pois ele permite a visualização gráfica do plano de execução das instruções.

    13.   Em um banco de dados em produção você utiliza algum TraceFlag habilitado?

    a.       Raramente. O motivo de não utilizar TraceFlags é que alguns deles requerem a reinicialização do servidor, algo que não pode ser feito em bancos de dados que requerem alta disponibilidade.

    14.   Cite 3 livros que não podem faltar na coleção de um especialista SQL Server.

    a.       “Introduction to Database Systems” do C. J. Data, “SQL Server Resouce Kit”, da própria Microsoft e o “Inside SQL Server” da Kalen Delaney.

    15.   Nestes anos de experiência, Qual foi o problema mais difícil de resolver que encontrou?

    a.       Com certeza foram vários. Porém cito problemas de desempenho em bancos de dados com mais de 100 GB de dados como um deles. Além de ser complicado realizar qualquer manutenção em uma base dom este tamanho estas modificações requerem muito esforço e testes.

    16.   Já passou por algum daqueles problemas que resolveu mas até hoje não sabe o que era?

    a.       Sim, com certeza. Geralmente problemas relacionados a bugs internos do SQL Server não há como saber exatamente o que é. O máximo que dá para fazer é abrir um chamado no suporte da Microsoft e utilizado uma solução temporária (workaround) até um patch ou Service Pack ser liberado.

    17.   Qual o maior banco de dados que já trabalhou e quantas linhas tinha a maior tabela que já viu?

    a.       Bom, isso é difícil de dizer pois existem bancos de dados que crescem muito rapidamente. No momento posso dizer que já cheguei a trabalhar com bancos de dados que ultrapassam 1 TB de tamanho. Quanto à tabelas, procuro sempre evitar sobrecarregar uma mesma tabela com muitos dados, pois isso evita vários problemas. Mas já encontrei ambientes em que uma tabela apenas ocupava mais de 50 GB de espaço.

    18.   Como diria o Tobby(charges.com.br) - Bate bola jogo rápido:

    Um concorrente digno do SQL Server: O Oracle

    a.       Uma feature: O recurso Time Machine do Oracle

    Um comando SQL(o meu predileto é o SHUTDOWN WITH NOWAIT J) : Com certeza o comando SELECT, preferencialmente com a cláusula WITH CUBE.

    b.      Um livro: Indiscutivelmente o “Introduction to Database Systems” do Date.

    19.   Você tem algum blog? Site? Msn?... Como os usuários da comunidade podem entrar em contato com você?

    a.       Não tenho blog, mas o meu principal contato é através do iMasters (www.imasters.com.br) onde os usuários da comunidade podem entrar em contato comigo por meio dos comentários nas colunas ou pelo  e-mail.

    20.   Deseja deixar alguma consideração final?

    a.       Vou deixar uma mensagem que ouvi recentemente e que aborda a questão da tecnologia versus o lado humano:

    b.      “Todos somos exploradores, que procuram saber o que está mais à frente do horizonte, o que está no outro lado. E ainda assim, quanto mais experimentei, mais aprendi...que não importa quão longe viajemos, ou quão rápido cheguemos ali, os mais profundos descobrimentos... não estão necessariamente mais à frente... da próxima estrela. Eles estão dentro de nós...tecendo os fios que nos unem, a todos nós, uns aos outros.”

    August 26

    Manipulando o SQL Express com SMO e Management Studio Express

    Estarei apresentando uma WebCast(Treinamento Online) amanhã na quarta-feira, 26 de agosto de 2008.

    Segue o resumo do que será discutido na WebCast e o link para inscrição do evento..

    ----------------------------------------------------------------------------------------------------------------------------------------

    Visão Geral do Evento

    Palestrante: Fabiano Amorim.

    SQL Server Management Objects (SMO) é uma biblioteca de objetos do .NET Framework que permite gerenciar e criar objetos em um servidor SQL Server. Veja neste WebCast como usar os componentes SMO para criar tarefas de manutenção de banco de dados a partir de uma aplicação WindowsForms. Veremos também o uso do SQL Server Management Studio Express que é ferramenta gratuita de gerenciamento do SQL Server Express.

    https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032387063&EventCategory=4&culture=pt-BR&CountryCode=BR

    Conto com a presença de todos.

    Update

    Os arquivos utilizados na WebCast podem ser baixados usando os links abaixo.

     

    http://cid-52eff7477e74caa6.skydrive.live.com/self.aspx/Publica/MSDN%20Webcast%20-%20Manipulando%20o%20SQL%20Express%20com%20SMO%20e%20Management%20Studio%20Express.pptx

    http://cid-52eff7477e74caa6.skydrive.live.com/self.aspx/Publica/ExemploSMO.zip 

    IsNumeric a Saga Continua…

    Desta vez o IsNumeric ganhou uma visibilidade maior no Blog do super Senior Escalation Enginieer Bob Dorr.

    http://blogs.msdn.com/psssql/archive/2008/08/25/isnumeric-returns-1-true-and-i-expected-0-false.aspx

    Interesting…

    Bug SQL Server 2008 RTM

    Pois é tai um bug(ou não?) interessante do SQL Server 2008 RTM.

    O Código abaixo roda no SQL 2000 e 2005 mas não roda no SQL 2008.

    DECLARE @I Int

    SET @I = -1

    SELECT 1

    WHERE CONVERT(Numeric(2,0),@i) = 0

    Agora vamos dar uma olhada no plano de execução de cada versão.

    SQL Server 2000 SP4

    clip_image001

    SQL Server 2005 SP2

    clip_image002

    SQL Server 2008 RTM

    clip_image003

    O que acontece é que o SQL Server 2008 converte(ummm interessante no SQL 2005 ele usou o CONVERT e no 2008 usou o CONVERT_IMPLICIT e no 2000 ele nem gerou o Compute Scalar) o valor de CONVERT(Numeric(2,0),@i) para um tinyint, sabemos o tinyint vai de 0 até 255 portanto quando ele tenta converter o -1 da erro.

    Agora a pergunta que fica é, porque o SQL Server considerou o “0” como um tinyint?

    Talvez por questões de performance já que ele só ocupa 1 byte.

    Já foi aberto um comentário no Microsoft Connect para falar do assunto...

    https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=363428&wa=wsignin1.0

    August 21

    Falando sobre TechEd Brasil 2008 - Site oficial do evento e Steve Balmer

    Dando continuidade nas informações sobre o TechEd 2008.

    Acreditem ou não mas desta vez quem vem para a abertura do Evento é nada mais nada menos que o Todo Poderoso.. Super Boss da Microsoft, Steve Balmer.

    Já estão falando por ai que vão proibir a entrada de pessoas com Ovos na mochila :-). Brincadeiras a parte, como nos eventos anteriores esse ano vai ser show de bola.

    Citação

    TechEd Brasil 2008 - Site oficial do evento e Steve Balmer

    Olá a todos,

    A Microsoft Brasil acaba de lançar o site oficial do maior evento de Tecnologia Microsoft do país: TechEd Brasil 2008. Nele, os participantes podem realizar suas inscrições, verificar a lista de palestrantes, informações sobre viagem e hospedagem, e muito mais.

    O site oficial do evento é: http://www.teched.com.br/.

    Mas, a notícia mais importante de hoje é Steve Balmer!

    O Presidente Executivo da Microsoft (também conhecido como Big Boss) vem ao Brasil especialmente para o Tech-Ed , quando realizará a palestra de abertura do evento!

    Melhor do que isso só se o Bill Gates viesse na carona dele e os dois realizassem a abertura do TechEd!

    Counting T-minus 54 days!

    Abraço a todos,

    Herleson Pontes
    MVP | MCT | MCITP | MCTS | MCP | MOS

    Culminis Speaker Member - Brazil
    Articulista da SQL Magazine, WebMobile e .net Magazine
    Blog Técnico: http://www.herlesonpontes.com.br/
    Líder do Grupo Office.CE: http://www.officeceara.com.br/

    August 20

    Licenciamento SQL Server 2008

     

    Muito bom este documento onde é explicado os possíveis cenários de licenciamento do SQL Server 2008.

     

    Por exemplo, ao contrário do Oracle o SQL é cobrado por processador e não por core, pode haver uma outra instancia instalada em outra máquina como backup para failover usando Mirroring, Cluster ou Log Shipping... o servidor de BackUp pode ficar no ar por até 30 dias sem ter que pagar por outra licença desde que o número de Processadores seja igual ou inferior ao do servidor de produção.

     

     

    Segue o link para o documento, Licensing Overview

     

     

     

    August 18

    Falando sobre TechEd Brasil 2008 - Faça parte desta EXPERIÊNCIA!

    Galera, o TechEd Brasil 2008 a está chegando, o MVP Helerson postou um banner onde tem alguns detalhes como Datas e local.

    Citação

    TechEd Brasil 2008 - Faça parte desta EXPERIÊNCIA!

    Olá a todos,

    Os preparativos para mais um TechEd Brasil, maior congresso de Tecnologia Microsoft do País, começaram. A Microsoft Brasil acaba de divulgar o banner abaixo, onde já estão confirmados o local e as datas deste grande evento.

    A URL oficial do evento (http://www.techedbrasil.com.br/) ainda apresenta o evento de 2007. Mas, muito em breve, o site apresentará a agenda de palestras, palestrantes e as inscrições.

    Todas as novidades deste super evento serão postadas aqui! Aguardem!

    Abraço a todos,

    Herleson Pontes
    MVP |
    MCT | MCITP | MCTS | MCP | MOS

    Culminis Speaker Member - Brazil
    Articulista da SQL Magazine, WebMobile e .net Magazine
    Blog Técnico: http://www.herlesonpontes.com.br/
    Líder do Grupo Office.CE: http://www.officeceara.com.br/

    August 08

    10 pontos que devem ser observados quanto a performance de uma consulta Parte - 4

    6.       Substituir o uso de CURSOR pelo comando WHILE + tabelas temporárias ou Variáveis do tipo table.

    DECLARE @VendorID Int,

            @Name     VarChar(80)

     

    DECLARE Cur_Vendor CURSOR FOR

     SELECT VendorID, Name

       FROM Purchasing.Vendor

     

    OPEN Cur_Vendor

     

    FETCH NEXT FROM Cur_Vendor

     INTO @VendorID, @Name

     

    WHILE @@FETCH_STATUS = 0

    BEGIN

           PRINT @Name

     

                 FETCH NEXT FROM Cur_Vendor

        INTO @VendorID, @Name

    END

     

    CLOSE Cur_Vendor

    DEALLOCATE Cur_Vendor

    GO

     

    DECLARE @ROWID Int,

            @Name  VarChar(80)

     

    SET @ROWID = 0;

     

    SELECT TOP 1

           @ROWID = VendorID,

           @Name  = Name     

      FROM Purchasing.Vendor

     WHERE VendorID > @ROWID

     ORDER BY VendorID

     

    WHILE @@ROWCOUNT > 0

    BEGIN

      PRINT @Name

     

      SELECT TOP 1

             @ROWID = VendorID,

             @Name  = Name     

        FROM Purchasing.Vendor

       WHERE VendorID > @ROWID

       ORDER BY VendorID

    END

    GO

     

    7.       Verificar se as variáveis no WHERE são do mesmo DataType que a coluna da tabela.

    DECLARE @TMP TABLE(Nome VarChar(80) PRIMARY KEY)

     

    DECLARE @Nome NVarChar(80)

    SET @Nome = 'Teste'

     

    -- Gera FULL SCAN

    SELECT * FROM @TMP

     WHERE Nome = @Nome

     

    GO

     

    DECLARE @TMP TABLE(Nome VarChar(80) PRIMARY KEY)

     

    DECLARE @Nome VarChar(80)

    SET @Nome = 'Teste'

     

    -- Gera SEEK

    SELECT * FROM @TMP

     WHERE Nome = @Nome

     

    8.       Verificar se existe uso de variáveis do tipo Table para grande volume de dados, pois isso pode causar problema de performance já que variáveis do tipo table não usam proveito de paralelismo e não criam estatísticas com os dados da tabela.

    9.       Verificar se é possível usar o conceito de Hash Index usando o CheckSum para gerar o número HASH, Caso existam colunas com valores muito grandes as vezes compensa usar o CheckSum para gerar o Hash e depois indexar a coluna hash.

    -- Create a checksum index.

    SET ARITHABORT ON;

    USE AdventureWorks;

    GO

    ALTER TABLE Production.Product

    ADD cs_Pname AS CHECKSUM(Name);

    GO

    CREATE INDEX Pname_index ON Production.Product (cs_Pname);

    GO

    /*Use the index in a SELECT query. Add a second search

    condition to catch stray cases where checksums match,

    but the values are not the same.*/

    SELECT *

    FROM Production.Product

    WHERE CHECKSUM(N'Bearing Ball') = cs_Pname

    AND Name = N'Bearing Ball';

    GO

    10.       Evite usar a clausula IN.

    IF OBJECT_ID('tempdb.dbo.#TMP') IS NOT NULL

    BEGIN

      DROP TABLE #TMP

    END

     

    CREATE TABLE #TMP (ID Int IDENTITY(1,1) PRIMARY KEY)

    GO

     

    INSERT INTO #TMP DEFAULT VALUES

    INSERT INTO #TMP DEFAULT VALUES

    INSERT INTO #TMP DEFAULT VALUES

    INSERT INTO #TMP DEFAULT VALUES

    INSERT INTO #TMP DEFAULT VALUES

    GO

     

    SET STATISTICS PROFILE ON

    SET STATISTICS IO ON

     

    SELECT * FROM #TMP

     WHERE ID IN (1,2,3,4,5)

     

     

    /*

    Coluna argument

     

    OBJECT:([tempdb].[dbo].[#TMP]),

           SEEK:(

                   [tempdb].[dbo].[#TMP].[ID]=(1) OR

                   [tempdb].[dbo].[#TMP].[ID]=(2) OR

                   [tempdb].[dbo].[#TMP].[ID]=(3) OR

                   [tempdb].[dbo].[#TMP].[ID]=(4) OR

                   [tempdb].[dbo].[#TMP].[ID]=(5)

                )

           ORDERED FORWARD

     

    Repare no argument que o SQL gerou, ou seja irá acessar uma vez a tabela #TMP para cada opção do IN

    podemos confirmar isso no Scan Count do statistics io

     

    -- IO

    Scan count 5, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

     

    */

    GO

     

    SELECT * FROM #TMP

     WHERE ID BETWEEN 1 AND 5

    /*

    OBJECT:([tempdb].[dbo].[#TMP]),

           SEEK:(

                  [tempdb].[dbo].[#TMP].[ID] >= (1) AND

                  [tempdb].[dbo].[#TMP].[ID] <= (5)

                )

           ORDERED FORWARD

     

    Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

     

    Repare na diferença de IO.

    */

     

    Espero que tenham gostado, eu adorei J, gostei tanto que vou começar a escrever uma série de artigos sobre o Query Optimizer, fiquem de olho...

    10 pontos que devem ser observados quanto a performance de uma consulta Parte 3

    Seguindo a série de boas práticas em relação a performance...

     

    4.      É muito comum durante o desenvolvimento de um código SQL necessitarmos zerar o valor das variáveis que serão utilizadas no código.

    Uma dica em relação a performance é que o comando SELECT é mais rápido do que o SET, porém está regra só se aplica quando podemos substituir um bloco de SET por um SELECT por ex:

    -- Executa um loop zerando o valor de 10 variáveis utilizando SET

    -- Gere o plano de execução e repare que no plano de execução que no Loop o SQL gera um SELECT para cada comando SET.

    DECLARE @i Int, @Test1 int, @Start datetime

    DECLARE @V1 Char(6),

            @V2 Char(6),

            @V3 Char(6),

            @V4 Char(6),

            @V5 Char(6),

            @V6 Char(6),

            @V7 Char(6),

            @V8 Char(6),

            @V9 Char(6),

            @V10 Char(6);

     

    SET @Test1 = 0

    SET @i = 0

    SET @Start = GetDate()

    WHILE @i < 50000

    BEGIN

      SET @V1 = ''

      SET @V2 = ''

      SET @V3 = ''

      SET @V4 = ''

      SET @V5 = ''

      SET @V6 = ''

      SET @V7 = ''

      SET @V8 = ''

      SET @V9 = ''

      SET @V10 = ''

          SET @i = @i + 1                  

    END                               

    SET @Test1 = DATEDIFF(ms, @Start, GetDate())

    SELECT @test1

     

    GO

    -- Executa um loop zerando o valor de 10 variáveis utilizando SELECT

    -- Diferente do primeiro plano de execução o SQL gerou apenas 1 instrução para setar os valores para as 10 variáveis.

    DECLARE @i Int, @Test1 int, @Start datetime

    DECLARE @V1 Char(6),

            @V2 Char(6),

            @V3 Char(6),

            @V4 Char(6),

            @V5 Char(6),

            @V6 Char(6),

            @V7 Char(6),

            @V8 Char(6),

            @V9 Char(6),

            @V10 Char(6);

     

    SET @Test1 = 0

    SET @i = 0

    SET @Start = GetDate()

    WHILE @i < 50000

    BEGIN

    SELECT @V1 = '',

           @V2 = '',

           @V3 = '',

           @V4 = '',

           @V5 = '',

           @V6 = '',

           @V7 = '',

           @V8 = '',

           @V9 = '',

           @V10 = '',

           @i = @i + 1;

    END                               

    SET @Test1 = DATEDIFF(ms, @Start, GetDate())

    SELECT @test1

     

    5.       Pequenas dicas para procedures..

    a.       Sempre que uma procedure é executada o server envia para o client o número de linhas afetadas pela procedure, normalmente esta informação não é necessária. Desabilitando este comportamento poderemos reduzir o trafego gerado pelo Server e o Client. Portanto sempre que possível inclua o SET NOCOUNT ON no início de suas procedures. Pode ser que isso não gere muita diferença em uma proc que efetua 1 insert mas quando estamos falando de um loop que efetua 1000000 de inserts daí com certeza vai ser um grade ganho de trafego desnecessário que estaria rolando na rede.

    b.      Só use a opção WITH ENCRYPTION e WITH RECOMPILE caso seja realmente necessário. Lembre-se de que existem programas que conseguem descriptogravar um proc que está criptografada no banco.

    c.       Não inicie o nome de suas procedure com sp... este prefixo é reservado para procedures do sistema, sempre que você executa uma procedure que inicia com sp... o SQL irá procurar a proc no banco Master e se ela não estiver lá então ele irá resolver o nome da proc no banco atual. Evite este passo adicional simplesmente renomeando as procedures para por exemplo usp ou st.

    d.      Caso tenha que rodar algum código TSQL no meio da proc evite utilizar o EXEC ao invés disso use a sp_ExecuteSQL pois ao contrário do EXEC a sp_ExecuteSQL irá compilar o SQL para gerar um plano de execução para sua consulta, o quer dizer que caso o plano já tenha sido gerado na próxima execução do código ele irá utilizar o plano que ficou em cachê, evitando a recompilação do código a cada execução.

    August 06

    FIX e Patchs de Correção II

    Ainda falando sobre atualização e correções do SQL Server, segue um site MUITO bom que contem todos os updates do SQL e qual o número de cada Build.
     
     
    Esse vale ir pro favoritos.
     
    August 05

    FIX e Patchs de Correção

    Pessoal vamos ficar atentos para os Fix de correção de erros do SQL Server, não basta atualizar até o último Service Pack e esperar pelo próximo SP pois tem existem várias correções que são lançadas e que ainda não estão em um Service Pack.

     

    Nos últimos 2 meses tivemos problema 2 problemas em nossos clientes que estavam com uma versão com um problema que já havia sido corrigido.

     

    1º Problema;

     

    O primeiro foi em um cliente que utilizava SQL Server 2000 com Service Pack 3, e tivemos um erro que ao rodar uma consulta com um where IS NULL mesmo assim retornava um valor que não era NULL.

    Por ex:

     

    select * from tabela

    where Cod IS NULL

     

    O comando acima retornava um Cod que não era null contrariando o filtro do WHERE.

    Este problema foi corrigido no SP 4 do SQL 2000, como podemos ver no KB abaixo.

     

    FIX: A parallel query may return unexpected results

    http://support.microsoft.com/kb/814509/en-us

     

    Para resolver temporariamente até o cliente atualizar seu servidor utilizamos a clausula OPTION (MAXDOP 1) nos selects.

     

    2º Problema;

     

    Outro erro que pegamos foi no SQL Server 2005 SP2 onde ao rodar uma procedure com um texto muito grande e usando a opção WITH ENCRYPTION o SQL gerava um erro.

    Este problema foi corrigido com um FIX que já foi lançado e é bem provável que estará entre os FIX de correção que serão lançados com o SP3 do SQL Server 2005, podemos ver mais detalhes do problema e baixar o FIX no KB abaixo.

     

    FIX: Error message when you run a long stored procedure that is encrypted in SQL Server 2005: "A stack overflow occurred in the server while compiling the query"

    http://support.microsoft.com/kb/934246/en-us

     

    Scripts and Tools for Performance Tuning and Troubleshooting SQL Server 2005

    E tem gente que ainda pergunta porque eu gosto da Microsoft!

     

    Script Repository: SQL Server

     

    Acesse e pegue uma coleção muito boa de scripts para o SQL Server 2005.

     

    Aproveitando o embalo acesse o Toolbox do CAT para mais arquivos e aplicativos úteis para SQL.

     

    http://sqlcat.com/toolbox/default.aspx

    August 01

    Community Zone 2008

    imagem

    Acabei de receber um convite para participar do Community Zone 2008 que será no Hotel Vila Santo Agostinho em Bragança Paulista.

     

    Show de Bola! Baseado no que vi dos eventos anteriores a este deve ser muito bom. Fora que irei estar no meio dos maiores influenciadores e colaboradores da Microsoft...

     

    Para enviar o convite eles avaliaram a minha contribuição nas comunidades técnicas como:

     

                 Fóruns de discussão (quantidade de respostas com alta qualidade e/ou moderação);

                 Artigos técnicos publicados na comunidades MSDN e TechNet;

                 WebCasts entregues através do MSDN e TechNet;

                 Eventos Presenciais;

                 Contribuições com grupo de usuários;

                 Participação em Projetos dos Centros de Inovação e/ou Adoption Labs da Microsoft

     

    Já confirmei minha presença, quando eu voltar conto como foi J