Olá Chiappa, O objetivo é estudar, bem como entender o por quê de alguns fatos que ocorrem com o plano de execução escolhido, como por exemplo a mensagem de alguns dias que relatava FTS em tabela com milhões de registros e uma coluna com baixa seletividade e esta com índice. Fui no site indicado, li um monte de coisas.
O argumento usado para usar FTS é que determinados blocos seriam lidos mais de uma vez. Ora, isto depende de como os blocos de índices são construidos. Por exemplo, se num bloco de índice as entradas (no nível de blocos folhas de índice) as linhas possuirem somente a CHAVE + ROWID, sim, concordo pois, caso a entrada dos dados fosse feita de maneira aleatória, com esta quantidade de linhas e supondo que nem todos os blocos estariam em buffer o oracle acabaria tendo que fazer leituras físicas em blocos lidos anteriormente. Mas imagine agora que nas linhas tivessemos a CHAVE + BLOCK# + ROWID. Simplesmente ele entraria na parte superior da árvore (raiz), encontraria o ponteiro para o próximo nível da árvore (níveis intermediários), e assim sucessivamente até chegar ao primeiro bloco folha do índice. A partir deste ponto, bastaria ele percorrer horizontalmente a cadeia de blocos folha do índice e não mais passaria pelo mesmo bloco duas vezes pois, as informações estão ordenadas no índice. Aí alguém poderia falar: Poxa, mas colocar mais uma informação no bloco de índice, isto gastará muito disco, a árvore ficaria maior, etc. etc. etc. Lembro que antigamente, a cadeia de caracter de maior tamanho era de 255bytes; os computadore 386 nasceram com disco de 40MByte; memória grande era 4MByte, clock era 33MHz; o número de registros que um SGBD conseguia armazenar era muito menor que hoje etc. Se aumentaram a quantidade de disco, memória, tamanho do bloco lógico do SO, tamanho do arquivo físico do SO, tamanho do string, etc. etc. etc, por que não alteraram a arquitetura do bloco para ter concatenado a chave não só o rowid bem como o block#. Respostas possíveis: 1) O time está ganhando, não vamos alterar isto! 2) Vamos ter que alterar o kernel do SGBD, o custo disto é imenso! 3) Não havia pensado nisto! 4) O profissional que construiu esta parte do SGBD saiu da empresa e ninguém tem coragem de meter a mão; 5) Nunca ninguém pediu isto! 6) Etc. Concluíndo: Mr., tudo bem que eu tenho que me adaptar ao funcionamento do banco, inclusive acho isto correto pois, senão, quem sai perdendo sou eu mesmo. Mas cá pra nós, é muito básico. Chega a ser bizarro! Daí eu ficar desconfiando sempre do resultado quando trabalhava em modo CHOOSE. O plano escolhido, não bate inúmeras vezes com o que eu imaginava pois na minha cabeça a estrutura de dados utilizada era algo mais inteligente. Veja que tem uma mensagem a respeito de um índice do tipo BITMAP circulando no forum. Eu fiz um comentário ali. Gostaria de colocar a questão em debate, pois inúmeras vezes vi em um monte de visões, se não me engano na própria sys, instruções fazendo uma serie de operações usando BITAND, DECODE sobre um campo, ou seja, o kernel ainda continua no "tempo do onça" (nem sei o que é isto, tenho 48 anos e lembro que minha avó usava isto quando se referia a algo muito velho!). Estas instruções são usadas para se testar flags dentro de tabelas e/ou visões no dicionário, se não me engano. Lembro também que a MICO-SOFT re-escreveu seu kernerl, por que a Oracle NÃO? Não querendo ser rude, acho que eles só mudam a COR DA CASCA, mas o gosto é sempre de MAÇA (ou outra fruta qualquer). Fico por aqui, e agradeça a quem teve a paciência de aturar mais um e-mail e-n-o-r-m-e, mas é por causa do meu apelido (Fabão) Abraços, Fabão Fábio Martinho de Almeida Em 02/12/05, jlchiappa<[EMAIL PROTECTED]> escreveu: > Bom, antes de responder, só observo que conhecimento do tipo é ** bem > ** além do que se precisa pra administrar um banco - pra administrar > só se precisa entender que o bloco tem um header, um trailer, o > espaço no "meio" desses dois é o espaço útil, e esse espaço é > controlado pelo PCTFREE/PCTUSED, sabendo isso tá mais que bom pra > administrar... > Assim, imagino que o seu objetivo é enriquecimento de conhecimento, > com isso em mente a resposta : > > pra blocos de dados vc pode usar os textos : > > "A Close Look at Oracle8/8i Data Block Internals", de Dan Hotka > metalink Note:1061465.6 How To Determine The Block Header Size > metalink Note:10640.1 Extent and Block Space Calculation and Usage > in V7-V9 Databases > > > pra blocos de índices : > > "Geeky Internal Stuff: Block & Index Internals", de Dan Hotka > metalink Note:30405.1 How Btree Indexes Are Maintained > > ==> Para internals de índices, a dica principal, porém, é pesquisar > no site http://www.jlcomp.demon.co.uk/ , o autor tem uns textos ** > excelentes ** sobre formatos & estruturas de índices no bd Oracle. > > > Logicamente, itens internos do tipo ** mudam ** a cada versão, por > isso mesmo são absolutamente não-documentados, então pra vc confirmar > a informação na sua versão, e também pra estudar, vc ** VAI ** querer > fazer dumps dos seus blocos, no mesmo site acima indicado procurando > pela palavra-chave DUMP vc vai achar toda a informação necessária. > > ==> Os autores citados também escrevem frequentemente nos newsgroups > Oracle, é outra fonte de informação riquíssima. > > []s > > Chiappa > > > OBS : os papers acima citados eu peguei e li em sites especializados > em Oracle, mas como estou com acesso à internet restrito neste > momento, não pude fazer a pesquisa deles pra vc, mas até aí google é > seu amigo... > > > --- Em oracle_br@yahoogrupos.com.br, falmeida <[EMAIL PROTECTED]> escreveu > > Olá pessoal, > > > > Com objetivo de conhecer e estudar a implementação física da > estrutura > > de dados do Oracle, gostaria de saber se alguém tem, sabe onde tem > ou > > onde podemos encontrar uma documentação minuciosa da estrutura de > > blocos de dísco Oracle (preferencialmente 8i ou 9i). Seja de um > bloco > > de dados ou índice (dos mais variados tipos). Ou seja gostaria de > > saber como é o HEADER para cada tipo de bloco (DADOS, RAIZ, > > INTERMEDIÁRIO, FOLHA) e o conteúdo específico deles (como são > > armazenadas as informações bem como no caso dos índices os > ponteiros). > > > > Desde já agradeço, > > > > Fabão. > > -- > > Fábio Martinho de Almeida > > Niterói-RJ-Brasil > > > > > -------------------------------------------------------------------------------------------------------------------------- > Atenção! As mensagens deste grupo são de acesso público e de inteira > responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > --------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________ > Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423 > Links do Yahoo! Grupos > > > > > > > > > -- Fábio Martinho de Almeida Niterói-RJ-Brasil -------------------------------------------------------------------------------------------------------------------------- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________ Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423 Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html