Avaliação de Desempenho no Acesso a Dados
Utilizando Índices Multidimensionais
Sérgio Luís Dill, Regis Schuch, Paulo Sérgio Sausen,
Edson Luiz Padoin, Mauricio de Campos
Departamento de Tecnologia – UNIJUÍ - Ijuí, RS - Brasil
{dill,Regis.schuch,sausen, padoin, mauricio}@unijui.edu.br
Abstract. This paper presents a case study whose main purpose is evaluating
traditional index performance compared to multidimensional index
performance. Such evaluation is carried out by executing several queries over
a sample database specially build for that purpose. Our goal is identify the
types of queries that present performance improvements by exploring
multidimensional indexes. We also measure the disk space needed for both
types of indexes.
Categoria do Trabalho: Trabalho de Graduação.
Resumo. Este artigo apresenta em estudo de caso que tem como objetivo
avaliar o desempenho de índices tradicionais com índices multidimensionais.
Para isso, um ambiente de teste foi construído de maneira que diferentes tipos
de consultas possam ser executados sobre a base de dados explorando os
diferentes índices para acessar os dados. Pretende-se identificar os tipos de
consultas que apresentam ganhos de desempenho com utilização dos novos
tipos de índices bem como avaliar o espaço em disco utilizado por estes tipos
de índices.
1. Introdução
À medida que os bancos de dados tornam-se cada vez maiores resultantes do
contínuo crescimento no volume de dados armazenados, a importância e necessidade de
acessos eficientes aos dados torna-se um desafio para o Administrador de Banco de
Dados (DBA). Modernos Sistemas de Gerência de Bancos de Dados (SGBDs) oferecem
uma vasta gama de recursos e funcionalidades que podem ser exploradas pelo DBA para
melhorar o desempenho global do banco de dados. Um destes recursos que o DBA
pode explorar é a possibilidade de criação de índices sobre as relações. Os índices
podem melhorar o desempenho das consultas uma vez que oferecem um caminho
alternativo de acesso aos dados.
Tradicionalmente, os SGBDs permitem que o DBA crie vários índices sobre as
relações sendo que, apenas um destes índices, pode ser atribuído a propriedade de
índice cluster. Entretanto, as últimas versões dos principais SGBDs tornaram possível a
criação de índices multidimensionais. Índices multidimensionais permitem que os dados
possam ser agrupados fisicamente no disco considerando várias dimensões
simultaneamente.
Por outro lado, a criação de índices em relações tem duas desvantagens.
Primeiro, índices são estruturas redundantes e portanto aumentam o tamanho do banco
de dados. Segundo, as operações de atualização tornam-se mais lentas uma vez que a
cada atualização, os índices adicionais também precisam ser atualizados e mantidos.
Assim, o DBA precisa estar atento e consciente das vantagens e desvantagens que cada
índice representa para o banco de dados.
Este artigo tem como objetivo avaliar o desempenho de índices tradicionais e de
índices multidimensionais bem como o espaço em disco utilizado. Para tanto, o texto
está organizado da seguinte forma: Na Seção 2 apresenta-se uma visão geral sobre
indexação em bancos de dados bem como uma descrição das vantagens e limitações de
cada tipo. Na seção 3, desenvolve-se um estudo de caso que avalia o desempenho de
índices multidimensionais. Para avaliar o desempenho, define-se um conjunto de
consultas que exploram os diferentes índices para acessar o banco de dados. Na Seção 4
apresentam-se os resultados do estudo de caso e ao final, apresentam-se as conclusões
do trabalho e sugestões de trabalhos futuros.
2. Indexação
Índices são estruturas de acesso auxiliares associadas às relações e que têm por objetivo
aumentar o desempenho na execução de consultas. Tipicamente, um índice permite que
um registro seja encontrado sem que seja necessário acessar toda a relação (arquivo de
dados).
Quando uma relação não possui índices definidos, o SGBD deve percorrer toda
a relação para localizar os dados desejados. Isso pode tornar o tempo de resposta de
consultas sobre relações com milhares de tuplas oneroso, sendo que a finalidade de um
índice é permitir a rápida determinação do endereço de um registro do arquivo, dada um
argumento de pesquisa. O endereço identifica a posição onde está armazenada a tupla,
na memória secundária [MOLINA,2002].
Há vários métodos de indexação utilizados comumente pelos SGBDs, como
árvores B, hashes e listas encadeadas, porém a estrutura de índice árvore B+ é a mais
utilizada das diversas estruturas de índices. Isto porque ela mantêm sua eficiência, à
medida que novas inserções, atualizações ou remoções de dados ocorrem. Um índice
árvore B+ tem a forma de uma árvore balanceada na qual todos os caminhos da raiz da
árvore até uma de suas folhas são do mesmo comprimento [SILBERSCHATZ, 1999].
2.1. Índice Cluster
O arquivo do índice cluster é um arquivo ordenado e composto por dois campos.
O primeiro campo corresponde à chave usada para a indexação e o segundo campo é um
ponteiro para a tupla correspondente no arquivo de dados. A Figura 1 ilustra uma
representação de um índice cluster onde o arquivo de dados está ordenado de acordo
com a chave do índice (atributo mês). A coluna RID representa o ponteiro que armazena
a localização física do registro no arquivo de dados.
Uma limitação das relações tradicionais reside no fato de que elas podem estar
fisicamente ordenadas considerando apenas um índice, ou seja, uma dimensão. Quando
um novo índice é definido sobre a relação, este não terá a propriedade de ser índice
cluster. [BHATTACHARJEE, 2003].
Dados da Relação
Índice(Mes)
RID
RID
312
1
1
312
2858
3336
93561
377
313
2
2
313
2858
3340
93575
377
314
3
3
314
2858
3357
93585
377
315
4
4
315
2858
3367
93615
377
316
5
5
316
2858
3369
93625
377
317
6
6
317
2858
3363
93635
377
318
7
7
318
2858
3473
93640
377
MES
MES
ORC
LOT
TURMA CURSO
Figura 1. Exemplo de uma relação com um índice cluster.
A Figura 2 mostra a relação e a adição de um novo índice (no atributo LOT).
Observa-se que a ordem dos dados não corresponde ao ordenamento da chave do novo
índice. Entretanto, é possível mudar o índice cluster de uma relação através do processo
de reorganização. Neste processo pode-se selecionar o índice para ordenar fisicamente
os dados. Isto significa que caso o segundo índice (LOT) fosse selecionado para ser o
índice cluster, o primeiro (MÊS) automaticamente perderia a propriedade de ser índice
cluster.
Dados da Relação
Índice (MÊS)
RID
RID
312
1
1
313
2
2
313
2858
3357
314
3
3
314
2858
315
4
4
315
316
5
5
317
6
318
7
MES
MÊS
ORC
LOT
Índice (LOT)
TURMA CURSO
RID
LOT
377
6
3336
93575
377
3
3340
3340
93585
377
2
3357
2858
3367
93615
377
4
3367
316
2858
3473
93625
377
7
3369
6
317
2858
3336
93635
377
1
3363
7
318
2858
3369
93640
377
5
3473
312
2858
3363
93561
Figura 2. Uma Relação com um índice cluster e outro índice não cluster.
A Seção 2.2 apresenta a técnica para criação de índices multidimensionais que
foi desenvolvida para ter-se a possibilidade de organizar fisicamente os dados
considerando mais de uma dimensão (atributo) eliminando assim a limitação das
relações tradicionais que podem ter os dados organizados fisicamente a partir de
somente um índice.
2.2. Índice Cluster Multidimensional
Um índice cluster multidimensional (MDC) permite que os dados de uma relação sejam
fisicamente ordenados a partir da combinação de atributos. Além disso, pode reduzir
igualmente a sobrecarga da manutenção de dados, como operações de manutenção de
reorganização e índice durante as operações de inserção, atualização e exclusão, e ainda
uma diminuição nas operações de I/O. [ZIKOPOULOS, 2003]. Apresenta-se a seguir
alguns conceitos que são utilizados para a aplicação de índices multidimensionais.
•
Dimensão - Uma dimensão MDC é um índice cluster em uma relação MDC. Uma
dimensão é formada por um conjunto de colunas de uma relação. A dimensão
permite que os dados da relação sejam fisicamente ordenados a partir de mais de
uma coluna da relação (dimensão) simultaneamente.
•
Slice - Um slice é um conjunto de blocos que contêm páginas de dados que possuem
valor igual em um atributo da dimensão da relação MDC.
•
Célula Lógica - Qualquer combinação única de valores dimensionais compõe uma
célula lógica
•
Página – Unidade de armazenamento do banco de dados. Um banco de dados pode
ter páginas de diversos tamanhos sendo que 4KB, 8KB, 16KB e 32KB são os mais
comuns.
•
Bloco - Conjunto de páginas consecutivas no disco.
•
Tamanho ou Fator de Bloco – Especifica o número de páginas armazenadas em
um bloco. Representa uma medida importante uma vez que determina como os
dados serão organizados no disco. Em cada bloco, somente serão inseridas tuplas
com um determinado valor de dimensão. Não é uma boa solução definir um fator de
bloco alto para uma dimensão com alta cardinalidade, pois haverá grande
desperdício de espaço uma vez que muitas páginas dentro do bloco podem ficar
vazias.
•
Índice de Bloco - Um índice de bloco é uma nova estrutura de índices semelhante a
um índice registro tradicional, exceto que no nível folha, as chaves apontam para
blocos ao invés registros.
A Figura 3 apresenta uma relação MDC com duas dimensões, a dimensão MÊS e
a dimensão ORC. Esta Figura possui 12 retângulos, os quais representam as células da
relação. Cada retângulo possui desenhos com os cantos arredondados que representam
os blocos onde os dados estão armazenados. Por exemplo, o bloco número 1 contém
dados referentes ao mês 312 (Jan) e a unidade orçamentária 2858. Os blocos 1, 6, 12, 9,
19, 39, 41, 42 e 11 contêm dados referentes ao slice da dimensão ORC com valor 2858.
Figura 3. Relação de dados MDC organizada pelas dimensões mês e orc
2.3. Escolha dos índices Multidimensionais
Algumas considerações são importantes na definição das dimensões que irão compor o
índice multidimensional. Considerando a Tabela 1, vários atributos são candidatos para
serem utilizados como dimensões. O principal aspecto que o DBA deve considerar para
determinar quais dimensões devem ser selecionadas para compor um índice é a
identificação das consultas que podem se beneficiar através do uso deste índice MDC.
Neste sentido, elaboramos um conjunto de consultas que podem servir de guia para o
DBA. Estas consultas estão agrupadas e descritas na Seção 3.2 e serão utilizadas realizar
a avaliação de desempenho.
Outro aspecto a ser considerado no projeto de índices multidimensionais está na
densidade das células com base nos dados inseridos na relação. A densidade da célula
pode ser obtida através do produto cartesiano das cardinalidades de cada uma das
dimensões utilizadas no índice.
RH MÊS ITEM PROG LOT GEST ORC TURMA PROJ CURSO COMP HORAS
3
312
5
599 3336
2858 2850
93561
100
377
5660
5,25
4
312
5
599 3469
2858 2850
93575
200
377
5660
10,50
4
312
5
599 3469
2858 2850
93585
2
377
5660
10,50
3
313
5
599 3336
2858 2850
93615
4
377
5660
10,50
3
313
5
599 3336
2858 2850
93625
7
377
5660
10,50
4
313
69
579 3469
2862 2850
90
31,85
....
Tabela 1: Primeiras 8 (de 313.312) linhas da tabela MDC
Para exemplificar o cálculo da densidade da célula e o conseqüente número de
células resultantes, considere a Tabela 1 com as seguintes características.
• Atributo MÊS com cardinalidade 24, ou seja, existem 24 valores
possíveis para o domínio deste atributo.
• Atributo LOT com cardinalidade 211, ou seja, há 211 unidades de lotação
possíveis.
• Atributo ORC com cardinalidade 34, ou seja, há 34 diferentes unidades
orçamentárias.
A definição de um índice multidimensional sobre os atributos MÊS e LOT teria
um máximo de 5064 células (24 * 211) possíveis. Considerando que cada valor
diferente de célula usa uma página diferente para ser armazenada, poderá haver
desperdício de espaço caso a densidade da célula seja baixa. Entretanto, a definição de
um índice multidimensional sobre os atributos MÊS e ORC teria um máximo de 816
células possíveis.
3. Estudo de caso
O estudo caso tem o objetivo de avaliar o desempenho de índices MDC. Para realizar o
estudo de caso, definiu-se um ambiente computacional e definiu-se um conjunto de
consultas a serem avaliadas sobre a base de dados contendo as relações.
3.1. Configuração do Ambiente computacional e da base de dados
A execução das consultas SQL foi realizada em um computador, modelo notebook, com
processador Intel® Core Duo 1.66 GHz com 1GB de RAM e HD SATA de 5400 RPM
de 120 GB rodando o Sistema Operacional Ubuntu GNU/Linux 8.04, SGBD DB2
instalado sobre um sistema de arquivos do tipo“ext3” com blocos de dados de 4KB.
As Listagens 1a e 1b mostram as instruções SQL para a criação das relações
utilizadas no estudo de caso. Verifica-se que a estrutura das relações é idêntica. A
relação MDC utiliza um índice multidimensional enquanto que a relação denominada
NaoMDC utiliza índices tradicionais. Ambas as relações foram criadas em espaços de
relações com tamanho de página de dados de 4KB. Após a criação das tabelas, efetuouse a carga de dados totalizando 313.312 tuplas (exatamente os mesmos dados em cada
relação).
** Criação da Relação MDC
** Criação da Relação NaoMDC
CREATE
TABLE MDC (
RH
integer not null,
Mes
integer not null,
item
integer not null,
prog
integer not null,
Lot
integer not null,
Gest
integer not null,
orc
integer not null,
turma
integer,
Proj
integer,
curso
integer,
Comp
integer,
horas
decimal(13,5))
ORGANIZE BY (Mes, orc)
CREATE
RH
Mes
item
prog
Lot
Gest
orc
turma
Proj
curso
Comp
horas
TABLE NaoMDC (
integer not null,
integer not null,
integer not null,
integer not null,
integer not null,
integer not null,
integer not null,
integer,
integer,
integer,
integer,
decimal(13,5))
create index Ind3 on MDC (lot);
create index Ind1 on NaoMDC (Mes);
create index Ind2 on NaoMDC (Orc);
create index Ind3 on NaoMDC (Lot);
Listagem 1a: Instrução SQL para
Listagem 1b: Instrução SQL para
criação de uma relação MDC
criação de uma relação tradicional
3.2. Definição das consultas
A Tabela 2 apresenta as consultas SQL que serão utilizadas para avaliar o desempenho.
Cada consulta explora um determinado tipo de acesso. Por exemplo, a consulta C1,
encontra as tuplas que satisfazem um critério de busca pontual conforme especificado na
cláusula WHERE (mes = 315). Abaixo, segue uma descrição dos tipos de consultas
usadas neste trabalho.
• Point Query – A condição de pesquisa deste tipo consulta baseia-se em um
determinado valor de atributo o qual seja indexado. Este atributo é parte do índice
multidimensional.
•
One Dimension Range Query – A condição de pesquisa deste tipo de consulta
inlcui uma faixa de valores de um determinado atributo. Neste exemplo, a consulta
qualifica as tuplas cujo valor para o atributo mes está na faixa de 315 a 323.
•
Two Dimension Range Query - A condição de pesquisa deste tipo de consulta
inlcui uma faixa de valores para dois determinados atributos. Neste exemplo, a
consulta qualifica as tuplas cujo valor para o atributo mes está na faixa de 315 a 323
e cujos valores para o atributo LOT esteja entre 2800 a 3000.
•
Query on a CELL - Seleciona dados de uma célula em específico. Recupera os
valores de uma combinação única de valores dimensionais, em tuplas que possuem
exatamente os mesmos valores para cada atributo do índice MDC ou índice
tradicional.
•
INDEX ANDing - Executa uma consulta que utiliza como condição where um
intervalo de valores utilizando um dos atributos que compõem a dimensão e outro
intervalo de valores utilizando um atributo que compõem outro índice.
•
INDEX ORing - Executa uma consulta que utiliza como condição um intervalo de
valores condicionado num dos atributos que compõem a dimensão ou(mais) um
intervalo de valores condicionando outro atributo que compõem um índice.
•
Full Table Scan – Executa um comando que percorre toda a relação, ou parte dela,
retornando dados. Nesta, a condição de pesquisa não esta relacionada com os
índices e sim com a leitura total ou parcial da relação, recupera todos os registros do
arquivo e testa se os valores dos atributos satisfazem a condição de seleção ou não.
•
Table Scan With block Predicate - Seleciona dados a partir de uma condição de
pesquisa baseada na exclusão de um bloco de dados.
Instrução SQL
Consulta
Tipo
C1
Point Query
C2
One Dimension
Range Query
select sum(horas) from
mdc
where mes > 315 and mes < 323
C3
Two Dimension
Range Query
select sum(horas) from
mdc
(mes > 315 and mes < 323) and
(orc > 2800 and orc < 3000)
C4
Query on a
CELL
C5
C6
C7
C8
select sum(horas)
from
mdc where
mes = 315
where
select mes, lot, horas from
mes = 313 and orc = 2426
mdc
where
INDEX
ANDing
select mes, lot, horas from
(mes > 313 and mes < 326) AND
(lot > 2426 and lot < 3000)
mdc
where
INDEX
ORing
select rh
from mdc where
(lot > 2800 and lot < 2850) OR
(mes > 315 AND mes < 328)
Full
Table Scan
Table Scan
With block
Predicate
select sum(horas)
from mdc where
gest
<
3000
select mês,lot, horas
from
mdc where
mes not in(326)
Tabela 2: Consultas SQL utilizadas para avaliar o desempenho dos índices.
4. Resultados
A análise dos resultados do estudo de caso pode ser dividida em duas etapas
considerando os diferentes recursos utilizados. A primeira etapa avalia o desempenho
das consultas executadas sobre a base de dados. O desempenho foi medido a partir da
coleta do tempo necessário para a execução de cada consulta. Primeiramente a consulta
foi executada sobre a relação MDC e em seguida sobre a relação NaoMDC. A segunda
etapa avalia o espaço de armazenamento necessário para cada tipo de relação.
4.1. Desempenho das Consultas
Para obter o tempo de execução de uma consulta com precisão maior, antes de cada
execução, o SGBD era parado (stop) e iniciado (start) novamente. Este procedimento
garante que possíveis dados que poderiam estar armazenados nos buffers são eliminados
obrigando assim que cada consulta faria a leitura dos dados a partir do disco rígido.
Outro aspecto a ser considerado diz respeito ao tempo necessário para a exibição dos
resultados. Assim, direcionou-se a saída de cada comando para /etc/null eliminando
assim o tempo para que o sistema exibisse o resultado. Desta forma, garante-se que o
tempo obtido refere-se somente ao tempo de processamento da consulta, independente
da quantidade de linhas que esta consulta produz. A Tabela 3 apresenta o tempo (em
segundos) gasto na execução de cada consulta considerando uma média de 5 execuções.
Número da
Consulta
C1
C2
C3
C4
C5
C6
C7
C8
Tempo (segundos)
Tuplas
Qualificadas
MDC
NaoMDC
0,036
0,391
13296
0,094
0,109
97338
0,016
0,141
40090
0,047
0,078
68
12,718
12,516
107394
13,203
24,938
261358
0,234
0,297
247686
35,515
36,625
300358
Tuplas
Retornadas
1
1
1
68
107394
261358
247686
300358
Tabela 3: Tempo, em segundos, utilizado pelas consultas.
Para facilitar o processo de análise, dividiu-se as consultas em dois grupos os
quais são mostrados na Figura 1a e 1b. A Figura 1a mostra as consultas cujo tempo de
resposta está abaixo de 1 segundo. A Figura 1b mostra as consultas cujo tempo de
resposta é superior a 1 Segundo..
Analisando os dados dos gráficos verifica-se que em geral as consultas
executadas sobre a relação MDC (com índices multidimensionais) obtiveram um tempo
de resposta menor. Das 8 consultas executadas, em 7 a relação com índices MDC obteve
resultados melhores que a relação com índices tradicionais.
Na consulta C1, a relação MDC obteve grande vantagem em comparada à
relação tradicional. Nesta a relação tradicional necessitou de tempo superior a 10 vezes
o tempo necessário pela relação MDC.
Figura 1b. Tempo de respostas
das consultas C5, C6, C8.
Figura 1a. Tempo de resposta das
consultas C1, C2, C3, C4 e C7.
Da mesma forma na consulta C3, a relação com índices MDC obteve grande
vantagem sobre a relação com índices tradicionais sendo aproximadamente 8 vezes mais
rápida. A Consulta C6 também teve um desempenho significativamente melhor na
relação MDC. Ela retornou em praticamente a metade do tempo que a consulta feita
sobre a relação tradicional (NaoMDC).
Nas consultas C2, C4, C7 e C8, novamente a relação MDC executou as
consultas mais rapidamente que a relação com índices tradicionais. Apesar da diferença
não ser tão significativa quanto nas consultas anteriores.
A única consulta que a relação com índices tradicionais executou em menor
tempo foi a consulta C5. Mesmo assim a diferença encontrada foi inferior a 2%.
4.2. Espaço de armazenamento
Consultou-se os metadados do SGBD para verificar o espaço em disco que foi gasto
para armazenar os arquivos de dados e índices para as relações analisadas. A Tabela 4
apresenta relações e a quantidade de páginas de dados e índices alocadas.
Relação
MDC
NaoMDC
Dados
Número de
Espaço em
Páginas
Megabyte
6.476
5.598
25,30
21,87
Índices
Número de
Espaço em
Páginas
Megabyte
536
1.545
2,09
6,04
Tabela 4: Espaço em disco alocado pelas relações.
Analisando a quantidade de páginas de dados utilizados pelas relações, verificase que a relação MDC gasta mais espaço (6.476 páginas de 4KB) comparado a relação
NaoMDC (5.598 páginas de 4KB). Entretanto, a relação MDC é muito mais econômica
em termos de espaço no que tange aos índices. A relação MDC usou apenas 536 páginas
enquanto que a NaoMDC usou 1.545 páginas. A Figura 2 apresenta uma comparação do
espaço, em Megabytes, necessários para armazenar os dados e os índices. Verifica-se
que os dados da relação MDC gasta 25,3 megabytes enquanto que os dados da relação
NaoMDC gasta 21,87 megabytes. Por outro lado, nota-se que o espaço utilizado pelos
índices multidimensionais (2,09 MB) é bastante inferior ao espaço gasto pelos índices
tradicionais (6,04 MB).
Figura 2. Quantidade de espaço em disco ocupado pelas relações.
5. Conclusão
Este artigo apresentou um estudo de caso para avaliar o desempenho de índices
tradicionais e índices multidimensionais bem como o espaço em disco utilizado por
estas diferentes estruturas de índices. Através do estudo de caso notou-se dois aspectos
importantes. O primeiro mostra claramente que as consultas que exploram os índices
multidimensionais têm desempenho superior, comparadas as relações tradicionais.
Foram avaliadas oito diferentes consultas sobre as relações sendo que em 7 as relações
MDC obtiveram desempenho superior. O segundo ponto observado no estudo de caso
refere-se ao espaço em disco gasto por ambas as relações. Observa-se que as relações
MDC gastam mais espaço em disco para os dados, mas gastam menos espaço em disco
para armazenar os índices. A partir destes pontos, conclui-se que o desempenho superior
das consultas obtidas sobre a relação MDC está estreitamente ligado a forma com os
dados e índices estão estruturados fisicamente no disco.
Referências
BHATTACHARJEE,
Bishwaranjan;
CRANSTON,
Leslie;
MALKEMUS,
Tim;
PADMANABHAN, Sriram. Boosting Query Performance: Multidimensional Clustering.
Nova Iorque: DBMagazine, Quarter 2, 2003.
DELAMARE,
Leandro.
“Introdução
ao
http://www.devmedia.com.br/articles/viewcomp.asp?comp=7774.
DB2”`,
2008,
MOLINA, Hector Garcia; ULLMAN, Jeffrey D.; WIDOM, Jennifer. Database Systems – The
complete book. Prentice Hall, 2002.
NAVATHE; ELMASRI. Sistema de Banco de Dados: Fundamentos e Aplicações. Terceira
Edição. Editora LTC, 2002, P 795.
ZIKOPOULOS, Paul C.; BAKLARZ, George; DEROOS, Dirk; MELNYK, Roman. DB2(R)
Version 8: The Official Guide. Prentice Hall PTR, 2003. P 384.
SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de Banco de
Dados. Editora Makron Books, 1999. P 765.
WELGAN, Robert. Comparing Query Performance: MDC vs. Non-MDC Tables. Beaverton:
DB2Magazine, Quarter 2, 2003.
Download

Indices Multidimensionais