AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 27933
Accepted
Jay
Jay
Asked: 2012-10-31 23:04:26 +0800 CST2012-10-31 23:04:26 +0800 CST 2012-10-31 23:04:26 +0800 CST

Diferença entre linhas encadeadas e migradas

  • 772

Qual é a diferença entre linhas encadeadas e migradas? Além disso, qual consulta deve ser usada para exibir essas linhas? (estou usando o banco de dados Oracle 11gR2)

oracle oracle-11g-r2
  • 2 2 respostas
  • 4198 Views

2 respostas

  • Voted
  1. Best Answer
    Mat
    2012-11-01T01:33:00+08:002012-11-01T01:33:00+08:00

    Linhas encadeadas e migradas são explicadas nas Estruturas de armazenamento lógico do Guia de conceitos .

    Uma linha migrada seria uma linha cujos dados da coluna foram completamente transferidos de um bloco para outro devido a uma atualização. O bloco original teria essencialmente apenas um "endereço de encaminhamento" armazenado para essa linha.

    Uma linha encadeada teria partes de seus dados de coluna em vários blocos. O bloco original conteria os dados reais da coluna e um endereço de encaminhamento para o restante. (Você pode obter linhas encadeadas em mais de dois blocos.)

    Ambos são implementados da mesma maneira no fundo, então são realmente dois aspectos da mesma coisa.

    Observe também que, para tabelas com mais de 255 colunas, todas as linhas são tecnicamente encadeadas - uma "parte de linha" pode conter apenas 255 valores de coluna. O encadeamento pode acontecer no mesmo bloco ou com outros blocos, dependendo da disponibilidade de espaço (e não é particularmente "ruim" se todos os dados terminarem no mesmo bloco).

    A única maneira, até onde eu sei, de obter dados precisos sobre o encadeamento de linhas é usar:

    ANALYZE TABLE your_table [partition (your_part)] LIST CHAINED ROWS
    

    Consulte Listando linhas encadeadas de tabelas e clusters .

    Isso é potencialmente caro, toda a tabela precisa ser verificada. A coleta de estatísticas não preenche a CHAIN_CNTcoluna da dba_tablesvisualização. (Acho que pode ter acontecido em algum momento, mas não no 11.2, pelo menos.)

    Você pode monitorar a estatística table fetch continued row1v$sysstat ( ) para ver se uma consulta é afetada por linhas encadeadas ou migradas, mas não acredito que você possa ter essa métrica por sessão, então você precisa de um sistema silencioso para medir ou a leitura será "barulhento".

    The Secrets of Oracle Row Chaining and Migration contém informações interessantes sobre linhas encadeadas e migradas, como você as mede e possíveis formas de corrigi-las.
    Como sempre, não reconstrua tabelas ou altere parâmetros de armazenamento "só porque" você vê linhas encadeadas ou migradas. Faça isso apenas se você medir que está realmente causando problemas de desempenho.

    1 Das descrições das estatísticas :

    Número de vezes que uma linha encadeada ou migrada é encontrada durante uma busca

    A recuperação de linhas que abrangem mais de um bloco aumenta a E/S lógica por um fator que corresponde ao número de blocos que precisam ser acessados. Exportar e reimportar pode eliminar esse problema. Avalie as configurações dos parâmetros de armazenamento PCTFREE e PCTUSED. Este problema não pode ser corrigido se as linhas forem maiores que os blocos do banco de dados (por exemplo, se o tipo de dados LONG for usado e as linhas forem extremamente grandes).

    Consulte também Busca de Tabela por Linha Contínua .

    • 4
  2. Andy Black
    2013-07-04T07:21:35+08:002013-07-04T07:21:35+08:00

    Uma maneira mais "proativa" de descobrir se você tem problemas com linhas encadeadas é usar o OEM e o Segment Advisor. (Administration –> Storage –> Segment Advisor -> Chained Row Analysis) O Segment Advisor é executado em um cronograma e procura por operações curiosamente longas que possam sinalizar um problema de linha encadeada. Em seguida, ele faz uma análise mais profunda durante a janela de manutenção do banco de dados e oferece a opção de corrigir o problema... mas prefiro corrigir o problema fora do OEM.

    Para resolver o problema, você tem algumas opções. Lendo a resposta acima, é estranho que um documento recente da Oracle mencione fazer uma exportação/importação ... que funciona, mas provavelmente não é a opção mais rápida ou fácil.

    Uma maneira muito mais rápida do que uma exportação/importação é fazer um "alter table table_name move;"...que reorganizará a tabela no mesmo tablespace. Isso também pode ser feito paralelizado. Depois disso, você precisará reconstruir todos os índices dessa tabela.

    Outra opção (online) é usar dbms_redefinition. Isso é ótimo quando funciona, mas é mais complicado do que as outras opções.

    Você também pode fazer uma inserção em uma nova tabela (inserir em new_table_name, selecionar * de table_name), renomear as tabelas para que a nova tabela tenha o nome antigo e, em seguida, reconstruir os índices.

    Na minha experiência, a melhor maneira geralmente é alterar a tabela, a menos que você tenha restrições de capacidade de armazenamento.

    • 0

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve