[oracle_br] Re: URGENTE - SGA x PGA

2013-02-05 Por tôpico ederson2001br
Alô Samuel,

Antes de pensar em mudar os parâmetros do banco, informe a origem destes 
20milhões de registros, pois vc diz apenas que está realizando carga.

O seu script lê arquivo externo ou você está lendo de outra tabela, através de 
um db_link, ou é uma tabela do schema com join entre outras tabelas?

Qual ferramenta vc usa para rodar este seu script PL/SQL, ou é um job no banco?

Caso seja um arquivo externo, tipo TXT/CSV, considere usar external table, 
basta criar apontando para o arquivo, que já está disponível para select, sem 
precisar fazer load.

Outra opção intermediária (sem conhecer suas configurações): use SQLLOADER para 
subir um arquivo para o banco (depois faça o tratamento com rotinas PL/SQL).

Explique melhor o ambiente, senão será chute no escuro.


Ederson Elias
DBA Oracle
http://br.linkedin.com/pub/ederson-elias/24/8b/8b0



--- Em oracle_br@yahoogrupos.com.br, Samuel Santos  escreveu

 Estamos realizando várias cargas de dados em através de script PL/SQL. A 
 quantidade de registro difere entre 5Milhões a 20Milhões de registros.
 Sendo assim temos neste exato momento uma tabela de despesa na qual é 
 MOSTRUOSA, já a destrinchamos o máximo que podia, utilizamos Hints: 
 Parlelismo, APPEND... mas ainda sim ja tem no mínimo 3horas dessa carga. 
 
 Gostaria de uma ajuda de vcs para sugerir\dica do que podemos alterar nos 
 parâmetros do SGBD, de modo que nos auxilie ainda mais nestas cargas. Estamos 
 analisando query a query, através do Explain...mas ainda sim precisamos de 
 mais melhorias...
  
 
 
 
  De: Fabricio Pedroso Jorge 
 Para: oracle_br@yahoogrupos.com.br 
 Enviadas: Terça-feira, 5 de Fevereiro de 2013 17:06
 Assunto: Re: [oracle_br] URGENTE - SGA x PGA
  
 Tira um AWR em um período de carga (umas 2 horas) e de um período sem carga
 (também de umas duas horas)
 
 Veja as seções dos memory advisors pra ver se há a necessidade de mudança
 nos parâmetros de memória.
 
 Mas o principal é: Qual é esse problema crítico?
 
 Em 5 de fevereiro de 2013 17:03, Samuel Santos
  escreveu:
 
  **
 
 
  Pessoal, Boa Tarde!
 
  Peço-lhes uma ajuda para solucionar um problema crítico de carga de dados
  no servidor de um cliente, segue as características do ambiente:
 
  Modelo: DELL R710  - 2Us
  S/T: B3Q82R1
  2 Processadores Six-Core 2,40 GHZ
  Memória 144G
  2 HDs de 1T
  Servidor não possui placa HBA
  Sistema Operacional: Red Hat 5.8 Enterprise 64B
  Oracle Enterprise 11.2.0.3
 
 
  O que vc's sugerem para alteração\ajuste nos paramentros de SGA, PGA, etc?
 
  SQL  show parameter target
 
  NAME                                 TYPE        VALUE
   ---
  --
  archive_lag_target                   integer     0
  db_flashback_retention_target        integer     1440
  fast_start_io_target                 integer     0
  fast_start_mttr_target               integer     0
  memory_max_target                    big integer 0
  memory_target                        big integer 0
  parallel_servers_target              integer     192
  pga_aggregate_target                 big integer 29842M
  sga_target                           big integer 89600M
 
  [As partes desta mensagem que não continham texto foram removidas]
 
   
 
 
 
 
 -- 
 ***Fabrício Pedroso Jorge.*
 
 Administrador de Banco de Dados
 Oracle 11g Certified SQL Expert
 Oracle 11g Certified Associate
 Oracle 11g Certified Professional
 Linux Professional Institute Certified Level I (LPIC-I)
 certificacaodb.com.br
 
 *Resumo Profissional:*
 http://br.linkedin.com/in/fabriciojorge
 
 *Contatos:*
 + 55 91 88991116 /
 + 55 11 82223651
 fpjbito@...
 
 
 [As partes desta mensagem que não continham texto foram removidas]
 
 
 
 
 
 --
 Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
 responsabilidade de seus remetentes.
 Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
 --
 Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure 
 » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
 http://www.oraclebr.com.br/  
 
  Links do Yahoo! Grupos
 
 
 
 
 
 
 [As partes desta mensagem que não continham texto foram removidas]





