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 / 20850
Accepted
Chris Aldrich
Chris Aldrich
Asked: 2012-07-14 07:58:49 +0800 CST2012-07-14 07:58:49 +0800 CST 2012-07-14 07:58:49 +0800 CST

Os índices devem ser colocados automaticamente em seu próprio bufferpool?

  • 772

Trabalhamos com DB2 LUW (especificamente estamos atualmente em 9.7 FP4) rodando em AIX.

De acordo com as melhores práticas da IBM, eles recomendam que, ao criar uma tabela, você coloque os dados, os índices e os dados LOBs/LONG cada um em seu próprio espaço de tabela. (A razão é melhor controle sobre o disco, manutenção, backups, etc.)

Tablespaces devem ser associados a bufferpools. No momento, a maioria de nossas tabelas e índices cabem em bufferpools e tablespaces de 4K.

Normalmente, com nossos scripts, configuramos um bufferpool 4K BP4K. Em seguida, configuramos pelo menos dois tablespaces de 4K (já que não temos muitos LOBs): TS_DAT_4K para dados e TS_IND_4K para índices. Por padrão, acabamos de atribuir esses espaços de tabela ao bufferpool BP4K.

O que eu me pergunto: como os índices estão em seu próprio espaço de tabela, eles também devem receber seu próprio bufferpool?

Minha razão para pensar isso é baseada na otimização. Se os índices tiverem seu próprio pool de buffers, é mais provável que eles permaneçam na memória (em vez de serem empurrados para fora da memória devido à leitura dos registros da tabela). Isso permitiria uma varredura mais rápida de índices para localizar os registros nas tabelas. E como os índices não compartilhariam mais o mesmo bufferpool com as tabelas, mais tabelas podem agora permanecer na memória para recuperação lógica em vez de uma leitura física. Então, meu pensamento é que isso reduziria a E/S física e, assim, ajudaria no desempenho/manutenção do banco de dados.

Também não posso deixar de me perguntar se isso é apenas pré-otimização, o que é 99% das vezes uma coisa ruim de se fazer, introduzindo sobrecarga extra etc. (especialmente porque não identificamos que precisamos de bufferpools separados ainda com base no desempenho atual. É claro que o aplicativo em desenvolvimento ainda não está em produção e ainda precisa de ajuste do banco de dados....)

Pensamentos sobre isso? Esta é uma prática recomendada? ou apenas pré-otimização e pensamento excessivo?

performance index
  • 1 1 respostas
  • 689 Views

1 respostas

  • Voted
  1. Best Answer
    Mat
    2012-07-15T01:03:50+08:002012-07-15T01:03:50+08:00

    Permite executar dois bancos de dados hipotéticos ( H1e H2) em paralelo, com a mesma quantidade total de RAM para bufferpools ( R).

    • Vamos H1ter um único bufferpool de tamanho R.
    • Vamos H2ter dois bufferpools: um de tamanho Ipara páginas de índice, o outro de tamanho Dpara páginas de dados. (E D+I==Rclaro.)

    A questão é:

    • Como você determina os valores corretos para Ie Dpara obter H2um desempenho melhor do que H1?

    Minha resposta é que você não pode em geral. O mecanismo de banco de dados para H1tem mais espaço para otimizar seu cache do que H2. Se houver horas do dia em que mais páginas de índice levariam a um melhor desempenho, ele pode descartar páginas de dados não utilizadas e ter um cache de "principalmente páginas de índice". Se, posteriormente, as páginas de dados ficarem mais quentes, elas poderão remover mais páginas de índice e ter um cache de "principalmente páginas de dados".

    H2não posso fazer isso. Depois de ter Ipáginas de índice armazenadas em cache, ele não pode armazenar mais em cache, mesmo que isso seja o melhor no momento. Está preso lá com um uso abaixo do ideal de RAM.

    A única maneira de H2executar tão bem quanto H1é se a D/ Idivisão inicialmente escolhida for ideal e a carga de trabalho for muito estável. Isso com certeza pode acontecer, mas aposto que não é um cenário de banco de dados muito comum. Se não for o seu caso, pense H1como sendo o mesmo, H2mas com particionamento dinâmico do cache entre dados e páginas de índice gerenciadas diretamente por quem mais sabe como precisa otimizar o I/O (ou seja, o mecanismo de banco de dados).

    Isso não quer dizer que manter bufferpools diferentes nunca seja uma boa ideia.
    Um cenário para isolar páginas específicas em um cache específico que encontrei é ter um "relatório" crítico que precisava ser executado rapidamente (obviamente) o tempo todo e usava algumas tabelas que praticamente nunca foram usadas em outro lugar. Portanto, essas páginas continuaram sendo despejadas e esse "relatório" tinha tempos de execução que variavam muito de execução para execução. Mover um conjunto específico de tabelas (e seus índices) para um pool específico removeu muito da parte de desempenho "não determinística".
    Mas isso é abaixo do ideal para o banco de dados como um todo, mais um kudge e mais próximo da otimização Voodoo IMO. (E isso não estava no DB2, mas acredito que seja irrelevante aqui.)

    Portanto, meu conselho é: se você tiver X Gb de RAM disponível para cache, use um único buffer, coloque tudo nele e deixe o mecanismo de banco de dados fazer sua mágica lá.
    Se você se deparar com um caso de canto que parece se beneficiar da segregação de cache, experimente, faça um benchmark, pense na sobrecarga de ter que manter os números mágicos para cada tamanho de cache e ajuste as consultas, o esquema ou o layout do disco. :)

    • 2

relate perguntas

  • Como determinar se um Índice é necessário ou necessário

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

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