Muito obrigado pelas respostas!!

Em 14 de janeiro de 2014 17:55, <jlchia...@yahoo.com.br> escreveu:

>
>
>  Bom, faz tempo que "milh€ ¢Ãµes de registros" deixou de ser algo extremo
> am hardware de produ€ ¢Ã§Ã£o, enterprise-class, mas de qquer maneira, eu
> penso nas coisas de sempre, ie :
>
>  a) SE o teu servidor tiver capacidade sobrando (ie, mem€ ¢Ã³ria, banda de
> I/O, CPU, etc) ainda n€ ¢Ã£o usada e dispon€ ¢Ã­vel, vc pode fazer a query
> em paralelo : isso implica que "sess€ ¢Ãµes escravas" ser€ ¢Ã£o abertas e
> alocadas ao mesmo tempo, cada uma lendo um pedacinho da "tabelona" ....
> Veja a Documenta€ ¢Ã§Ã£o do RDBMS (especialmente o manual de Concepts e o
> DW Guide da tua vers€ ¢Ã£o) para conceitos, sintaxes e alguns exemplos, e
> sites de refer€ ¢Ãªncia como http://oracledoug.com/px.html e
> https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:39946845137685para
>  mais detalhes...
>  S€ ¢Ã³ REPITO : vc s€ ¢Ã³ pode pensar nisso ** SE ** realmente vc tem a
> capacidade sobrando no servidor : caso hoje ele j€ ¢Ã¡ esteja no gargalo,
> Muito Provavelmente n€ ¢Ã£o vai haver capacidade de I/O, poder de CPU e
> mem€ ¢Ã³ria livre para fazer frente € ¢Ã  n sess€ ¢Ãµes escravas "atacando"
> ao mesmo tempo...
>
>  b) se assegurar que o sistema operacional e o I/O est€ ¢Ã¡ setado para a
> melhor performance poss€ ¢Ã­vel : por exemplo, € ¢Ã© CR€ ¢Ã’­TICO que o
> ambiente permita I/O As€ ¢Ã­ncrono (Asynchronous I/O) e (via de regra)
> Direct I/O  : Asynch significa que haver€ ¢Ã¡ m€ ¢Ãºltiplos I/Os
> simult€ ¢Ã¢noes, ie , os pr€ ¢Ã³ximos I/Os que sejam independentes daquele
> em execu€ ¢Ã§Ã£o no momento N€ ¢Ã’£O PRECISAM ficar esperando que o atual
> termine... Isso € ¢Ã© IMPRESCIND€ ¢Ã’­VEL em opera€ ¢Ã§Ãµes de full table
> scan que seja usado paralelismo, ajuda em muito via de regra paraque as
> sess€ ¢Ãµes escravas n€ ¢Ã£o fiquem esperando umas pelas outras...
>    J€ ¢Ã¡ o Direct I/O significa que os dados lidos s€ ¢Ã£o enviados
> diretamente para o RDBMS, que j€ ¢Ã¡ tem buffers e caches Pr€ ¢Ã³prios,
> n€ ¢Ã£o se perdendo tempo em se fazer o Sistema Operacional copiar o que
> foi lido para os buffers/caches de sistema operacional.... Via de regra
> esse setting € ¢Ã© Positivo para a performance...
>   alguns ajustes do sub-sistema de I/O (como striping size, balanceamento
> de discos, etc) podem tamb€ ¢Ã©m influenciar se vc est€ ¢Ã¡ usando um
> storage de discos : isso € ¢Ã© algo a se alinhar com os sysadmins e time de
> storage
>
>  c)   n€ ¢Ã£o com se assegurar que o armazenamento interno est€ ¢Ã¡ OK, e
> que as configs de DB est€ ¢Ã£o apropriadas : por exemplo, o RDBMS ao fazer
> um full-table scan l€ ¢Ãª uma por€ ¢Ã§Ã£o de blocos cont€ ¢Ã­guos, o
> chamado EXTENT : se a tabela tiver sido criada com extents muito
> pequenos/consistentemente menores do que o m€ ¢Ã¡ximo de bytes que o
> sistema operacional pode ler, OU se o tamanho do extent n€ ¢Ã£o for um
> m€ ¢Ãºltiplo exato do tamanho m€ ¢Ã¡ximo de I/O do sistema operacional, ao
> inv€ ¢Ã©s de um I/O ser€ ¢Ã£o necess€ ¢Ã¡rios dois para ler o mesmo
> extent.... Outros pontos, ainda dentro do database :
>    - pode valer a pena (via ALTER SESSION) setar temporariamente o
> par€ ¢Ã¢metro DB_FILE_MULTIBLOCK_READ_COUNT para um n€ ¢Ãºmero de blocos
> que se equipare ao m€ ¢Ã¡ximo I/O do sistema operacional
>    - vc ** TEM ** que garantir que os dados da tal tabela est€ ¢Ã£o
> gravados em extents com o ** m€ ¢Ã­nimo poss€ ¢Ã­vel ** de espa€ ¢Ã§o em
> branco e/ou blocos alocados mas n€ ¢Ã£o usados - o objetivo aqui € ¢Ã©,
> mais uma vez, diminuir ao m€ ¢Ã¡ximo a qtdade de blocos (e portanto a
> qtdade de I/Os) necess€ ¢Ã¡ria para se recuperar a informa€ ¢Ã§Ã£o...
>     E que fique claro : blocos com espa€ ¢Ã§o em branco e/ou n€ ¢Ã£o
> usados podem resultar tanto das op€ ¢Ã§Ãµes de controle de armazenamento da
> tabela (exemplo, o porcentual de espa€ ¢Ã§o que o RDBMS reserva para
> futuros UPDATEs) quanto de DMLs , como DELETEs que removeram os dados mas o
> espa€ ¢Ã§o n€ ¢Ã£o foi reusado, ou de opera€ ¢Ã§Ãµes de APPEND de dados ...
>
>  d) vc VAI se assegurar, dentro do poss€ ¢Ã­vel, que a rotina ser€ ¢Ã¡
> agendada para uma data/hora em que n€ ¢Ã£o est€ ¢Ã£o sendo feitos grandes
> DMLs na tal tabela grande : a quest€ ¢Ã£o € ¢Ã© que, para se assegurar que
> n€ ¢Ã£o h€ ¢Ã¡ leitura suja, de dados n€ ¢Ã£o-comitados, durante DMLs a
> informa€ ¢Ã§Ã£o consistente € ¢Ã© armazenada em undo blocks, que significam
> mais I/Os extras
>
>  []s
>
>    Chiappa
>
>



--
Att,
Bruno N. Barboza

Responder a