[oracle_br] Re: URGENTE - SGA x PGA

2013-02-05 Por tôpico J. Laurindo Chiappa
  A grande questão é que essa administração que o Oracle faz ** não ** é de 
graça em termos de performance, já que implica em Movimentação/expansão de 
caches e áreas de memória de maneira relativamente constante se for um ambiente 
com carga variável, que às vezes precisa de mais RAM para cache de dados, às 
vezes para PGA, isso e aquilo, com consequente aumento de consumo de CPU para 
se controlar/operacionalizar isso... Isso sem contar que essa feature é 
relativamente recente, se vc buscar no metalink vai achar uns bugzinhos 
referentes a ela... 
   No caso do colega, embora ele Absolutamente não diga quanto desse montão de 
memória dele está livre para a instância Oracle em questão, pela quantidade de 
RAM eu Imagino que não seria difícil separar e dar uma generosa porção FIXA 
para a SGA e para PGA (digamos, umas poucas dezenas de GB) e ir monitorando o 
consumo, acho meio arriscado ir direto para AMM sem ter passado por essa fase 
de monitoração...
   
   Samuel, mais especificamente sobre o que vc perguntou : veja lá que é MUITO 
DIFÍCIL (mas MMITO, mas MUITO MESMO) que má-performance seja/esteja sendo 
causada por quantidade de caches e alocação de memória em geral, okdoc ? 
ESPECIALMENTE quando vc diz que é carga de dados - veja vc, carga normalmente 
implica em INSERTs de dados novos, que (óbvio ululante) Não Estavam em cache 
(estão sendo carregados agora, for God´s sake!) - COMO É QUE VC ESPERA que 
mexidas em caches (SGA=caches internos em geral) toquem Qualquer Apito na 
performance de uma Carga ?? Sacou ???
Então nós vamos falar um pouquinho sobre alocação de memória, mas é 
MINÚSCULA a chance de que isso te ajude com o problema atual : vc parece estar 
encarando o problema de trás para a frente, querendo fazer tuning no banco ao 
invés de na aplicação, que em 99% dos casos é aonde o problema de performance 
reside... Não tem jeito, vc vai ter que rever SQLs, encontrar as rotinas mais 
demoradas/que causam mais WAITs, ver se outros SQLs afora os da carga estão 
interferindo no ambiente/consumindo recursos que seriam necessários para a 
carga, vai ter que verificar as possibilidades de alteração em estruturas 
físicas (tais como usar INSERTS em DIRECT MODE de modo a gerar o mínimo de undo 
e de redo, nunca usar inserção row-by-row, eventualmente desligar índices e/ou 
constraints durante a carga, usar  abusar de GTTs e external tables, partition 
exchange se for tabelas particionadas sendo carregadas), coisas do tipo : são 
ESSAS coisas que vão te dar o maior retorno, não ficar mexendo em caches e 
picuinhas do tipo...

Isso posto, a minha Recomendação em cima da config que vc nos mostra é : 

  - usar HUGE PAGES : quanto se fala de SGA larga, o fato de vc Evitar o 
