- Este tópico contém 16 respostas, 4 vozes e foi atualizado pela última vez 18 anos atrás por Regis Araujo.
-
AutorPosts
-
15 de dezembro de 2006 às 3:12 am #77565Regis AraujoParticipante
Ola Galera!!
ORACLE8i Com RED HAT 7.3
Seguinte, tive alguns problemas com o ORACLE8i (Ta, seu sei que já esta ultrapassado, mas é o que tem na empresa q trabalho), tenho algumas tabelas que possuem cerca de 8 milhões de registros e diáriamente faco inserções nas mesmas, bom, vamos ao problema!
A cada 2 meses eu faço uma deleção de cerca de 80% destes registros, porém por algumas vezes após esta deleção o banco de dados fica travado, um select de contagem simples demora cerca de 30 minutos, baixo o banco e subo mas a lentidão continuna, desmonto o banco pelo comando UMOUNT e remonto, mato todos os processos que estão rolando naquele momento, mas sem sucesso!
Depois de algumas hras o servidor volta ao normal, sem nenhuma intervenção minha ou por parte de alguma outra pessoa.
Gostaria de saber se tem alguma maneira de saber quais os processos que estão rodando (em background) naquele momento no banco, mesmo que não tenha ninguem logado!
Bom, esta maneira tem q me mostrar quais processos ficaram presos e que ainda estão em execução.Fico grato pela ajuda!!!!
Abraços!!!!
15 de dezembro de 2006 às 2:27 pm #77573chduarteParticipanteBom vamos la. Algo a se observar é se o seu banco esta com as estatisticas ligadas. Para fazer isso faca o seguinte. Antes de apagar seus registros faca o select:
SQL> select TABLE_NAME,NUM_ROWS, LAST_ANALYZED from dba_tables where table_name like ‘%TABELA%’;
Se os dois ultimos campos forem nulos, as estatisticas nao estao ligadas e ja esta descartado este problema. Se aparecer algo, o banco pode estar achando que depois da delecao, ainda possui os 8milhoes de registros. Se nao estiver nulo, depois de excluir os registros, rode um analyze na tabela com o comando:
SQL> analyze table compute statistics;
Quando voce faz um delete a HWM (High Wather Mark) permanece. O que acontece é que o banco precisa ler ate a marca d’agua dependendo do tipo de query que voce esta fazendo. Para ajudar nisso rode o seguinte:
SQL> alter table wsr_url_address deallocate unused;
Para bancos oi uma manutencao na tablespace também é necessario depois de excluir tantas linha. Rode o seguinte comando para “Reagrupar” os segmentos dispersos:
SQL> alter tablespace coalesce;
Isso é o que pode ser feito para ajudar na parte fisica.
Toda a espera do banco pode ser vista na v$session_wait. Para ver o que esta causando a sua lentidao faca o seguinte. Execute a sua query normalmente. Abra outra janela como DBA e ache a sua sessao no banco:
SQL> select sid,serial#,username,program from v$session where username = ‘SEU USUARIO EXECUTANDO A QUERY’;
Pegue o sid e faca o seguinte:
SQL> select sid,event,p1,p2,p3 from v$session_wait where sid =
O evento irá te mostrar o que o banco esta esperando e o motivo da lentidao.
Qualquer duvida por favor coloque outro POST aqui.
Grande []
Carlos Henrique Duarte
DBA Oracle 11i15 de dezembro de 2006 às 6:21 pm #77582Regis AraujoParticipanteCarlos muito obrigado!
Sempre que faço uma deleção no banco de dados eu rodo o ANALYZE, porém desta vez nem rodando ele o banco melhorou, permaneceu com lentidão extrema.
Tentei utilizar o comando que vc passou:
“alter table wsr_url_address deallocate unused;”
Porém informou que a tabela informada não existe.
Hoje irei faze mais deleções no banco, após isto vou utilizar o comando:
alter tablespace coalesce;
Devido a uma janela pequena que tenho, não posso rodar este comando durante a semana, então será feito neste fim de semana.Com relação as estatisticas, elas estão ligadas, eu sempre olho se o banco ainda encherga as tabelas com as quantidades antigas.
Depois fico rodando o analyze em cada tabela, pois dependendo da necessidade (tempo) eu rodo apenas nas tabela que apresentarem diferença.Muito Obrigado!
15 de dezembro de 2006 às 8:48 pm #77590chduarteParticipanteNa verdade este wsr_url_address é uma tabela minha. Desculpe. Troque pelo nome da sua tabela.
Ja que o analyze esta impactando voce pode remove-la entao.
analyze table delete statistics;
Algo muito importante para o CBO e as estatisticas é a estatistica do sistema. Se voce tem estatisticas no banco precisa também se assegurar que o seu banco saiba o tempo de acesso do disco, memoria e CPU. Isso pode influenciar e muito no plano de execucao.
Grande []
Carlos Henrique Duarte
DBA Oracle 11i15 de dezembro de 2006 às 9:00 pm #77599Marcio68AlmeidaParticipanteBom, acho que você deveria mover a tabela para outra tablespace e rebuild nos índices dessa tabela, isso eliminaria a fragmentação e certamente melhoraria a performace…
Sem esquecer do analyze depois…16 de dezembro de 2006 às 1:39 am #77603Regis AraujoParticipanteBom, agradeço a todos pela ajuda!!!
Marcio, eu tentei fazer de varias maneiras, tentei fazer esta delação em uma tablespace temporaria, criei ela apenas para realizar a delecao dos aquivos, fiz o rebuild dos indices, isto é algo que meu chefe exige, não posso fazer nenhum tipo de limpeza em tabelas com ela na tablespace que estão as demais tabelas.
Mas oq me deixou muito confuso foi o fato de eu ter iniciado uma deleção, apagado cerca de 6 milhoes de registros, depois que isto foi concluido eu rodei o analyze nesta tabela, fiz o rebuild dos indices, reativei as constraints, após isto baixei o banco, reiniciei o servidor, mas mesmo assim um “select count(1) from ” demorava cerca de 30 min, isto ficou por umas 5 horas, derrepente do nada o banco voltou a sua performance anterior, aonde um select count(1) from estava demorando cerca de 0.080 segundos.
Abraços e obrigado!!!
16 de dezembro de 2006 às 9:12 pm #77609chduarteParticipanteVoce precisa ver o wait que o seu banco esta gerando. Sem saber o que sua query esta esperando é possivel sanar o problema.
Grande []
Carlos Henrique Duarte
DBA Oracle 11i21 de dezembro de 2006 às 6:46 pm #77683Regis AraujoParticipanteCarlos,
Tentei verificar o wait do banco pelo comando que você passou, porém ele me traz sempre a mesma mensagem.
“SQL*Net message from client”
Tem alguma outra maneira aonde eu possa verificar o Wait do banco??
Obrigado!!!
Regis Araujo
DBA Oracle Jr21 de dezembro de 2006 às 6:59 pm #77685chduarteParticipanteEste é o unico geito.
Estranho por isso significa que o banco nao esta fazendo nada. Voce pegou a sessao correta?Para garantir que esta pegando a sessao certa utilize o seguinte metodo:
Na sessao onde voce ira executar sua query, execute o seguinte comando antes:
SQL> exec dbms_application_info.set_module(‘MyQuery’,’MyQuery’);
SQL>Em outra sessao como DBA:
SQL> select sid,event,p1,p2,p2
from v$session_wait
where sid in (select sid from v$session where module = ‘MyQuery’);Veja o resultado.
Grande []
Carlos Henrique Duarte
DBA Oracle Applications22 de dezembro de 2006 às 8:15 pm #77737passanhaParticipanteMeu,você deve ter REDOs muito pequenos e esta ocorrendo alternância muito rápida.
Você poderia criar novamente REDOS maiores, isso ira ajudar.
Mais uma coisa.. é melhor fazer um teste antes em outro banco e depois vc avalia a possibilidade de alterar o bando de produção.
OK?22 de dezembro de 2006 às 8:27 pm #77738Regis AraujoParticipanteOla Passanha!
Bom mano, seguinte, tenho 3 redos com 90mb cada, ja fiz teste em outros bandos criando mais 1 redo, mas mesmo assim acontece esta dificuldade.
Carlos,
Obrigado, eu consegui verificar o WAIT do banco, mas estou correndo atras para achar um jeito de ver oq esta rodando mesmo, pelo wait eu localizei que o meu select esta aguardando resposta, tempo de espera de outros selects que tbm estao aguardando, estou tentando achar um jeito de ver qual eh o processo e oq ele esta “consultando” no banco e que esta segurando os demais selects.
Bom, to com varios livros aqui, meus olhos estão até doloridos de tanto ler, mas faz parte!!!
Comecei a trabalhar com ORACLE a pouco tempo, infelizmente não pude ainda fazer cursos, to tendo q aprender na marra, então tenho q pesquisar e estudar pakas ainda!!!Ahhh, quem puder me mande e-mail!!
Abracos e MUITO, MUITO OBRIGADO a Todos!!
Feliz Natal e um Prospero Ano Novo a todos.Regis Araujo
DBA Oracle Jr
22 de dezembro de 2006 às 8:31 pm #77746passanhaParticipanteMeu, nao ver resolver criar mais REDO, tem que ter maiores. Um tempo bom para alternar REDO é entre 20 a 30 minutos.
Olha isso…
[]22 de dezembro de 2006 às 8:34 pm #77748passanhaParticipanteolha só, tamanho de REDO nao é nada… tem que ver o tempo que alterna entre eles…
OK?22 de dezembro de 2006 às 9:18 pm #77754chduarteParticipanteO tamanho do redo nao afeta em nada a velocidade de uma query.
A unica maneira de uma query aguardar outras query é nos seguintes casos:
Existe a clausula “FOR UPDATE” e existem outros usuarios locando a sua tabela.
Sua query esta tentando acessar um bloco que ja esta sendo lido por outra clausula. Neste caso voce pode ter os seguintes waits:
Latch free
Buffer busy wait
Buffer cache chainQualquer wait que comece com SQLxxx significa que sua aplicacao esta parada e a sessao no Oracle nao esta fazendo nada.
Grande []
23 de dezembro de 2006 às 5:53 am #77760Regis AraujoParticipanteBom galera,
Com relacao aos REDO’s eu ja fiz varias avaliacoes, criei mais grupos, adicionei mais membros nos grupos, alterei tamanho, alterei tempo de LGWRT, mas mesmo assim ainda estou tendo dificuldades quando faco delecao de registros em uma tabela.
Carlos,
Sempre que meu banco de dados fica hiper lento, eu verifico no WAIT oq a minha query esta esperando, mas em todas as vezes ela fica com a mensagem de SQL*…!
Estou comecando a achar que o problema agora eh de maquina.
Hoje tive um grande problema com este servidor, sempre que uma instancia estava no ar, o processamento dos 2 processadores que tenho no servidor ficava entre 90% e 97%, utilizando o comando TOP no linux, o processo de uso ia de 3% para 30% em menos de 10 minutos!!
Eu baixava a instancia e o servidor caia drasticamente, voltando para 3%.
Outra coisa que eu verifiquei foi que quando o banco vai passar pela sequencia do REDO do grupo 2 ele comeca a subir o processamento, depois verifico que este REDO nao gerou gravacao, criei outro redo para este grupo, vamos ver agora como ira funcionar a Instancia!!Ahhh, desculpe a leiguisse, mas nao consegui descobrir como alterar o tempo de gravacao dos arquivos REDO.
Muito obrigado!!
Abracos!!!
Regis Araujo
DBA Oracle Jr -
AutorPosts
- Você deve fazer login para responder a este tópico.