Instalei o DB2 Express-C em um PC com 2 GB de RAM e executando o sistema operacional Windows Server 2008 R2. Ao criar um novo banco de dados, há uma opção para definir o tamanho do Buffer Pool com o padrão definido como 4K.
Qual é o tamanho do pool recomendado para a configuração mencionada acima?
Também quero saber se devo usar o Buffer Pool padrão ou um Buffer Pool separado para cada banco de dados.
O tamanho padrão é 4K. Você também pode especificar 8K, 16K ou 32K. O tamanho do pool de buffers deve realmente ser baseado no tamanho de suas tabelas (ou seja, quantos bytes uma linha de dados pode conter). Se uma linha de seus dados não couber em uma página de 4K, ela não caberá em um buffer pool de 4K. E, portanto, você precisaria de maior.
O mesmo também se aplica aos espaços de tabela (os "recipientes físicos" nos quais suas tabelas são armazenadas). Uma tabela que precisa de um buffer pool de 8K precisa residir em um espaço de tabela de 8K. E, na verdade, você também associaria esse espaço de tabela ao pool de buffers ....
Dito isto, não apenas "dimensione demais" e vá para espaços de tabelas e buffer pools de 32K se você realmente tiver apenas tabelas de 4K. Você desperdiçará muito espaço em disco e memória.
Além disso, você pode ter quantos buffer pools quiser (tenho certeza de que há um limite superior, embora eu não saiba de antemão). Mas você pode ter qualquer combinação deles. Você pode ter cinco pools de 4K, um pool de 8K, um pool de 16K e três pools de 32K.
O mais importante é mais baseado no tamanho da sua mesa e na compreensão disso, conforme mencionado anteriormente.
Embora, aqui está a coisa boa... depois de criar seus pools de buffer e espaços de tabela, o DB2 é inteligente o suficiente para colocar a tabela no espaço de tabela de tamanho correto (pendente que exista). Você pode especificá-lo em seu código DDL, mas o DB2 é inteligente o suficiente para colocar uma tabela de 8K em um espaço de tabela de 8K (e, portanto, também será associado a um buffer pool de 8K).
OK ... agora para responder às suas duas últimas perguntas. Na verdade, não existe um tamanho "recomendado". O padrão de 4K é bom. A maioria das nossas tabelas onde trabalho se encaixam em um espaço de tabela 4K e buffer pool 4K.
O que tendemos a fazer, porém, como prática recomendada... Configuramos nossos próprios espaços de tabela 4K, 8K e 32K e buffer pools (incluindo espaços de tabelas temporários para reorganizações). Por que não configuramos 16K, não tenho certeza. Mas configuramos vários tamanhos em todos os nossos bancos de dados. Dessa forma, se algum desenvolvedor criar uma tabela maior que 4K, ela será automaticamente colocada no ritmo de tabelas maiores (e, portanto, buffer pool).
Espero que isso tenha sido claro o suficiente para você. Também achei este artigo útil com meu próprio entendimento de pools de buffers e espaços de tabela.
Além do bufferpool, também há outro consumidor da memória de 2 GB do DB2. Coisas como UTILHEAP, SORTHEAP, etc. Portanto, na verdade, há mais a considerar no quadro geral do que apenas bufferpool. Já pensou em usar AUTOMÁTICO? O DB2 tem um recurso chamado Memória de autoajuste (STMM), o que você faz é configurar sua memória de instância para ser AUTOMÁTICA ou algum valor fixo e o gerenciador STMM descobrirá as configurações de memória para você na hora.
Se você não estiver interessado em STMM (pode não estar disponível para Express-C), as coisas que você deve considerar ao projetar um bufferpool é quanto para sua carga de trabalho sobre quantos dados você precisaria para estar na memória. Por exemplo, se você tem uma tabela ativa que precisa ser acessada o tempo todo e toda a tabela precisa estar no bufferpool, é melhor ter um bufferpool grande o suficiente para que você possa manter a maioria das páginas dessa tabela.
Há uma prática recomendada que sugere separar os dados temporários de seus dados permanentes. Portanto, se você fizer muitas coisas que envolvem o uso de dados temporários, como classificação, temperatura do usuário etc., é melhor separar os dois bufferpools para que os dados temporários não irá poluir seu bufferpool de dados reais.
Espero que isto ajude.