eventual roubo de páginas/redirecionamento que o Linux faz por si só via de 
regra já Justifica huge pages
  
  - diminuir SEVERAMENTE a SGA (não só para ter certeza que sobra RAM para os 
outros usos
  
  - diminuir MUITO a qtdade de parallel_servers, ela está ACIMA de qualquer 
noção sensata dada a quantidade de processadores e cores que vc tem - a regra 
do dedão normalmente é coisa de 2 a quatro parallels para cada processador, vc 
pode permitir um pouco mais porque tem multiplos cores , mas não tanto como 192
  
  - se vc está em ter redo log files Realmente grandes (da ordem de dezenas de 
GBs cada um) para tentar evitar arquivamento constante

 coisas do tipo... REPITO, muito Certamente NENHUMA dessas configs por si só 
vão interferir seriamente na sua issue de performance, mas são configs 
razoáveis, plenamente defensáveis...

 []s
 
   Chiappa
   
  OBS : me preocupa o fato de vc ter apenas dois discos locais : isso é um 
ponto de gargalo para I/O em alta performance, já que não tem como vc espalhar 
os seus dados em múltiplos devices acessíveis ao mesmo tempo, que é o que um 
RAID faria... Isso pode vir a ser tornar um elemento Delimitador para a sua 
performance

--- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca  escreveu

 Porque vc não ativa o memory_target e deixa com que o Oracle se preocupe com 
 isso ? Já li alguns livros que a partir da versão 11G R2 o Oracle administra 
 as 2 memórias(SGA e PGA) muito melhor do que muito DBA expert por aí.
 
 
 
  De: Samuel Santos 
 Para: oracle_br  
 Enviadas: Terça-feira, 5 de Fevereiro de 2013 17:03
 Assunto: [oracle_br] URGENTE - SGA x PGA
  
 
   
 Pessoal, Boa Tarde!
 
 Peço-lhes uma ajuda para solucionar um problema crítico de carga de dados no 
 servidor de um cliente, segue as características do ambiente:
 
 Modelo: DELL R710  - 2Us
 S/T: B3Q82R1
 2 Processadores Six-Core 2,40 GHZ
 Memória 144G
 2 HDs de 1T 
 Servidor não possui placa HBA
 Sistema Operacional: Red Hat 5.8 Enterprise 64B
 Oracle Enterprise 11.2.0.3
 
  
 O que vc's sugerem para alteração\ajuste nos paramentros de SGA, PGA, etc?
 
 SQL  show parameter target
 
 NAME                                 TYPE        VALUE
 

[oracle_br] Re: URGENTE - SGA x PGA

2013-02-05 Por tôpico J. Laurindo Chiappa
  Comentando sobre o que vc diz da tal rotina, eu acrescentaria :
  
  a) vc SABE que o APPEND num INSERT só funciona SE, além da tabela-destino 
estar em NOLOGGING mode (e sem índices ativos, preferencialmente) SE O INSERT 
FOR DE MÚLTIPLAS LINHAS, ie :
  
INSERT /*+ APPEND */ intoi tabeladestino (SELECT que traz muitas linhas);

okdoc ? Usar o APPEND num comando tipo :

INSERT /*+ APPEND */ INTO tabela VALUES (valoresdesejados);

só te traz como resultado o desperdício de 13 toques no teclado, não 
adianta DE NADA, não serve DE NADA, sim ??

 b) como derivação de a) acima, será que vc está usando processamento 
row-by-row, tipo :
 
 for cursor in loop
   ...faz uns IFs e coisas do tipo...
INSERT INTO tabeladestino VALUES(valorescalculados);
end loop;

   == SE está, isso DIFICILMENTE vai ter boa performance , pois ao contrário 
de um :

  INSERT INTO tabela (select com as fontes de dados);

  processamento via cursor NÂO pode ser otimizado pelo CBO (ele só otimiza 
comandos SQLs completos), implica em MONTES de idas e vindas ao banco de dados, 
é tudo de ruim No máximo, se não der pra fazer a carga num INSERT só (ou 
num MERGE, enfim) , então PELO MENOS use BULK COLLECT e ARRAY PROCESSING... Ou 
ainda, ir juntando os registros a serem inseridos numa GTT e no fim da rotina 
se faz um 
  
  INSERT /* APPEND */ into tabeladestino (SELECT * FROm gtt);
  
  c) COMMIT só no final da rotina, claro, EVITANDO os WAITs relacionados a redo 
