 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
HELDERNET Novato


Registrado: Sexta-Feira, 16 de Novembro de 2012 Mensagens: 22
|
Enviada: Qui Nov 28, 2013 5:15 pm Assunto: Problema ao usar variáveis no SQLSERVER (RESOLVIDO) |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Nov 28, 2013 7:54 pm Assunto: |
|
|
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 |
|
 |
HELDERNET Novato


Registrado: Sexta-Feira, 16 de Novembro de 2012 Mensagens: 22
|
Enviada: Ter Dez 03, 2013 9:12 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|