Oi friendão, blz, tudoi na tranquila ? Intão, vou aproveitar a sua msg e 
extender um pouco o assunto, falando sobre mais do que o 

CHUNK - provavelmente várias coisas vc já fez, ou talvez não se apliquem no seu 
ambiente, mas vamos lá...
 Primeiro de tudo, sendo um BLOB vc certamente vai ter que o ler inteiro, na 
íntegra (não há uma maneira fácil de indexar, de fazer 

"substring" / busca parcial de  um binário) , então é Crucialmente Crucial que 
vc faça o MENOS POSSÍVEL de I/O, o que (entre outras 

coisa) quando falamos de gráficos IMPLICA em usar um formato de gravação 
Compactado : entenda, eu NÂO estou falando de zipar o 

conteúdo antes de uplodear pro banco, eu estou falando de Já Gravar a imagem 
compactada/otimizada : por exemplo, recentemente eu 

escaneei alguns documentos, o software de scanner criava .TIF e dava coisa de 
vários Mbytes, abri o arquivo no GIMP, salvei com a 

mesma extensão (mas especificando compressão LZW, que é um protocolo que até o 
retardadinho do Paint no Windows entende) e pluft, o 

arquivo passou para dezenas de Kbytes, negócio impressionante, e isso ** SEM ** 
perda de qualidade e absolutamente SEM sacrificar a 

compatibilidade - como eu disse, mesmo especificando compressão, o Paint abre, 
o Office abre, o Croel abrem, sem probs... Aí vc vai 

dizer : mas Chiappa, eu como DBA é que tenho que ficar cutucando esses coisas, 
que os Desenvolvedores já deveriam saber e pensar 

antes ??? A resposta infelizmente é SIM, por incrível que pareça a esmagadora 
maioria dos desenvolvedores que vi não bota o tico e o 

teco pra trabalhar, absolutamente parece pensar que o disco é ilimitado, se vc 
esperar que eles pensem em rotina de limpeza de 

dados, em otimização do espaço, em Segurança da informação, em Crash recover, 
bem provável que vc não tenha retorno, então toca nós, 

como DBAs, ficar tocando nesses assuntos, e pelo jeito imagem de 400 Mb Não 
parece estar compactada/otimizada...

 Continuando, antes de entrar no database, outra pergunta : exatamente o que vc 
está usando como I/O , são raw devices, volumes 

gerenciados (com ASM ou com volume managers de terceiros) ou é filesystem (seja 
filesystem linux nativo, seja filesystem de 

terceiros , tipo Veritas VFX) ?? A questão é que é Crítico que vc ESTEJA 
fazendo I/O Async (já que Imagino que vc tem um hardware de 

I/O enterprise-class, capaz de atender a múltiplos I/Os simultãneos) , E no seu 
caso específico, já que vc está montando um cache 

grande pro Oracle, provavelmente deve valer a pena fazer Direct I/O, ie, 
bypassar o cache do Linux : 

http://www.puschitz.com/TuningLinuxForOracle.shtml#CheckingAsynchronousIOUsage 
e http://docs.redhat.com/docs/en-

US/Red_Hat_Enterprise_Linux/5/html/Oracle_Tuning_Guide/RHELTuningandOptimizationforOracleV11.pdf
 são refs a respeito ...

 Aí, entrando no database : antes de mais nada, tudo que vou falar é discutido 
na nota metalink "Master Note - RDBMS Large Objects (LOBs)", Doc ID 1268771.1 , 
e nos links dela, ela será a tua ref principal...
 De cara, seguinte : já que o maior espaço vai ser usado pelos BLOBs (vc não 
diz mas eu Imagino que vc tenha no registro lógico apenas um ID como chave de 
busca, e a info do BLOB), aí vale a pena vc ter tablespace SEPARADA para o LOB 
SEGMENT (o BLOB no seu caso) - isso não vai te dar boost de performance em si 
mas dá umas facilidades administrativas, como por exemplo poder 

especificar cláusula de STORAGE diferenciada, tamanhos de extents, coisas 
assim...  Eu Imagino também que a sua aplicação deve ser 

primariamente INSERT-only (imagino que essas tais imagens correspondem a 
digitalizações de documentos, e/ou fotos de funcionários, 

coisas assim, que mudam muito pouco ou nada), então o meu primeiro conselho é 
vc ter os LOBs (tanto o LOB SEGMENT quanto o LOB INDEX)  em tablespace 
separadas - isso NÂO vai por si só interferir diretamente em performance, MAS 
vai te dar facilidades administrativas, tipo poder mensurar I/Os facilmente com 
a V$FILExx, poder fazer backup só dos LOBs.... 
  Como derivada do fato de vc ter LOBs provavelmente com pouca ou nenhuma 
