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 / 41577
Accepted
Alexander Tobias Bockstaller
Alexander Tobias Bockstaller
Asked: 2013-05-07 01:44:31 +0800 CST2013-05-07 01:44:31 +0800 CST 2013-05-07 01:44:31 +0800 CST

Por que DELETE + REORG não libera espaço em disco (DB2)?

  • 772

No DB2, tenho uma tabela contendo grandes dados binários. Agora limpei toda a tabela e executei runstats, reorg, runstats, mas a quantidade de espaço em disco ocupado não muda. Oque pode estar errado aqui?

A tabela reside em seu próprio tablespace que criei da seguinte forma:

CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;

Eu apaguei/reorganizei da seguinte forma:

DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE

A tabela MY_TBL ocupava 2,5 GB antes de tudo isso e depois de deletar/reordenar usa apenas 3 MB a menos.

FWIW: Estou executando o DB2/NT v9.5.2.

db2 maintenance
  • 2 2 respostas
  • 23136 Views

2 respostas

  • Voted
  1. Chris Aldrich
    2013-05-07T04:54:49+08:002013-05-07T04:54:49+08:00

    Vou adivinhar que você está usando armazenamento automático. (Não que isso pudesse acontecer de outra forma... é apenas fácil que isso aconteça com o armazenamento automático.)

    O problema mais provável é que seu banco de dados recuperou o espaço para si mesmo, mas não liberou o disco de volta para o sistema operacional. Isso pode ser mostrado facilmente verificando o High Water Mark para o tablespace.

    faça o seguinte

    db2 list tablespaces show detail

    Isso mostrará cada espaço de tabela e o que ele está usando no disco. Used pagesé quantas páginas de disco o banco de dados está usando. Comparando isso com total pages(o total reivindicado no disco) e o High water mark (pages)mostrará se você está "reivindicando" mais do que realmente precisa. (ou seja, poucas páginas usadas, total de páginas muito alto e uma marca d'água alta próxima ao total de páginas).

    Para se livrar desse espaço não utilizado e devolvê-lo ao sistema operacional, você emitiria o seguinte (em armazenamento automático): db2 alter tablespace <tablespace name> reduce max. exemplo

    db2 alter tablespace ts1 reduce max;
    

    Isso fará com que o DB2 reduza a marca d'água alta e libere o disco não utilizado de volta ao sistema operacional. (Observe que você só pode fazer isso para espaços de tabela regulares e grandes, não para espaços de tabela temporários do sistema ou temporários do usuário).

    Se você estiver usando DMS sem armazenamento automático, precisará usar um conjunto de comandos ligeiramente diferente:

    db2 alter tablespace <tablespace name> lower high water mark;
    db2 alter tablespace reduce (<containter name> or [all containers] integer K|M|G or integer PERCENT);
    

    exemplo

    db2 alter tablespace ts1 lower high water mark;
    db2 alter tablespace reduce (all containers 500 M);
    

    Onde trabalhamos, colocamos isso em alguns de nossos scripts de manutenção para que possamos executá-lo automaticamente depois de fazermos reorganizações para garantir a recuperação do espaço em disco. Em nosso caso, usamos o DB2 LUW 9.7 FP 4, portanto, não custa nada verificar novamente o Centro de Informações para 9.5 para garantir que você tenha acesso às informações corretas para sua versão.

    EDIT: Se seus tablespaces vierem de um banco de dados atualizado para o DB2 9.7, você provavelmente não terá o atributo de armazenamento recuperável definido. Isso é verdade mesmo se você atualizar do DMS para o armazenamento automático. De qualquer maneira, você não pode realmente diminuir a marca d'água alta. Você tem que despejar a tabela e os dados, descartar os tablespaces. Em seguida, recrie o tablespace usando armazenamento automático e importe os dados para suas tabelas.

    • 22
  2. Best Answer
    Alexander Tobias Bockstaller
    2013-05-07T23:11:22+08:002013-05-07T23:11:22+08:00

    A tabela MY_TBLcontém grandes dados binários em uma BLOBcoluna. A documentação do REORGcomando diz que o DB2 evita reorganizar tais objetos porque é demorado e não melhora o clustering. No entanto, o DB2 pode ser forçado a reorganizar os dados LOB se a LONGLOBDATAopção for especificada. O espaço não utilizado pode ser reutilizado pelo DB2, portanto, a inserção de novos dados primeiro preencherá as páginas existentes e não utilizadas antes de alocar novos.

    Corrida

    REORG TABLE MY_TBL LONGLOBDATA
    

    recuperou com sucesso os 2,5 GB de espaço em disco que a tabela vazia estava usando.

    Eu não sabia dessa opção e a supervisionei na primeira vez que li a documentação.

    • 9

relate perguntas

  • Migração de DB2 para MySQL

  • O que significa TBSCAN GENROW no Plano Explicativo?

  • Emule o comportamento do REGEXP no DB2 SQL

  • BLOB no DB2 v9 no z/OS

  • O que significa HSJOIN em um plano de explicação?

Sidebar

Stats

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

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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

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