Re: [oracle_br] Re: Concelho com LOBs

2011-08-09 Por tôpico Anderson Araujo de Oliveira
E ai Chiappa, blz,
 
Entao, para comecar o meu desespero, eu estou em um jornal cobrindo as ferias 
de outro DBA, e os caras da aplicação e gerente pediram para eu fazer essas 
analises de performance pois eu cai na besteira de resolver um problema que o 
outro DBA tinha deixado logo no primeiro dia, portanto:
1 - Infelizmente eu nao tenho tempo de testar
2 - Eu tenho 2 semanas para fazer algumas sugestoes de performance, hehehehehe
Sobre as imagens, os fotografos fazem upgrade das fotos para o sistema, e 
durante o dia, editores (da materia) e editores (graficos) solicitam para o 
banco essas imagens para fazer tratamentos ou adicionar em suas materias
O que eu fiz, de cara, pois estava desabilitado foi configurar o CACHE que 
estava desabilitado (com 100GB de RAM e eles nao estavam fazendo cache dos 
lobs), o LOGGING já estava desligado. Sobre o PCTVERSION estava com o padrão 
(10%), já anotei para zerar esse parametro ou pelo menos diminuir para 5%, a 
sua ideia da tabela contendo os dados de consulta e o blob estava certa, e sim, 
eles estao em tablespaces diferentes e o IN_ROW esta disable, alem disso os 
LOBS estao separados via partition gerenciados pela aplicacao
Vou dar uma olhada na nota que vc enviou, vou procurar alguma dica e ver quais 
sugestoes adicionais posso dar.
 
Vlw pela dica
 

De: José Laurindo 
Para: oracle_br@yahoogrupos.com.br
Enviadas: Terça-feira, 9 de Agosto de 2011 1:23
Assunto: [oracle_br] Re: Concelho com LOBs


  
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 

[oracle_br] Re: Concelho com LOBs

2011-08-08 Por tôpico José Laurindo
  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