sync : provavelmente isso implica em se ter uma tablespace de UNDO gigantesca, 
mas be it...
  
  d) não entendi ainda que apito toca a tal tabela de despesa que é 
monstruosa : ela é a tabela-destino, aonde os dados vão ser inseridos, OU ela é 
a origem dos dados, aí vc tem que fazer uma consulta nela para extrair os dados 
a serem inseridos em oura ??
  SE a tal tabela monstro for a tabela a ser inserida, pode-se supor que o 
que está fazendo a carga demorar seja que a cada INSERT os índices estão sendo 
atualizados e as constraints checadas, implicando numa varredura da 
tabela-monstro inteira : se for isso, pode-se pensar em Particionamento, em ter 
constraints que só são checadas em tempo de COMMIT (ou mesmo desabilitadas e só 
 rehabilitadas no fim da carga), índices disabled...
  SE a tal tabela monstro na verdade contém os dados a serem lidos, 
processados e depois inseridos numa outra tabela-destino, aí o teu alvo é 
DIMINUIR FORTEMENTE a qtdade de blocos que precisam ser lidos na tabela 
monstro para se chegar aos dados : isso nos leva a pensar em Particionamento, 
em um índice SELETIVO (ie, um índice de função que indexe APENAS a porção de 
dados monstruosos que precisam ser lidos), coisas do tipo...
  
  []s
  
Chiappa


--- Em oracle_br@yahoogrupos.com.br, Samuel Santos  escreveu

 Estamos realizando várias cargas de dados em através de script PL/SQL. A 
 quantidade de registro difere entre 5Milhões a 20Milhões de registros.
 Sendo assim temos neste exato momento uma tabela de despesa na qual é 
 MOSTRUOSA, já a destrinchamos o máximo que podia, utilizamos Hints: 
 Parlelismo, APPEND... mas ainda sim ja tem no mínimo 3horas dessa carga. 
 
 Gostaria de uma ajuda de vcs para sugerir\dica do que podemos alterar nos 
 parâmetros do SGBD, de modo que nos auxilie ainda mais nestas cargas. Estamos 
 analisando query a query, através do Explain...mas ainda sim precisamos de 
 mais melhorias...
  
 
 
 
  De: Fabricio Pedroso Jorge 
 Para: oracle_br@yahoogrupos.com.br 
 Enviadas: Terça-feira, 5 de Fevereiro de 2013 17:06
 Assunto: Re: [oracle_br] URGENTE - SGA x PGA
  
 Tira um AWR em um período de carga (umas 2 horas) e de um período sem carga
 (também de umas duas horas)
 
 Veja as seções dos memory advisors pra ver se há a necessidade de mudança
 nos parâmetros de memória.
 
 Mas o principal é: Qual é esse problema crítico?
 
 Em 5 de fevereiro de 2013 17:03, Samuel Santos
  escreveu:
 
  **
 
 
  Pessoal, Boa Tarde!
 
  Peço-lhes uma ajuda para solucionar um problema crítico de carga de dados
  no servidor de um cliente, segue as características do ambiente:
 
  Modelo: DELL R710  - 2Us
  S/T: B3Q82R1
  2 Processadores Six-Core 2,40 GHZ
  Memória 144G
  2 HDs de 1T
  Servidor não possui placa HBA
  Sistema Operacional: Red Hat 5.8 Enterprise 64B
  Oracle Enterprise 11.2.0.3
 
 
  O que vc's sugerem para alteração\ajuste nos paramentros de SGA, PGA, etc?
 
  SQL  show parameter target
 
  NAME                                 TYPE        VALUE
   ---
  --
  archive_lag_target                   integer     0
  db_flashback_retention_target        integer     1440
  fast_start_io_target                 integer     0
  fast_start_mttr_target               integer     0
  memory_max_target                    big integer 0
  memory_target                        big integer 0
  parallel_servers_target