- This topic has 5 replies, 4 voices, and was last updated 10 years, 1 month ago by caadecarvalho.
-
AuthorPosts
-
4 de setembro de 2014 at 3:48 pm #106925Thiago Duarte AzadinhoParticipant
Pessoal,
Precisamos fazer uma carga via insert num banco oracle que esta em noarchivelog, pensei na alternativa(uma das!!) de colocar as tabelas em modo nologging e depois da carga concluida, volta-las para logging, teria algum ganho de tempo ja que o banco esta em noarchivelog? (Que foi uma outra opção encontrada)
Obrigado.
4 de setembro de 2014 at 5:01 pm #106927Douglas Paiva de SousaParticipantEm primeiro lugar, eu te aconselho a colocar o banco em modo archive, embora ele não venha com isso habilitado por default, não há nenhuma razão para utilizar-se do banco neste modo, você não ganha nada em performance e menos ainda em segurança, pois perde a capacidade de ter backups HOT usar tecnologias de flashback entre outros.
Já com relação ao esse seu processo de insert massivo te aconselho a faze-lo utilizando BULK COLLECT, dá uma olhada neste artigo, eu já utilizei isso na prática e funciona bem e é performático.
http://www.oracle-base.com/articles/9i/bulk-binds-and-record-processing-9i.php
Att,
Douglas Paiva de Sousa
douglas.paiva@oradata.com.br
http://www.oradata.com.br4 de setembro de 2014 at 6:20 pm #106930rmanParticipant@Thiago Duarte Azadinho
Se isso for uma solução pontual de manutenção, em outras palavras, isso não for uma funcionalidade de sistema, e que não precisar ser automatizado, utilize o SQL LOADER para fazer a carga.
4 de setembro de 2014 at 9:29 pm #106933Thiago Duarte AzadinhoParticipant@rman
Desculpa mas acho que me expressei mal, na verdade quando disse carga não seria de uma arquivo externo, então acho que o Loader não rola, seriam de tabelas ja existentes no banco e que seriam tratados dados e feitos inserts massivos em outras tabelas, porém um trabalho unico e pontual, uma manutenção. Dai a idéia do nologging, tiramos o banco de archive somente para ajudar na performance e depois de feito o trabalho voltariamos o archive. Será que se colocarmos essas tabelas em nologging ajudaria mais na performance?
Obrigado.
4 de setembro de 2014 at 10:50 pm #106935rmanParticipant@Thiago Duarte Azadinho
Creio que o SQL Loader ainda será muito mais rápido do que qualquer bloco de INSERT. Além do mais, é possível fazer a carga por direct path.
Segue documentação oficial:
http://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_concepts.htm#SUTIL994
Quantos registros tem a tabela que vai receber a carga?
Quantos registros tem a carga?
Quanto tempo leva a carga hoje sem fazer nenhuma otimização?
Se realmente o tempo hoje é absurdo, e você ainda precisa baixar o tempo de carga, você pode desabilitar as constraints de FK e remover os INDEXES, e recria-los depois da carga.
Faça um arquivo no formato do SQL LOADER e depois faça a importação.
Alterar o DATABASE para NOARCHIVELOG para diminuir o tempo de carga creio que não seja motivo suficiente para ser fazer. Durante o processo de carga o seu DATABASE está desprotegido.
26 de setembro de 2014 at 6:22 am #107002caadecarvalhoParticipant@Thiago Duarte Azadinho,
Utilize NOLOGGING nas tabelas e mantenha o banco em NOARCHIVELOG durante a carga, entenda que esta recomendação de manter o banco neste estado deverá permanecer apenas durante a carga. Por vias de recuperabilidade, mantenha o banco em modo ARCHIVE.
Se a carga é a partir de uma tabela, faça-a com INSERT AS SELECT usando o hint APPEND para utilizar de DIRECT PATH e, se o hardware permitir, habilite paralelismo para DML na sessão. Desabilite os índices e constraints e habilite tudo no final da carga.
Entenda que o modo NOARCHIVELOG apenas trará beneficio perceptível se você estiver efetuando uma carga massiva no SGBD, pois não haverá I/O para gerar os archived logs, os checkpoints nos controlfiles diminuem, e etc.
Abraços.
-
AuthorPosts
- You must be logged in to reply to this topic.