Re: RES: [oracle_br] Segmento x Datafile
-- --- -- -- > > --- -- > > TAB_TESTE TABLE TS_LMT_UNIF 0 28 9 > > 1048576 128 > > TAB_TESTE TABLE TS_LMT_UNIF 1 26 9 > > 1048576 128 > > > > [EMAIL PROTECTED]:SQL>select * from dba_data_files where > > tablespace_name='TS_LMT_UNIF'; > > > > FILE_NAME FILE_ID TABLESPACE_NAME > > USER_BYTES USER_BLOCKS > > --- --- -- - - > > - --- > > /u2/oradata/BDDEV/dados/ts_lmt_unif_01.dbf 26 TS_LMT_UNIF > > 104857600 12800 > > /u1/ts_lmt_unif_02.dbf 28 TS_LMT_UNIF > > 104857600 12800 > > > > [EMAIL PROTECTED]:SQL>insert /*+ APPEND */ into TAB_TESTE (select * from > > dba_objects); > > > > 10537 linhas criadas. > > > > [EMAIL PROTECTED]:SQL>commit; > > > > Validação completa. > > > > [EMAIL PROTECTED]:SQL>select * from dba_extents where > > tablespace_name='TS_LMT_UNIF'; > > > > SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID > > BLOCK_ID BYTES > > --- - --- -- -- > > --- > > TAB_TESTE TABLE TS_LMT_UNIF 0 28 9 > > 1048576 > > TAB_TESTE TABLE TS_LMT_UNIF 1 26 9 > > 1048576 > > TAB_TESTE TABLE TS_LMT_UNIF 2 28 137 > > 1048576 > > > > [EMAIL PROTECTED]:SQL>insert /*+ APPEND */ into TAB_TESTE (select * from > > dba_objects); > > > > 10537 linhas criadas. > > > > [EMAIL PROTECTED]:SQL>commit; > > > > Validação completa. > > > > [EMAIL PROTECTED]:SQL>select * from dba_extents where > > tablespace_name='TS_LMT_UNIF'; > > > > SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID > > BLOCK_ID BYTES > > --- - --- -- -- > > --- > > TAB_TESTE TABLE TS_LMT_UNIF 0 28 9 > > 1048576 > > TAB_TESTE TABLE TS_LMT_UNIF 1 26 9 > > 1048576 > > TAB_TESTE TABLE TS_LMT_UNIF 2 28 137 > > 1048576 > > TAB_TESTE TABLE TS_LMT_UNIF 3 26 137 > > 1048576 > > > > ===>> ou seja, com tablespaces LMT uniform-size, basta vc criar os > > datafiles do tamanho final desejado, na ordem desejada nos discos > > desejados, que AUTOMATICAMENTE a alocação inicial será round- robin, > > ie, vai alocando um extent por vez em cada datafile, espalhando os > > extents portanto, que é o que vc quer. > > Lembro apenas que isso vale PARA A ALOCAÇÂO INICIAL, há os casos de : > > > > a) para UPDATEs, obviamente o I/O ** tem que ** ser feito no mesmo > > bloco aonde o(s) registro(s) já estava(m) > > > > e > > > > b) o espaço liberado por DELETEs necessariamente será usado cfrme > > for liberado - assim se for liberado um espaço no extent x do > > datafile y dum segmento, NECESSARIAMENTE o próximo insert não- append > > VAI USAR ESSE ESPAÇO, independente de "ordem" alguma, de qual foi o > > último datafile usado... > > > > []s > > > > Chiappa > > > > > > --- Em oracle_br@yahoogrupos.com.br > > <mailto:oracle_br%40yahoogrupos.com.br>, "Clayton Rocha" > > escreveu > > > > > > Entendo perfeitamente que ele divide e que temos ganho de > > performance caso > > > estejam em discos diferentes... > > > > > > > > > > > > A minha dúvida seria qual seria o critério que determina onde ele > > irá > > > salvar... Realmente acho que não vai ser possível alguém me > > explicar isso em > > > poucas linhas, mas, deixo uma outra pergunta: > > > > > > > > > > > > Existe algum material com explicações sobre esse assunto? É > > possível eu > > > entender essa tomada de decisões ou é algo que apenas devo saber > > que ele > > > divide, faz o melhor possível e ponto? > > > > > > > > > > > > Obrigado! > > > > > > > > > > > > Clayton Rocha > > > > > > > > > > > > De: oracle_br@yahoogrupos.com.br > > <mailto:oracle_br%40yahoogrupos.com.br> > > [mailto:oracle_br@yahoogrupos.com.br > > <mailto:oracle_br%40yahoogrupos.com.br>] Em > > > nome de Marcio Portes > > > Enviada em: segunda-feira, 23 de abril de 2007 17:45 > > > Para: oracle_br@yahoogrupos.com.br > > <mailto:oracle_br%40yahoogrupos.com.br> > > > Assunto: Re: [oracle_br] Segmento x Datafile > > > > > > > > > > > > Gros
Re: RES: [oracle_br] Segmento x Datafile
7;TS_LMT_UNIF'; > > SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID > BLOCK_ID BYTES > --- - --- > --- > TAB_TESTE TABLE TS_LMT_UNIF 0 28 9 > 1048576 > TAB_TESTE TABLE TS_LMT_UNIF 1 26 9 > 1048576 > TAB_TESTE TABLE TS_LMT_UNIF 2 28 137 > 1048576 > TAB_TESTE TABLE TS_LMT_UNIF 3 26 137 > 1048576 > > ===>> ou seja, com tablespaces LMT uniform-size, basta vc criar os > datafiles do tamanho final desejado, na ordem desejada nos discos > desejados, que AUTOMATICAMENTE a alocação inicial será round-robin, > ie, vai alocando um extent por vez em cada datafile, espalhando os > extents portanto, que é o que vc quer. > Lembro apenas que isso vale PARA A ALOCAÇÂO INICIAL, há os casos de : > > a) para UPDATEs, obviamente o I/O ** tem que ** ser feito no mesmo > bloco aonde o(s) registro(s) já estava(m) > > e > > b) o espaço liberado por DELETEs necessariamente será usado cfrme > for liberado - assim se for liberado um espaço no extent x do > datafile y dum segmento, NECESSARIAMENTE o próximo insert não-append > VAI USAR ESSE ESPAÇO, independente de "ordem" alguma, de qual foi o > último datafile usado... > > []s > > Chiappa > > > --- Em oracle_br@yahoogrupos.com.br > <mailto:oracle_br%40yahoogrupos.com.br>, "Clayton Rocha" > <[EMAIL PROTECTED]> escreveu > > > > Entendo perfeitamente que ele divide e que temos ganho de > performance caso > > estejam em discos diferentes... > > > > > > > > A minha dúvida seria qual seria o critério que determina onde ele > irá > > salvar... Realmente acho que não vai ser possível alguém me > explicar isso em > > poucas linhas, mas, deixo uma outra pergunta: > > > > > > > > Existe algum material com explicações sobre esse assunto? É > possível eu > > entender essa tomada de decisões ou é algo que apenas devo saber > que ele > > divide, faz o melhor possível e ponto? > > > > > > > > Obrigado! > > > > > > > > Clayton Rocha > > > > > > > > De: oracle_br@yahoogrupos.com.br > <mailto:oracle_br%40yahoogrupos.com.br> > [mailto:oracle_br@yahoogrupos.com.br > <mailto:oracle_br%40yahoogrupos.com.br>] Em > > nome de Marcio Portes > > Enviada em: segunda-feira, 23 de abril de 2007 17:45 > > Para: oracle_br@yahoogrupos.com.br > <mailto:oracle_br%40yahoogrupos.com.br> > > Assunto: Re: [oracle_br] Segmento x Datafile > > > > > > > > Grosso modo falando... Não é uma resposta para ser desenvolvida em 3 > > linhas... > > Porque ele divide a carga de I/O espalhando os blocos através dos > datafiles. > > Imagine se voce tivesse cada datafile em um disco diferente com > > controladoras diferentes, voce ganharia em leitura, porque as > controladoras > > iriam atenter em paralelo ao request do banco. > > > > On 4/23/07, Clayton Rocha <[EMAIL PROTECTED] > > <mailto:clayton.rocha%40faitec-cons.com.br> > wrote: > > > > > > Boa tarde! > > > > > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace > com dois > > > datafiles e movo um segmento para essa tablespace. O que > determina em qual > > > dos dois datafiles o segmento vai ser armazenado se eu tenho > espaço livre > > > suficiente nos dois? Por que, mesmo tendo espaço para alocar em > um único > > > datafile acontece do Oracle dividir o segmento nos dois? > > > > > > Oracle 10g em Windows. > > > > > > Obrigado! > > > > > > Clayton Rocha > > > > > > DBA Oracle > > > > > > Faitec Tecnologia > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > -- > > Marcio Portes > > Material Tecnico em Portugues - http://mportes.blogspot.com > <http://mportes.blogspot.com> > > Practical Learning Oracle - > > http://mportes.blogspot.com/2006/02/practical-learning-oracle.html > <http://mportes.blogspot.com/2006/02/practical-learning-oracle.html> > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > [As partes desta mensagem que não continham texto foram removidas]
Re: RES: [oracle_br] Segmento x Datafile
TABLETS_LMT_UNIF 3 26 137 1048576 ===>> ou seja, com tablespaces LMT uniform-size, basta vc criar os datafiles do tamanho final desejado, na ordem desejada nos discos desejados, que AUTOMATICAMENTE a alocação inicial será round-robin, ie, vai alocando um extent por vez em cada datafile, espalhando os extents portanto, que é o que vc quer. Lembro apenas que isso vale PARA A ALOCAÇÂO INICIAL, há os casos de : a) para UPDATEs, obviamente o I/O ** tem que ** ser feito no mesmo bloco aonde o(s) registro(s) já estava(m) e b) o espaço liberado por DELETEs necessariamente será usado cfrme for liberado - assim se for liberado um espaço no extent x do datafile y dum segmento, NECESSARIAMENTE o próximo insert não-append VAI USAR ESSE ESPAÇO, independente de "ordem" alguma, de qual foi o último datafile usado... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Clayton Rocha" <[EMAIL PROTECTED]> escreveu > > Entendo perfeitamente que ele divide e que temos ganho de performance caso > estejam em discos diferentes... > > > > A minha dúvida seria qual seria o critério que determina onde ele irá > salvar... Realmente acho que não vai ser possível alguém me explicar isso em > poucas linhas, mas, deixo uma outra pergunta: > > > > Existe algum material com explicações sobre esse assunto? É possível eu > entender essa tomada de decisões ou é algo que apenas devo saber que ele > divide, faz o melhor possível e ponto? > > > > Obrigado! > > > > Clayton Rocha > > > > De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em > nome de Marcio Portes > Enviada em: segunda-feira, 23 de abril de 2007 17:45 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] Segmento x Datafile > > > > Grosso modo falando... Não é uma resposta para ser desenvolvida em 3 > linhas... > Porque ele divide a carga de I/O espalhando os blocos através dos datafiles. > Imagine se voce tivesse cada datafile em um disco diferente com > controladoras diferentes, voce ganharia em leitura, porque as controladoras > iriam atenter em paralelo ao request do banco. > > On 4/23/07, Clayton Rocha <[EMAIL PROTECTED] > <mailto:clayton.rocha%40faitec-cons.com.br> > wrote: > > > > Boa tarde! > > > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois > > datafiles e movo um segmento para essa tablespace. O que determina em qual > > dos dois datafiles o segmento vai ser armazenado se eu tenho espaço livre > > suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único > > datafile acontece do Oracle dividir o segmento nos dois? > > > > Oracle 10g em Windows. > > > > Obrigado! > > > > Clayton Rocha > > > > DBA Oracle > > > > Faitec Tecnologia > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > -- > Marcio Portes > Material Tecnico em Portugues - http://mportes.blogspot.com > Practical Learning Oracle - > http://mportes.blogspot.com/2006/02/practical-learning-oracle.html > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > [As partes desta mensagem que não continham texto foram removidas] >
Re: [oracle_br] Segmento x Datafile
Se voce já sabe que ele divide e isso é importante para performance (I/O), para mim é isso que importa. (mas isso é opinião pessoal e entendo sua curiosidade). Tentando ajudar: obviamente é um algorítmo interno que nunca tive curiosidade de pesquisar. Porém, voce pode começar um investigação fazendo um load em uma tabela em uma tablespace que possua 2, 3 datafiles e ver a quantidade de dados que vai para cada um. Exemplo executado no 9i e 10g. 9i (9.2.0.8) FILE_NAME MBYTES PCT -- - - /oracle/tmp/df1.dbf 14 51,85 /oracle/tmp/df2.dbf 13 48,15 10g (10.2.0.3) == FILE_NAME MBYTES PCT -- - - /oracle/tmp/df1.dbf 24 51,06 /oracle/tmp/df2.dbf 23 48,94 E o script que usei para o teste. -- set echo on create tablespace tbs_deldf datafile '/oracle/tmp/df1.dbf' size 50m, '/oracle/tmp/df2.dbf' size 50m / col file_name format a30 select file_name from dba_data_files where tablespace_name = 'TBS_DELDF' / create table t tablespace tbs_deldf as select * from all_objects; insert /*+ append */ into t select * from t; commit; insert /*+ append */ into t select * from t; commit; insert /*+ append */ into t select * from t; commit; select count(*) from t; with sum_byt as ( select file_id, sum(bytes) sum_bytes from dba_extents where owner = user and segment_name = 'T' and segment_type = 'TABLE' group by file_id ) select file_name, round( sum_bytes/1024/1024, 2 ) mbytes, round( ratio_to_report(sum_bytes) over () * 100, 2 ) pct from dba_data_files df, sum_byt ex where df.file_id = ex.file_id / drop tablespace tbs_deldf including contents and datafiles; set echo off On 4/23/07, Clayton Rocha <[EMAIL PROTECTED]> wrote: > > Entendo perfeitamente que ele divide e que temos ganho de performance > caso > estejam em discos diferentes... > > A minha dúvida seria qual seria o critério que determina onde ele irá > salvar... Realmente acho que não vai ser possível alguém me explicar isso > em > poucas linhas, mas, deixo uma outra pergunta: > > Existe algum material com explicações sobre esse assunto? É possível eu > entender essa tomada de decisões ou é algo que apenas devo saber que ele > divide, faz o melhor possível e ponto? > > Obrigado! > > Clayton Rocha > > De: oracle_br@yahoogrupos.com.br [mailto: > oracle_br@yahoogrupos.com.br ] Em > nome de Marcio Portes > Enviada em: segunda-feira, 23 de abril de 2007 17:45 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] Segmento x Datafile > > Grosso modo falando... Não é uma resposta para ser desenvolvida em 3 > linhas... > Porque ele divide a carga de I/O espalhando os blocos através dos > datafiles. > Imagine se voce tivesse cada datafile em um disco diferente com > controladoras diferentes, voce ganharia em leitura, porque as > controladoras > iriam atenter em paralelo ao request do banco. > > On 4/23/07, Clayton Rocha <[EMAIL > PROTECTED] > <mailto:clayton.rocha%40faitec-cons.com.br> > wrote: > > > > Boa tarde! > > > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois > > datafiles e movo um segmento para essa tablespace. O que determina em > qual > > dos dois datafiles o segmento vai ser armazenado se eu tenho espaço > livre > > suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único > > datafile acontece do Oracle dividir o segmento nos dois? > > > > Oracle 10g em Windows. > > > > Obrigado! > > > > Clayton Rocha > > > > DBA Oracle > > > > Faitec Tecnologia > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > -- > Marcio Portes > Material Tecnico em Portugues - http://mportes.blogspot.com > Practical Learning Oracle - > http://mportes.blogspot.com/2006/02/practical-learning-oracle.html > > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html [As partes desta mensagem que não continham texto foram removidas]
RES: [oracle_br] Segmento x Datafile
Entendo perfeitamente que ele divide e que temos ganho de performance caso estejam em discos diferentes... A minha dúvida seria qual seria o critério que determina onde ele irá salvar... Realmente acho que não vai ser possível alguém me explicar isso em poucas linhas, mas, deixo uma outra pergunta: Existe algum material com explicações sobre esse assunto? É possível eu entender essa tomada de decisões ou é algo que apenas devo saber que ele divide, faz o melhor possível e ponto? Obrigado! Clayton Rocha De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Marcio Portes Enviada em: segunda-feira, 23 de abril de 2007 17:45 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Segmento x Datafile Grosso modo falando... Não é uma resposta para ser desenvolvida em 3 linhas... Porque ele divide a carga de I/O espalhando os blocos através dos datafiles. Imagine se voce tivesse cada datafile em um disco diferente com controladoras diferentes, voce ganharia em leitura, porque as controladoras iriam atenter em paralelo ao request do banco. On 4/23/07, Clayton Rocha <[EMAIL PROTECTED] <mailto:clayton.rocha%40faitec-cons.com.br> > wrote: > > Boa tarde! > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois > datafiles e movo um segmento para essa tablespace. O que determina em qual > dos dois datafiles o segmento vai ser armazenado se eu tenho espaço livre > suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único > datafile acontece do Oracle dividir o segmento nos dois? > > Oracle 10g em Windows. > > Obrigado! > > Clayton Rocha > > DBA Oracle > > Faitec Tecnologia > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Segmento x Datafile
No meu entender ele divide para ter mais facilidade e agilidade de leitura/escrita em cima do segmento... É mais vantajoso dividí-los para conseguir uma leitura "paralela"... Isso é claro se forem em discos diferentes... etc, etc, etc... Em 23/04/07, Clayton Rocha <[EMAIL PROTECTED]> escreveu: > > Boa tarde! > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois > datafiles e movo um segmento para essa tablespace. O que determina em qual > dos dois datafiles o segmento vai ser armazenado se eu tenho espaço livre > suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único > datafile acontece do Oracle dividir o segmento nos dois? > > Oracle 10g em Windows. > > Obrigado! > > Clayton Rocha > > DBA Oracle > > Faitec Tecnologia > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Segmento x Datafile
Grosso modo falando... Não é uma resposta para ser desenvolvida em 3 linhas... Porque ele divide a carga de I/O espalhando os blocos através dos datafiles. Imagine se voce tivesse cada datafile em um disco diferente com controladoras diferentes, voce ganharia em leitura, porque as controladoras iriam atenter em paralelo ao request do banco. On 4/23/07, Clayton Rocha <[EMAIL PROTECTED]> wrote: > > Boa tarde! > > Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois > datafiles e movo um segmento para essa tablespace. O que determina em qual > dos dois datafiles o segmento vai ser armazenado se eu tenho espaço livre > suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único > datafile acontece do Oracle dividir o segmento nos dois? > > Oracle 10g em Windows. > > Obrigado! > > Clayton Rocha > > DBA Oracle > > Faitec Tecnologia > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Segmento x Datafile
Boa tarde! Fiquei com uma curiosidade agora... se eu tenho uma tablespace com dois datafiles e movo um segmento para essa tablespace. O que determina em qual dos dois datafiles o segmento vai ser armazenado se eu tenho espaço livre suficiente nos dois? Por que, mesmo tendo espaço para alocar em um único datafile acontece do Oracle dividir o segmento nos dois? Oracle 10g em Windows. Obrigado! Clayton Rocha DBA Oracle Faitec Tecnologia [As partes desta mensagem que não continham texto foram removidas]