quarta-feira, 17 de abril de 2013

Criando "indices virtuais" para avaliação do plano de acesso no db2

Olá pessoal,

Tinha o seguinte cenário aqui no meu banco de dados.
Uma aplicação gerava uma query de relatório que estava demorando cerca de 30 minutos para retornar os resultados. Olhando o db2advis, ele sugeriu a criação de um indice em uma tabela GIGANTE do meu sistema.

db2advis -d nome_do_banco -i arquivo.sql 

E ai pensei: Bom, vou ter um trabalho imenso em criar esse indice, mas será que o plano de acesso vai melhorar?

Dessa forma, encontrei uma opção dentro do comando "explain mode", que irá criar os índices recomendados, na tabela ADVISE_INDEX, fazendo assim com que o explain do db2 entenda que eles já estão disponíveis fisicamente.

[db2inst1@myserver tmp]$ db2 set current explain mode recommend indexes
DB20000I  The SQL command completed successfully.

Depois disso, rodei a query que necessita de um indice novo.

[db2inst1@myserver tmp]$ db2 -tf arquivo.sql
SQL0217W  The statement was not executed as only Explain information requests
are being processed.  SQLSTATE=01604

E finalmente rodei o db2explain.


[db2inst1@myserver tmp]$ db2exfmt -d nome_do_banco
DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DATABASE 2 Explain Table Format Tool

Connect to Database Successful.
....

Custo da query, antes e depois:

Access Plan:
-----------
        Total Cost:             21815.9
        Query Degree:           1



Access Plan:
-----------
        Total Cost:             1202.9
        Query Degree:           1



Com isso, eu consegui me certificar que o custo realmente cairia bastante, com a criação dos indices recomendados.

Para sair do modo explain, execute:


[db2inst1@myserver tmp]$ db2 set current explain mode no
DB20000I  The SQL command completed successfully.










Nenhum comentário:

Postar um comentário