alteração, coloque esses LOBs com PCTVERSION baixíssimo, vc já ganha algum 
espaço com isso ...
 Continuando, já que vc está no 11g eu diria pra vc testar SECUREFILES ao invés 
dos datafiles-padrão, diz a Oracle que tem algumas vantagens : Inclusive, o que 
vc pergunta (o CHUNK SIZE) vale principalmente para os datafiles "comuns", os 
tradicionais BASIC files, com SECUREFILEs eu usei que esse valor é usado mais 
como uma Recomendação, vc pode ter I/Os maiores ou menores que o CHUNK em 
securefiles... Eu pessoalmente usei muito pouco ainda pra poder ver alguma 
coisa, mas fica a idéia, faça testes bons, grandes, volumosos e cuidadosos 
(MEDINDO quantos I/Os foram feitos pra ler os mesmos dados com BASIC 
especificando um CHUNK de 1 bloco, de 2 blocos, de 4 blocos, de 8 blocos (que 
seriam os 64 Kb que vc está pensando) , versus com SECURE) ...
 Já que vc sabe que necessariamente teus LOBs vão ser grandes, diria pra vc 
criar a tablespace com extent size uniform de 4 Mb : isso é múltiplo direto do 
1 Mb que é o máximo de I/O na maioria dos sistemas, e 4 Mb nem é tão grande que 
permita muito espaço eventualmente não-usado, nem tão pequeno que crie centenas 
e centenas de milhares de extents... Eu não recomendo esse setting de 512 Mb 
que vc tem hoje como extent size, isso é MUITO grande, vc vai ter mais chances 
de eventuais white-spaces com um setting tão gigantesco...
 Outra : já que vc sabe que os LOBs sempre vão ser maiores que os 4kb de 
threshold, já crie os seus LOBs como out of line storage, aí na tablespace de 
"dados" vão ter só os poucos bytes dos IDs e alguma info relacionada... Essa 
tablespace pode ser ASSM e AUTOALLOCATE, creio...
 Logging : se possível (em casos como o seu, de informação carregada de arquivo 
e estática, que se preciso pode ser carregada de novo após crash,  normalmente 
é) eu recomendo que vc deixe em NOLOGGING o LOB, para permitir eventuais 
operações com diminuição de redo log : EVIDENTEMENTE, isso Tem que Ser 
combinado com o DBA, para que ele faça um backup imediatamente após as 
operações sem log, mas via de regra vale a pena em performance...

 Finalmente : falando especificamente sobre o CHUNK SIZE, não vejo grande risco 
de vc interferir em algo com o banco por si só : a única coisa, É Claro, é que 
vc vai testar DIREITINHO e medir como fica a performance : o trade-off é que 
quanto maior o CHUNK, certamente mais blocos vão ser alocados e lidos de uma só 
vez, com certeza tem um ponto aí onde o retorno diminui e vc passa a ter perda, 
mas IMHO vc acha isso é com teste mesmo, desconheço alguma "fórmula" pronta pra 
isso...

 []s

  Chiappa


--- Em oracle_br@yahoogrupos.com.br, Anderson Araujo de Oliveira 
<a13liveira@...> escreveu
>
> Bom dia,
>  
> Estou analisando um banco de dados que está apresentando Lentidão com leitura 
> e gravação de LOBs (Imagens, em geral JPG), e queria alguns concelhos, segue 
> informações do Banco:
> - Oracle 11.2.0.2
> - RHEL 5
> - StandAlone
> - CPU 64
> - RAM 256GB
> - Tamanho médio das imagens 400M
> - Initial do Segmento de LOB 1G
> - Next do Segmento de LOB 512M
> - SGA 100G
> - PGA 4,8G
> - Database Block 8K
> - Chunk 8K
> - DB_FILE_MULTIBLOCK_READ_COUNT 128 (Não sei se ajuda, mas de qqr forma, 
> pensei cheguei a pensar em mudar o CHUNK para a quantidade de blocos desse 
> parametro, mas quando vi quantos blocos estavam configurados achei que 
> poderia ser muito)
>  
> Minha intenção inicial é aumentar o CHUNK para 64K, mas como nunca trabalhei 
> com performance de LOBs estou com medo de impactar negativamente o banco, 
> alguem te experiencia com isso, sabe dizer os riscos. Detalhe o objetivo 
> principal dessa base é armazenar e distribuir imagens
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a