ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problema ao usar variáveis no SQLSERVER (RESOLVIDO)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
HELDERNET
Novato
Novato


Registrado: Sexta-Feira, 16 de Novembro de 2012
Mensagens: 22

MensagemEnviada: Qui Nov 28, 2013 5:15 pm    Assunto: Problema ao usar variáveis no SQLSERVER (RESOLVIDO) Responder com Citação

Tenho uma consulta sql, que utiliza parametro variáveis declaradas, com exemplo hipotético abaixo:

/*declarando variaveis*/
DECLARE @var_a int,
@var_b int,
@var_c int,
@var_d int,

@RESULT_A int,
@RESULT_B int,
@RESULT_C int,
@RESULT_D int;

/*populando variaveis*/
SELECT
@var_a = A,
@var_b = B,
@var_c = C,
@var_d = D
FROM TABELA
WHERE ID_X = X

SET @RESULT_A = (SELECT A - A FROM TABELA_A WHERE A = @var_a )
SET @RESULT_B = (SELECT A - B FROM TABELA_B WHERE B = @var_b )
SET @RESULT_C = (SELECT A - C FROM TABELA_C WHERE C = @var_c )
SET @RESULT_D = (SELECT A - D FROM TABELA_D WHERE D = @var_d )


/*resultado*/
SELECT
@RESULT_A,
@RESULT_B,
@RESULT_C ,
@RESULT_D


Tenho vários servidores que executa essa variável e o tempo de resposta e menos de 1 segundo, mas em um servidor que o tempo de resposta está demorando muito, chega a quase 4 minutos e o caso curioso é que substitui as pelo valor manualmente exemplo:

SET @RESULT_A = (SELECT A - A FROM TABELA_A WHERE A = 135)
SET @RESULT_B = (SELECT A - B FROM TABELA_B WHERE B = 219)
SET @RESULT_C = (SELECT A - C FROM TABELA_C WHERE C = 450)
SET @RESULT_D = (SELECT A - D FROM TABELA_D WHERE D = 210)

e o tempo foi praticamente estantâneo.

Alguém já passou por isso e me sabe dizer o que fazer ???

SQL SERVER EXPRESS 2008


Editado pela última vez por HELDERNET em Ter Dez 03, 2013 8:54 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Nov 28, 2013 7:54 pm    Assunto: Responder com Citação

Boa noite,

Não sei o motivo da diferença de desempenho, mas considerando o script que você postou de exemplo, acredito que seria possível obter o mesmo resultado da seguinte forma:

Código:
SELECT
    a.A - a.A as RESULT_A,
    b.A - b.B as RESULT_ B,
    c.A - c.C as RESULT_C,
    d.A - d.D as RESULT_D
FROM TABELA as t
left join TABELA_A as a
    on a.A = t.A
left join TABELA_B as b
    on b.B = t.B
left join TABELA_C as c
    on c.C = t.C
left join TABELA_D as d
    on d.D = t.D
WHERE t.ID_X = X


Só não sei se será possível adaptar o seu script real para algo semelhante, nem como ficará o desempenho.

Espero que seja útil.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
HELDERNET
Novato
Novato


Registrado: Sexta-Feira, 16 de Novembro de 2012
Mensagens: 22

MensagemEnviada: Ter Dez 03, 2013 9:12 am    Assunto: Responder com Citação

Olá, amigo !!!!

O problema não estava no script SQL, até mesmo porque tenho vários servidores rodando o mesmo sistema e está perfeito, somente este que começou a apresentar uma lentidão inexplicável, sendo assim comecei a analisar o banco e com pesquisas na internet descobri que o problema era o tamanho do arquivo do banco de dados que estava quase 4Gb, atingindo assim o tamanho limitado pelo SQLSERVER 2008 EXPRESS. Para resolver isso, encontrei duas soluções:

1º era atualizar o gerenciador do banco de dados para o SQLSERVER 2008 EXPRESS R2 que dá um limite de até 10GB por arquivo.

2º era criar grupos de arquivos

Sendo assim, optei para a segunda opção porque até mesmo não depende de mim para conseguir a licença da versão mais atualizada. Então, criei um arquivo secundário chamado (NOME_BANCO_OLD)

Depois fui na opção do menu TAREFAS/REDUZIR/ARQUIVOS e marquei a opção "reorganizar páginas antes de liberar espaço não utilizado" e reduzi a 3,211mb

Depois reindexei algumas tabelas utilizando o comando:

dbcc dbreindex('TABELA','',70)

Abrir o sistema e ficou rápido quanto esperado.

Mesmo assim, obrigado pela sua dica.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB