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