quarta-feira, 22 de maio de 2013
Converter segundos (decimal) para timestamp
Pessoal,
Vou descrever como converter um campo em segundos para timestamp.
Imaginem um campo que guarda a data do último boot de um servidor, mas ao invés de estar no formato timestamp, ele está guardado como um DECIMAL(10).
Exemplo;
[db2inst1@myserver ~]$ db2 "select BOOT_TIME from mytable fetch first row only"
BOOT_TIME
------------
1231982035.
1 record(s) selected.
Esse valor corresponde a quantidade de segundos que se passaram após a data de 1/1/1970.
Para transforma-lo no timestamp, podemos converter esse campo diretamente, passando como parametro o valor guardado:
[db2inst1@myserver ~]$ db2 "select BOOT_TIME, timestamp('1970-01-01','00:00:00') + BOOT_TIME SECONDS as timestamp from mytable fetch first row only"
BOOT_TIME TIMESTAMP
------------ --------------------------
1231982035. 2009-01-15-01.13.55.000000
1 record(s) selected.
Ou seja, o valor 1231982035 corresponde a data 2009-01-15-01.13.55.000000, no formato YYYY-MM-DD-HH.MM.SS.MMMMMM.
Abs.
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.
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.
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.
Assinar:
Postagens (Atom)