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

Blog


    May 28

    NoCheck Constraint

    Ontem um amigo daqui da empresa foi rodar um delete e para sua surpresa recebeu a seguinte mensagem.

     

    delete from tabela where ID = 3

     

    Msg 8630, Level 17, State 34, Line 1

    Internal Query Processor Error: The query processor encountered an unexpected error during execution.

     

    Ou seja o otimizador não agüentou o tranco, tudo bem que a tabela tem apenas 418 foreign keys, ou seja, para poder efetuar o delete o SQL terá que ler nas 418 tabelas se o ID = 3 existe pois senão ele não pode deixar o delete acontecer.

     

    Como eu tenho certeza de que não existe nenhuma referencia com as outras tabelas para resolver o problema tive que desabilitar todas constraints das tabelas e efetuar o delete e depois habilitar as constraints.

     

    -- Executei este comando para ver as foreign keys

    sp_fKeys corcc002

     

    Copiei a coluna fkTable_Name e criei um comando para desabilitar e outro para habilitar todas as constraints desta tabelas. Segue um exemplo do comando

     

    -- Comando para desabilitar foreign key

    ALTER TABLE TabelaB NOCHECK CONSTRAINT ALL

     

    -- Comando para habilitar foreign key

    ALTER TABLE TabelaB CHECK CONSTRAINT ALL

    Humor - Man on The Street

    Hahaha fantástico esses vídeos falando sobre SQL Server.

     

       

    Video: Man on the Street What is SQL Server 2008

     

         
    Video: Man on the Street Why Upgrade to SQL Server2008

     

      
    Video: SQL Server vs. Oracle 11g

    May 20

    WebCast - Caminhos de Upgrade para SQL Server 2008

    Pessoal é com prazer com convido a todos para participar da WebCast que a convite da Microsoft estarei apresentando na quarta-feira as 12:00 dia 04/06/2008.

     

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

     

    Caminhos de Upgrade para o SQL Server 2008

    Visão Geral do Evento

    Palestrante: Fabiano Neves Amorim.

     

    O SQL Server 2008 é a nova plataforma de banco de dados da Microsoft, entenda neste WebCast quais os caminhos para migrar seu banco de dados para a versão 2008. Serão respondidas perguntas como "Porque migrar para SQL Server 2008?" e "Atualizar de 2000 para 2005? Ou direto para 2008?".

    Também serão apresentadas ferramentas que auxiliam no processo de atualização como Upgrade Advisor 2008 e SQL Server Upgrade Assistant 2008, tópicos importantes como Upgrade In-place ou migração Side by Side.

     

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

     

    Conto com a presença de todos.

    May 07

    Versão SQL Server

    Para saber qual Service Pack o seu servidor SQL Server está rodando execute o comando abaixo:

     

    SELECT SERVERPROPERTY('ProductLevel')

     

    Existem outros comandos que retornam mais informações sobre a instance SQL instalada, segue alguns.

     

    Retornar

    -- Retorna os dados da versão do SQL Server, Service pack e mais...

    SELECT @@Version

     

    Para identificar o que o número retornado significa, veja na lista abaixo.

    Tabela de versão do SQL Server:

    Versão

    Sem SP (RTM or Golden)

    SP1

    SP2

    SP3 / SP3a

    SP4

    SP5

    SP5a

    SQL Server 6.0

    6.00.121

    6.00.124

    6.00.139

    6.00.151 

    SQL Server 6.5 (Hydra)

    6.50.201

    6.50.213

    6.50.240

    6.50.258

    6.50.281

    6.50.415

    6.50.416 

    SQL Server 7.0 (Sphinx)

    7.00.623

    7.00.699

    7.00.842 

    7.00.961

    7.00.1063

    SQL Server 2000 (Shiloh)

    8.00.194

    8.00.384

    8.00.534

    8.00.760

    8.00.2039

    SQL Server 2005 (Yukon)

    9.00.1399.06

    9.00.2047

    9.00.3042

    SQL Server 2008 (Katmai)

    10.0.1300.13 CTP June

     

    Outro comando:

    -- Retorna várias informações sobre o servidor

    EXEC master.dbo.xp_msver

    May 05

    Compression na prática

    Compression é sem dúvida umas das melhores features do SQL Server 2008, fiz alguns testes para ver como isso funciona na prática e fiquei bem contente com o resultado.

    Clique no link abaixo para baixar o script que utilizei para teste.

     

    Tabela

    CPU

    Writes

    Duration

    Tamanho

    Pages

    Tmp_Row_Compression

    10656

    1617

    45809

    12 MB

    1613

    Tmp_Page_Compression

    11359

    1142

    44118

    8 MB

    1133

    Tmp_Sem_Compression

    10032

    5914

    46873

    46 MB

    5883

    Baseados nos resultados acima, podemos observar 3 pontos importantes, CPU, Writes e Tamanho da tabela.

     

    CPU – Como era de se esperar o algoritmo de nossos amigos Lempel e Ziv utilizados na compactação por página consome mais recurso de CPU, por outro lado, no nosso exemplo teve o melhor desempenho em relação a compactação dos dados consumindo apenas 1133 páginas.

    Writes – Em relação ao número de writes confesso que fiquei admirado, mesmo sabendo que o SQL vai compactar os dados e tal, ao comparar o número de writes da tabela sem compression com as tabelas com compression é de se espantar.

    Tamanho – Podemos observar que a compressão dos dados foi fantástica, tanto para compression por Row quanto por Page. Show de bola.

     

    Obs.: Rodei o SQL na minha máquina e durante a execução continuei trabalhando, acessando disco, compilando projeto e por ai vai, ou seja, os resultados podem mudar bastante caso você repita os testes em uma máquina mais “tranqüila“ :-)  Se você fizer os testes me mande o resultado...

    May 02

    2 Índices em Variáveis do tipo Table

    Muitas vezes temos a necessidade de criar 2 índices em variáveis do tipo table, mas o comando CREATE INDEX @TMP... não roda pois não são permitidos comandos DDL em variáveis do tipo table, porém é possível definir 2 índices no comando de create da tabela, segue um exemplo bem prático.

      

    SET STATISTICS PROFILE ON

     

    DECLARE @Tmp TABLE(ID   Int IDENTITY(1,1) PRIMARY KEY,

                       Nome VarChar(200))

     

    SELECT * FROM @Tmp

    WHERE ID = 10

    /*

    SELECT * FROM @Tmp  WHERE ID = 10

      |--Clustered Index Seek(OBJECT:(@Tmp), SEEK:([ID]=(10)) ORDERED FORWARD)

    */

     

    SELECT * FROM @Tmp

    WHERE Nome = 'Teste'

    /*

    SELECT * FROM @Tmp  WHERE Nome = 'Teste'

      |--Clustered Index Scan(OBJECT:(@Tmp), WHERE:([Nome]='Teste'))

    */

    GO

    -- Exemplo de UNIQUE

    DECLARE @Tmp TABLE(ID   Int IDENTITY(1,1) PRIMARY KEY,

                       Nome VarChar(200) UNIQUE)

     

    SELECT * FROM @Tmp

    WHERE ID = 10

     

    /*

    SELECT * FROM @Tmp  WHERE ID = 10

      |--Clustered Index Seek(OBJECT:(@Tmp), SEEK:([ID]=(10)) ORDERED FORWARD)

    */

     

    SELECT * FROM @Tmp

    WHERE Nome = 'Teste'

     

    /*

    SELECT * FROM @Tmp  WHERE Nome = 'Teste'

      |--Index Seek(OBJECT:(@Tmp), SEEK:([Nome]='Teste') ORDERED FORWARD)

    */