- Este tópico contém 27 respostas, 5 vozes e foi atualizado pela última vez 14 anos, 11 meses atrás por
leandrolbs.
-
AutorPosts
-
1 de abril de 2011 às 4:31 pm #98733
leandrolbs
ParticipantePessoal, estou em um banco em media de 100GB, de 10 dias pra cá, o Oracle tá lento… mais lento.. que pra listar as tabelas do banco é quase 1 minuto…
estou com serios problemas de lock pq as tabelas demora responder… em outras bases de tamanhos semelhantes isto não ocorre.
Como aumento a memoria SGA do Oracle? como posso melhor o desempenho dele… Statisticas ???
https://www.profissionaloracle.com.br/mo … pic&t=5091
Por favor me de uma luz. Obrigado.
1 de abril de 2011 às 5:58 pm #98734felipeg
ParticipanteLeandro, bom dia!
Pelo que entendi esta base de 100Gb é apenas um schema do banco certo?
Os outros estão funcionando normalmente?
Para este tipo de situação eu aconselho 3 atividades básicas (mas que no seu caso podem demorar)
- Coleta de estatísticas com o comando:
execute dbms_stats.gather_schema_stats(ownname => , cascade => TRUE) ; -
Rebuild de índices com o comando:
select ‘alter index ‘||index_name||’ rebuild tablespace ;’ from dba_indexes where status = ‘UNUSABLE’ and owner = upper() order by owner,index_name;
E por último reorganizar as tabelas:
select ‘alter table ‘||table_name||’ move tablespace ;’ from dba_tables where owner = upper() order by table_name ;Recomendo fazer “fora do horário” pois como comentei acima irá demorar.
Sobre a SGA, se o problema for relacionado a um dos pontos acima a SGA não irá ter o impacto desejado.
Qualquer coisa é só postar.
Atenciosamente,
Felipe Romeu Gregolewitsch1 de abril de 2011 às 6:07 pm #98735leandrolbs
ParticipanteMeu SGE pelo EM está conforme o print..
estava pensando em executar os comandos:
ALTER SYSTEM SET sga_max_size = 1258291200 SCOPE=SPFILE;
ALTER SYSTEM SET sga_target = 838860800 SCOPE=SPFILE;
Quando a objetos fora da tablespace não existe, rebuild nos index ja executei..
Quanto as statisticas quanto mais pesquiso, mais comando diferente encontro.
Este seu, é recomendado?
Conforme link no topico, executei aqueles comandos, e devo executar este após o aumento do SGA.
exec dbms_stats.gather_schema_stats( -
ownname => 'OWNER', -
estimate_percent => dbms_stats.auto_sample_size, -
method_opt => 'FOR ALL COLUMNS', -
degree => 4);
Sugestoes?? Terei problemas??
Servidor é 2003 4gb XEON 4 nucleos .. e ele tá tranquilo..
Oracle 10.2.0.3.0G Stand.
1 de abril de 2011 às 6:21 pm #98736felipeg
ParticipanteNão existe um comando “recomendado” para coleta de estatísticas.
Existem comandos para a coleta das mais variadas formas (por database inteira, por schema, por objeto) e cada uma delas faz exatamente a mesma coisa só que em abrangências diferentes dentro do seu banco de dados.
Como eu perguntei no primeiro post, esta base de 100Gb é apenas de um schema? se for recomendo rodar apenas o comando de gather_stats que eu passei ( ele irá coletar as estatisticas de todos os objetos pertinenetes neste schema)
Recomendo também gerar um trace de uma sessão e verificar qual o tipo de instrução que apresenta lentidão, este tipo de atividade facilita na hora de atacar um problema pois, se for analisar todos os parâmetros de banco, levará uma eternidade.
Estou com um problema para visualizar imagens, segue um script bem útil para anlisar a sua SGA
DECLARE
libcac number(10,2);
rowcac number(10,2);
bufcac number(10,2);
redlog number(10,2);
spsize number;
blkbuf number;
logbuf number;
total number;
BEGIN
select value into redlog from v$sysstat
where name = ‘redo log space requests’;
select 100(sum(pins)-sum(reloads))/sum(pins) into libcac from v$librarycache;
select 100(sum(gets)-sum(getmisses))/sum(gets) into rowcac from v$rowcache;
select 100*(cur.value + con.value – phys.value)/(cur.value + con.value) into bufcac
from v$sysstat cur,v$sysstat con,v$sysstat phys,v$statname ncu,v$statname nco,v$statname nph
where cur.statistic# = ncu.statistic#
and ncu.name = ‘db block gets’
and con.statistic# = nco.statistic#
and nco.name = ‘consistent gets’
and phys.statistic# = nph.statistic#
and nph.name = ‘physical reads’;
select value into spsize from v$parameter where name = ‘shared_pool_size’;
select value into blkbuf from v$parameter where name = ‘db_block_buffers’;
select value into logbuf from v$parameter where name = ‘log_buffer’;
total := libcac + rowcac + bufcac + redlog;
dbms_output.put_line(‘> SGA CACHE STATISTICS’);
dbms_output.put_line(‘> ********************’);
dbms_output.put_line(‘> SQL Cache Hit rate = ‘||libcac);
dbms_output.put_line(‘> Dict Cache Hit rate = ‘||rowcac);
dbms_output.put_line(‘> Buffer Cache Hit rate = ‘||bufcac);
dbms_output.put_line(‘> Redo Log space requests = ‘||redlog);
dbms_output.put_line(‘> Total SGA = ‘||total);
dbms_output.put_line(‘> ‘);
dbms_output.put_line(‘> INIT.ORA SETTING’);
dbms_output.put_line(‘> ****************’);
dbms_output.put_line(‘> Shared Pool Size = ‘||spsize||’ Bytes’);
dbms_output.put_line(‘> DB Block Buffer = ‘||blkbuf||’ Blocks’);
dbms_output.put_line(‘> Log Buffer = ‘||logbuf||’ Bytes’);
dbms_output.put_line(‘> ‘);
if
libcac < 99 then dbms_output.put_line('*** HINT: Library Cache too low! Increase the Shared Pool Size.');
END IF;
if
rowcac < 85 then dbms_output.put_line('*** HINT: Row Cache too low! Increase the Shared Pool Size.');
END IF;
if
bufcac 100 then dbms_output.put_line(‘*** HINT: Log Buffer value is rather low!’);
END IF;
END;Atenciosamente,
Felipe Romeu Gregolewitsch.1 de abril de 2011 às 6:50 pm #98738leandrolbs
Participanteresult:
SGA CACHE STATISTICS
SQL Cache Hit rate = 98,52
Dict Cache Hit rate = 99,77
Buffer Cache Hit rate = 98,56
Redo Log space requests = 69618
Total SGA = 69914,85INIT.ORA SETTING
Shared Pool Size = 0 Bytes
DB Block Buffer = 0 Blocks
Log Buffer = 2895360 Bytes*** HINT: Library Cache too low! Increase the Shared Pool Size.
*** HINT: Log Buffer value is rather low!1 de abril de 2011 às 6:59 pm #98739leandrolbs
Participanterespondendo.. só tenho um schema. Apenas um owner com todo o sistema dentro dele.. e com 6 datafiles de 15gb.
1 de abril de 2011 às 6:59 pm #98740felipeg
ParticipanteAumente o seu log_buffer usando o comando alter system set
Me envie os resultados abaixo:
select group#, round(bytes/1024/1024,2) from v$log;
/
Show parameter sga
/
select * from v$resource_limit
/De qualquer forma colete as estatísticas desta base.
Atenciosamente,
Felipe Romeu Gregolewitsch.1 de abril de 2011 às 7:13 pm #98741leandrolbs
Participantefelipeg muitíssimo obrigado pela atenção.
1º
GROUP# ROUND(BYTES/1024/1024,2)
1 50
3 50
2 50
2º
SQL> Show parameter sgaNAME TYPE VALUE
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 584M
sga_target big integer 584MSQL>
3º
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
1 processes 34 38 300 300
2 sessions 37 42 335 335
3 enqueue_locks 19 41 4170 4170
4 enqueue_resources 19 19 1692 UNLIMITED
5 ges_procs 0 0 0 0
6 ges_ress 0 0 0 UNLIMITED
7 ges_locks 0 0 0 UNLIMITED
8 ges_cache_ress 0 0 0 UNLIMITED
9 ges_reg_msgs 0 0 0 UNLIMITED
10 ges_big_msgs 0 0 0 UNLIMITED
11 ges_rsv_msgs 0 0 0 0
12 gcs_resources 0 0 0 0
13 gcs_shadows 0 0 0 0
14 dml_locks 0 37 1472 UNLIMITED
15 temporary_table_locks 0 0 UNLIMITED UNLIMITED
16 transactions 1 10 368 UNLIMITED
17 branches 0 0 368 UNLIMITED
18 cmtcallbk 0 1 368 UNLIMITED
19 sort_segment_locks 0 1 UNLIMITED UNLIMITED
20 max_rollback_segments 17 17 368 65535
21 max_shared_servers 1 1 UNLIMITED UNLIMITED
22 parallel_max_servers 0 0 0 3600Print do 3º select.
1 de abril de 2011 às 7:58 pm #98742felipeg
ParticipanteVocê tem dois problemas sérios nessa instância
Pelo tamanho das bases que citou deve ser um banco com um volume de transções relativamente alto certo?
Com estas informações chegamos a duas conclusões
1 – Seu SGA é muito baixo aumente os valores utilizando o comando alter system set sga_max_size = M scope=spfile;
**Altere os valores da sga_max_size e sga_target
*** Antes de fazer qualquer alteração faça um backup do seu spfile com o comando create pfile=’diretórioinitINSTANCIA.ora’ from spfile;2 – Um outro gargalo muito importante é o seu redo log, aparentemente apenas 3 grupos não suportam o seu trabalho, este tipo de situação gera muita contenção para o tráfego dos dados (Log Buffer, Redo Log, Database Buffer), aumente o número de grupos e (forte recomendação) multiplexe os membros dos redo logs.
** O aumento de grupos diminui a frequencia de logswitches e checkpoints que o Oracle terá de dar pois o mesmo terá um espaço mais de redo para trabalhar.
** A multiplexação não é para performance e sim para segurança.Segue a documentação da Oracle para auxiliar no passo 2:
http://download.oracle.com/docs/cd/B193 … neredo.htmEsta é sua base de produção? Estes parâmetros estão muito subdimensionados, creio eu que a instância foi simplesmente criada na base no NEXT, NEXT, FINISH e isso é muito perigoso.
Atenciosamente,
Felipe Romeu Gregolewitsch.1 de abril de 2011 às 8:17 pm #98743leandrolbs
Participantefelipe, no horário de almoço tirei todos do sistema, reiniciei o banco, rodei as statiscs, aumentei o SGA e o log_buffer.
Connected to Oracle Database 10g Release 10.2.0.1.0
Connected as jrSQL> show parameter SGA;
NAME TYPE VALUE
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1200M
sga_target big integer 800MSQL> show parameter log_buffer;
NAME TYPE VALUE
log_buffer integer 7025152
SQL>
Não trabalhamos com ASM, e pelas pesquisas acho que isso ajudaria, recomenda ?
No banco tenho em torno de 65 usuarios, porem meu sistema é inteiro em storage procedure, pacotes… toda estrutura está no banco, aplicação mesmo só layout….
mais uma vez muitissimo obrigado pela ajuda.
1 de abril de 2011 às 8:20 pm #98744leandrolbs
Participantefelipe, respondendo a ultima sacada, não participei da instalação mais concerteza foi no next / next / next.
Sugere algo mais?
1 de abril de 2011 às 8:32 pm #98745felipeg
ParticipanteAumente também o seuSGA_TARGET, deixe que a instância trabalhe com o gerenciamento dessa memória.
No mais, por ora, as alterações que citei no último post devem ajudar.
Qualquer nova situação é só abrir um novo post e eu verifico, estou tentando ser mais ativo no fórum a partir de hoje.
Atenciosamente,
Felipe Romeu Gregolewitsch.1 de abril de 2011 às 8:56 pm #98746leandrolbs
ParticipanteFelipe, aumentei o SGA, e estou com mensagens de TNS.
Erro: ORA-12518
erro ORA-12518 : TNS:o listener não conseguiu distribuir conexão do cliente
Em pesquisa, achei comentario de que é necessário diminuir o SGA….
1 de abril de 2011 às 9:16 pm #98747felipeg
ParticipanteO erro ocorreu após aumentar qual dos parâmetros?
1 de abril de 2011 às 9:44 pm #98748leandrolbs
Participanteeu executei todos, conforme falado acima…
depois disso, quando o uso de memoria fisica foi crecendo de 400mb até 1,2gb a mensagem veio…
ja reiniciei o banco e o listenner, coloquei large_pool_size para 24M, e diminui o process para 250aparentemente está normal.. mas ainda não chegou no apse dos acessos;..
- Coleta de estatísticas com o comando:
-
AutorPosts
- Você deve fazer login para responder a este tópico.

