Dando prosseguimento aos nossos posts iremos hoje dar continuidade ao Capítulo 6 do livro PRIMEIROS PASSOS COM O DB2 Express-C.
Falaremos hoje sobre modelo de armazenamento no DB2.
Qualquer dúvida sobre o assunto tratado até o momento, por favor deixem seus comentários.
No post anterior falamos sobre as seguintes estruturas:
1 – O modelo de processo do DB2
e
2 – O modelo de memória do DB2
Agora vamos detalhar um pouco sobre o modelo de armazenamento.
MODELO DE ARMAZENAMENTO DO DB2
Falaremos um pouco sobre algumas estruturas de armazenamento DB2, sejam elas lógicas ou físicas.
–> Páginas e extensões
–> Bufferpool
–> Tablespace
–> Containers****
Páginas e extensões
Página é a menor unidade de armazenamento no DB2 e elas podem ter tamanhos de 4k, 8k, 16k e 32k.
Extensões são agrupamentos de páginas. Seria muito dispendioso para o DB2 tratar uma página por vez, desta maneira ele irá trabalhar com um conjunto de páginas buscando o melhor desempenho possível.
Bufferpools
O Bufferpool é uma área de memória utilizada para cache de dados. O DB2 utiliza-se dessa área afim de ganhar desempenho reduzindo I/Os sequenciais promovendo a leitura (busca prévia) e gravação de modo assíncrono (DB2 antecipa quais páginas serão necessárias e realiza uma pesquisa prévia no disco para o bufferpool, para que fiquem prontas para o uso).
Os bufferpools possuem paginação de 4k, 8k, 16k e 32k. Um bufferpool pode servir como área de memória de um ou vários tablespaces, desde que a paginação das tablespaces sejam iguais ao do bufferpool.
Tablespaces
O Tablespace é um estrutura de armazenamento lógico, ou seja, ela é utilizada com o intuito de agrupamento lógico de objetos. Todos os objetos como tabelas, índices e etc criados em um banco de dados DB2 pertencerão a uma tablespace.
As tablespaces possuem um tamanho de paginação de 4k, 8k, 16k e 32k. Essa paginação deve corresponder ao mesmo tamanho de paginação dos Bufferpools, ou seja, tablespaces e bufferpools caminharão lado a lado. Se você tiver um tablespace com paginação de 16k, então será necessário a criação de um bufferpool de 16k como área de memória dessa tablespace.
Uma tablespace pode ser do tipo:
Regular;
Large;
Temp (System ou User).
Quanto ao gerenciamento dessas tablespaces, as mesmas podem ser do tipo:
SMS –> gerenciada pelo sistema operacional, container serão acrescidos ou removidos pelo SO;
DMS –> gerenciada pelo DB2;
Automatic Storage –> onde o DBA irá informar os storage groups desse ambiente DB2 para que o mesmo utilize-se das facilidade da tablespace SMS e desempenho da tablespace DMS. Este tipo requer o minimo de trabalho possível e é o recomendado atualmente.
Containers
Apesar de não detalhado no livro, o conceito de Container é muito simples. O DB2 precisa armazenar fisicamente os dados de tabelas, de indices e os próprios dados, desta forma o DB2 utiliza-se de containers que podem ser arquivos, filesystems ou raw devices. O tipo de armazenamento utilizado será baseado no tipo de tablespace escolhido.
Abaixo um figura resumindo a estrutura de armazenamento comentado acima em estrutura física e estrutura lógica.
***Object – é o objeto propriamente dito: tabela, indice e etc.
***Data Page ou Página.
Baseado nas informações e estruturas detalhas acima podemos definir mais um componente do DB2, o database propriamente dito.
Um database é formado por estruturas lógicas de armazenamento, estruturas fisicas de armazenamento, estrutura de memória e também processos (falaremos futuramente sobre o tópico processos).
Abaixo uma imagem de um banco de dados DB2.
Dado as informações acima terminamos nosso capítulo 6 do livro PRIMEIROS PASSOS COM O DB2 Express-C.
Existem alguns exercicios de fixação no livro, seria importante faze-los, pois tratam da criação das estruturas comentadas até o momento.
No próximo post falaremos mais sobre o livro. Como informado traçarei uma rota um pouco diferente da apresentada no livro, por este motivo fique atento aos capítulos mencionados em cada post.
Olá, Otavio! Gostaria que você esclarecesse alguns pontos. Durante o treinamento que tive de DB2 para SAP que por padrão da SAP o bufferpool deve ser de 16K e as tablespaces do tipo large. Qual seria o default do DB2 quando é instalado sem configurar estes atributos. E se fica a cargo do DBA definir o tamanho e tipo. Se existe ganho de performance ao utilizar 4K em determinadas situações e noutras o ganho seria maior com 16K por exemplo. Obrigado!
Olá Rafa. O DB2 para SAP é configurado atendendo as otimizações da SAP. Essa utilização de Bufferpool e Tablespaces de 16K é baseado no tamanho médio das linhas que serão inseridas. Deste modo a SAP colocou como padrão a utilização de 16k.
Em uma instalação padrão do DB2 você terá alguns tablespaces padrões criados, mas será necessário configurar o ambiente baseado na sua necessidade de negócio, criando tablespaces baseados em tamanho de linhas, o tipo de workload e dado.
Sobre desempenho existe sim situações em que 4k, 8k, 16k ou 32k serão melhores. Atualmente especialistas IBM não recomendam utilização de Tablespaces 4k, tanto que quando você instala um DB2, todas as tablespaces padrão já terão um pagesize de 8k. Vamos analisar um cenário para você entender melhor, por exemplo, imagine que você crie um tablespace com pagesize de 4k e o tamanho médio das linhas seja de 2.5k (isso será uma constante de 2.5k), deste modo você terá um desperdicio de 1.5k que não poderão ser inseridos dados, ou seja, quase meia pagina desperdiçada. Nesse caso se você utilizar uma tablespace de 8k, o desperdicio será menor (0.5k apenas). Desperdicio sempre existirá, o que você pode fazer é minimizá-los.
Sobre Bufferpools é recomendado que você utilize nos bufferpools o mesmo pagesize das tablespaces relacionadas a este bufferpool, ou seja, se você tiver um bufferpool de 8k coloque para trabalhar neste bufferpool tablespaces de 8k, melhorando assim o I/O de dados.
Falando de ambientes OLTP, o recomendado é utilizar pagesize menores, evitando que linhas ou dados não necessários sejam carregados no bufferpool.
Espero ter respondido as suas questões. Qualquer dúvida me avise.