[oracle_br] Re: URGENTE - SGA x PGA
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
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
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