Fabiano Neves's profileFabiano Neves Amorim - S...PhotosBlogListsMore ![]() | Help |
|
|
May 28 NoCheck ConstraintOntem 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 StreetHahaha fantástico esses vídeos falando sobre SQL Server.
Video: Man on the Street What is SQL Server 2008
May 20 WebCast - Caminhos de Upgrade para SQL Server 2008Pessoal é 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.
Conto com a presença de todos. May 07 Versão SQL ServerPara 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:
Outro comando: -- Retorna várias informações sobre o servidor EXEC master.dbo.xp_msver May 05 Compression na práticaCompression é 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.
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 TableMuitas 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) */ |
|
|