workshop db2 desempenho e boas práticas em comandos sql v00 01

42
Instrutor: Ivan Alves Tavares Jr Instrutor: Ivan Alves Tavares Jr DB2 UDB 8.2 Database Certified Administrator (LUW) DB2 UDB 8.2 Database Certified Administrator (LUW) Recife, Dezembro de 2006 Workshop IBM DB2 UDB 8.2 Boas práticas e dicas de performance

Upload: itavaresjr

Post on 26-Oct-2014

107 views

Category:

Documents


4 download

DESCRIPTION

DB2 desempenho e boas práticas em comandos SQL

TRANSCRIPT

Page 1: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Instrutor: Ivan Alves Tavares JrInstrutor: Ivan Alves Tavares JrDB2 UDB 8.2 Database Certified Administrator (LUW)DB2 UDB 8.2 Database Certified Administrator (LUW) Recife, Dezembro de 2006

Workshop IBM DB2 UDB 8.2

Boas práticas e dicas de performance

Page 2: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

RoteiroRoteiro Ambiente DB2Ambiente DB2 Ferramentas de acesso ao banco de dadosFerramentas de acesso ao banco de dados Dicas comandos SQL Dicas comandos SQL

Page 3: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2

Page 4: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2

Page 5: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2

Page 6: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Ferramentas disponíveisFerramentas disponíveis

Page 7: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Janela de comandosJanela de comandos

Page 8: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Processador de Linha de ComandosProcessador de Linha de Comandos

Page 9: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Assistente de Configuração do ClienteAssistente de Configuração do Cliente

Page 10: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Centro de ControleCentro de Controle

Page 11: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Centro de ControleCentro de Controle

Page 12: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Centro de ControleCentro de Controle

Page 13: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2 Ambiente DB2 Instâncias / Databases / SchemasInstâncias / Databases / Schemas

SchemasSchemas São qualificadores de alto nível que agrupam objetos num São qualificadores de alto nível que agrupam objetos num

banco de dados DB2. Schemas podem ser de usuário ou de banco de dados DB2. Schemas podem ser de usuário ou de sistema.sistema.

System Schemas System Schemas SYSIBM:

O catálogo básico de metadados dos objetos de um database; SYSCAT:

Catálogo com visões (read-only) dos metadados dos objetos de um database – forma recomendada de se obter informações de um objeto de banco de dados;

SYSFUN: Funções definidas por usuários.

Page 14: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2 Ambiente DB2 Instâncias / Databases / SchemasInstâncias / Databases / Schemas

Os Schemas de usuários são atrelados a um login Os Schemas de usuários são atrelados a um login de acesso ao DB2.de acesso ao DB2.

Um login pode definir vários Schemas.Um login pode definir vários Schemas.

Os schemas agrupam tabelas, visões, triggers e Os schemas agrupam tabelas, visões, triggers e procedures, bem como definem os nomes destes procedures, bem como definem os nomes destes objetos:objetos:

SISWEB.tab_Usuarios ADMRH.vw_Colaboradores

Select UserID, UserNM From ADMRH.vw_ColaboradoresSelect UserID, UserNM From ADMRH.vw_Colaboradores

Page 15: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Ambiente DB2Ambiente DB2Instâncias / Databases / SchemasInstâncias / Databases / Schemas

Page 16: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

SELECT ’The price for ' || SUBSTR(title, 1, 40) ||' is $' || CAST(price AS VARCHAR(10))FROM titles

SELECT ’The price for ' || SUBSTR(title, 1, 40) ||' is $' || CAST(price AS VARCHAR(10))FROM titles

The price for The Busy Executive’s Database Guide is $19.99The price for Cooking with Computers: Surreptitious is $11.95The price for You Can Combat Computer Stress! is $ 2.99The price for Straight Talk About Computers is $19.99. . .. . .. . .The price for Onions, Leeks, and Garlic: Cooking Sec is $20.95The price for Fifty Years in Buckingham Palace Kitch is $11.95The price for Sushi, Anyone? is $14.99

(18 row(s) affected)

titlestitles

Page 17: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

Simple CASE Expression:Simple CASE Expression:

Searched CASE Expression:Searched CASE Expression:

CASE expression WHEN expression1 THEN expression1 [[WHEN expression2 THEN expression2] [...]] [ELSE expressionN]

END

CASE expression WHEN expression1 THEN expression1 [[WHEN expression2 THEN expression2] [...]] [ELSE expressionN]

END

CASE WHEN Boolean_expression1 THEN expression1 [[WHEN Boolean_ expression2 THEN expression2] [...]] [ELSE expressionN]

END

CASE WHEN Boolean_expression1 THEN expression1 [[WHEN Boolean_ expression2 THEN expression2] [...]] [ELSE expressionN]

END

Page 18: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQLSELECT (CASE LANCTB.IN_SINAL_LANC WHEN 'D' THEN (LANCTB.VL_LANC_DET)

ELSE 0.00 END) AS MOVIMENTO_DEBITO

, (CASE LANCTB.IN_SINAL_LANC WHEN 'C' THEN (LANCTB.VL_LANC_DET)

ELSE 0.00 END) AS MOVIMENTO_CREDITO

FROM LANCAMENTO_CONTABIL AS LANCTB INNER JOIN LANCAMENTO AS LANCMT ON LANCMT.DT_ANO_EXERC = LANCTB.DT_ANO_EXERC AND LANCMT.CD_UG_EMITENTE = LANCTB.CD_UG_EMITENTE AND LANCMT.CD_TIPO_DOC = LANCTB.CD_TIPO_DOC

INNER JOIN CONTA_CONTABIL AS CTACTB ON CTACTB.CD_CONTA_CONTABIL = LANCTB.CD_CONTA_CONTABIL

WHERE LANCTB.DT_ANO_EXERC = 2006 AND LANCTB.CD_UG_DESTINO = 560100 AND LANCTB.CD_CONTA_CONTABIL BETWEEN 999920101 AND 999920101 AND LANCMT.DT_LANCAMENTO BETWEEN '2006-01-01' AND '2006-04-13' AND LANCTB.CD_CONTA_CORRENTE = ‘9#056010#9999010123600#08025#XX12’

Page 19: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

COALESCE Avalia uma série de COALESCE Avalia uma série de valores e retorna o primeiro valor valores e retorna o primeiro valor Não NULLNão NULL

COALESCE (expression1, expression2, ... expressionN)COALESCE (expression1, expression2, ... expressionN)

Select coalesce (salario, comissao * venda) as proventos

from vendas

Page 20: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

172-32-1176213-46-8915238-95-7766267-41-2394...846-92-7186893-72-1158

WhiteGreenCarsonO’Leary...HunterMcBadden

JohnsonMarjorieCherylMichael...SherylHeather

408 496-7223415 986-7020415 548-7723408 286-2428...415 836-7128707 448-4982

10932 Bigge Rd.309 63rd St. #411589 Darwin Ln.22 Cleveland Av. #14...3410 Blonde St.301 Putnam

Menlo ParkOaklandBerkeleySan Jose...Palo AltoVacaville

CACACACA...CACA

94025946189470595128...9430195688

1111...10

au_id au_lname au_fname phone address city state zip contract

authorsauthors

(16 row(s) affected)

SELECT *FROM authorsWHERE zip > '90000'

SELECT *FROM authorsWHERE zip > '90000'

Page 21: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

SELECT au_lname, city FROM authors WHERE state = 'CA'

SELECT au_lname, city FROM authors WHERE state = 'CA'

Menlo ParkOaklandBerkeleySan Jose...OaklandOaklandPalo AltoVacaville

WhiteGreenCarsonO’Leary...MacFeatherKarsenHunterMcBadden

au_lname city

(15 row(s) affected)

authorsauthors

Evitem o uso de * na lista de atributos do

comando Select

Page 22: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

SELECT stor_name FROM stores WHERE stor_name = 'Book'

SELECT stor_name FROM stores WHERE stor_name = 'Book'

SELECT stor_name FROM stores WHERE stor_name LIKE 'Book'

SELECT stor_name FROM stores WHERE stor_name LIKE 'Book'

Se o atributo for CHAR, ele será preenchido com brancos a direita:

Ex: CHAR(30) - Tereza Lira....................

Se o atributo for VARCHAR, ele não será completado por brancos a direita

O uso do operador “=“, despreza a existência de brancos a direita

O operador “LIKE” é influenciado pela existência de brancos a direita

Page 23: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

JunçõesJunções

Juntar Informação de duas ou mais tabelas, Juntar Informação de duas ou mais tabelas, através de algum atributo em comumatravés de algum atributo em comum

Uso da sintaxe ANSI SQL ou sintaxe Uso da sintaxe ANSI SQL ou sintaxe proprietáriaproprietária

SELECT table_name.column_name, table_name.column_name [,table_name.column_name ...] FROM {table_name, table_name }

WHERE table_name.column_name join_operator table_name.column_name

SELECT table_name.column_name, table_name.column_name [,table_name.column_name ...] FROM {table_name, table_name }

WHERE table_name.column_name join_operator table_name.column_name

Outra SintaxeOutra Sintaxe

SELECT table_name.column_name, tabela_name.column_name [,table_name.column_name ...] FROM {table_name [join_type] JOIN tabela

ON search_conditions} WHERE [search condition ...]

SELECT table_name.column_name, tabela_name.column_name [,table_name.column_name ...] FROM {table_name [join_type] JOIN tabela

ON search_conditions} WHERE [search condition ...]

ANSI SQLANSI SQL

Page 24: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Inner JoinInner Join

SELECT pub_name, title

FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id

SELECT pub_name, title

FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id

titlestitlestitlestitlestitle_idtitle_id titletitle pub_idpub_id

BU 1032PC 1035BU 2075PS 2091PS 2106...

BU 1032PC 1035BU 2075PS 2091PS 2106...

The Busy Executive’sBut Is It User Friendly?You Can Combat Co...Is Anger the Enemy?Life Without Fear

The Busy Executive’sBut Is It User Friendly?You Can Combat Co...Is Anger the Enemy?Life Without Fear

13891389073607360736...

13891389073607360736...

resultsresultsresultsresultspub_namepub_name

Algodata InfosystemsAlgodata InfosystemsNew Moon BooksNew Moon BooksNew Moon Books.(17 row(s) affected)

Algodata InfosystemsAlgodata InfosystemsNew Moon BooksNew Moon BooksNew Moon Books.(17 row(s) affected)

titletitle

The Busy Executive’s..But is It User Friendly?You Can Combat Co...Is Anger the Enemy?Life Without Fear.

The Busy Executive’s..But is It User Friendly?You Can Combat Co...Is Anger the Enemy?Life Without Fear.

publisherspublisherspublisherspublisherspub_idpub_id pub_namepub_name citycity

138907360877

138907360877

Algodata InfosystemsNew Moon BooksBinnet & Hardley

Algodata InfosystemsNew Moon BooksBinnet & Hardley

BerkleyBostonWashington

BerkleyBostonWashington

Page 25: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Inner JoinInner Join

SELECT stor_name, qty, title

FROM titles INNER JOIN sales ON titles.title_id = sales.title_id INNER JOIN stores ON stores.stor_id = sales.stor_id

SELECT stor_name, qty, title

FROM titles INNER JOIN sales ON titles.title_id = sales.title_id INNER JOIN stores ON stores.stor_id = sales.stor_id

titlestitlestitlestitles

title_idtitle_id title title typetype stor_id

stor_id

BU1032PC1035BU2075BU1111

BU1032PC1035BU2075BU1111

The Busy Executive’s Databa... But Is It User Friendly?You Can Combat Computer ...Cooking with Computers:Surreptitious Balance Sheets

The Busy Executive’s Databa... But Is It User Friendly?You Can Combat Computer ...Cooking with Computers:Surreptitious Balance Sheets

businesspopular_compbusinessbusiness

businesspopular_compbusinessbusiness

1389138907361389

1389138907361389

resultsresultsresultsresultsstor_namestor_name qtyqty titletitle

BookbeatFricative Bookshop..

BookbeatFricative Bookshop..

2535..

2535..

Cooking with Computers: Surreptitious Balance SheetsYou Can Combat Computer Stress!..

Cooking with Computers: Surreptitious Balance SheetsYou Can Combat Computer Stress!..

storesstoresstoresstores

stor_idstor_id stor_namestor_name stor_address stor_address city city

7066706780427896

7066706780427896

Barnum’sNews & BrewsBookbeatFricative Boo..

Barnum’sNews & BrewsBookbeatFricative Boo..

567 Pasadena577 First St679 Carson St.89 Madison St.

567 Pasadena577 First St679 Carson St.89 Madison St.

TustinLos GatosPortlandFremont

TustinLos GatosPortlandFremont

salessalessalessales

stor_id stor_id date date title_id title_id qty qty

7066706778968042

7066706778968042

09/13/8509/14/8509/14/8509/14/85

09/13/8509/14/8509/14/8509/14/85

PS2091PS2091 BU2075BU1111

PS2091PS2091 BU2075BU1111

75103525

75103525

Page 26: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Left / Right Outer JoinLeft / Right Outer Join

SELECT titles.title_id, title, qty FROM titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id

SELECT titles.title_id, title, qty FROM titles LEFT OUTER JOIN sales ON titles.title_id = sales.title_id

titlestitlestitlestitlestitle_idtitle_id

BU1032BU1111BU2075BU7832MC2222MC3021

BU1032BU1111BU2075BU7832MC2222MC3021

titletitle

The Busy Executive’s Database GuideCooking with Computers: Surreptitious Balance You Can Combat Computer Stress!Straight Talk About ComputersSilicon Valley Gastronomic TreatsThe Gourmet Microwave

The Busy Executive’s Database GuideCooking with Computers: Surreptitious Balance You Can Combat Computer Stress!Straight Talk About ComputersSilicon Valley Gastronomic TreatsThe Gourmet Microwave

salessalessalessalesstor_idstor_id

6380638070667066

6380638070667066

qtyqty

535075

535075

title_idtitle_id

BU1032PS2091PC8888PS2091

BU1032PS2091PC8888PS2091

resultsresultsresultsresultstitle_idtitle_id

BU1032BU1032BU1111BU2075..MC3026..

PC9999

(23 row(s) affected)

BU1032BU1032BU1111BU2075..MC3026..

PC9999

(23 row(s) affected)

titletitle

The Busy ExecutiveThe Busy Executive Cooking with CompYou Can Combat ..The Psychology of..

Net Etiquette

The Busy ExecutiveThe Busy Executive Cooking with CompYou Can Combat ..The Psychology of..

Net Etiquette

qtyqty

5102535..(null)..

(null)

5102535..(null)..

(null)

Page 27: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Funções AgregadasFunções Agregadas

Funções UsoAVG MédiaCOUNT ContabilizarSUM SomatórioMAX Valor MáximoMIN Valor Mínimo

Podem ser utilizadas sem Group By

Select Max(Valor) as Maior from tab;

Select Count(*) as Qtde from tab;

Page 28: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Dicas Comandos SQLDicas Comandos SQL

SELECT UF_SG, COUNT(PESSOA_CD) from t_end GROUP BY UF_SG

SELECT UF_SG, COUNT(PESSOA_CD) from t_end GROUP BY UF_SG

PESSOA_ CD LOGR_ ID UF_ SG MUNC_ ID

18 PB 2570

1243 PB 2570

1098 PE 2437

123 PE 2437

3012 PE 4066

2345 PE 4066

500 PE 4066

456 PE 4066

UF_ SG COUNT(PESSOA_ CD)

PB 2

PE 6

Page 29: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Group ByGroup By

SELECT UF_SG, MUNC_ID, COUNT(PESSOA_CD) from t_end

GROUP BY UF_SG, MUNC_ID

SELECT UF_SG, MUNC_ID, COUNT(PESSOA_CD) from t_end

GROUP BY UF_SG, MUNC_ID

PESSOA_ CD LOGR_ ID UF_ SG MUNC_ ID

18 PB 2570

1243 PB 2570

1098 PE 2437

123 PE 2437

3012 PE 4066

2345 PE 4066

500 PE 4066

456 PE 4066

UF_ SG MUNC_ ID COUNT(PESSOA_ CD)

PB 2570 2

PE 2437 2

PE 4066 4

Page 30: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

HavingHaving

SELECT UF_SG, MUNC_ID, COUNT(PESSOA_CD) from t_end

GROUP BY UF_SG, MUNC_ID HAVING COUNT(PESSOA_CD) > 2

SELECT UF_SG, MUNC_ID, COUNT(PESSOA_CD) from t_end

GROUP BY UF_SG, MUNC_ID HAVING COUNT(PESSOA_CD) > 2

PESSOA_ CD LOGR_ ID UF_ SG MUNC_ ID

18 PB 2570

1243 PB 2570

1098 PE 2437

123 PE 2437

3012 PE 4066

2345 PE 4066

500 PE 4066

456 PE 4066

UF_ SG MUNC_ ID COUNT(PESSOA_ CD)

PE 4066 4

Page 31: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Uso correto do Group By Uso correto do Group By

(SELECT UF_SG, MUNC_ID , COUNT(PESSOA_CD) as Qtde

From t_end

GROUP BY UF_SG, MUNC_ID) as Calculo

SELECT UF_NM, MUNC_NM, Calculo.Qtde FROM t_Local INNER JOIN

ON t_Local.MUNC_ID = Calculo.MUNC_ID INNER JOIN t_UF ON t_UF.UF_SG = Calculo.UF_SG

Page 32: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

IndexIndex

Quando um comando SQL é compilado, o otimizador de consultas estima o custo de execução de diferentes formas de satisfazer uma consulta.

Existem duas formas de acesso aos dados:

• Relational (Table) Scan

Leitura sequencial dos resgistros da tabela

• Index Scan

Leitura da estrutura de índice, agilizando o acesso aos dados

Page 33: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Uso do DistinctUso do Distinct

A cláusula DISTINCT retira linhas em duplicidade, A cláusula DISTINCT retira linhas em duplicidade, como resultado de um comando SELECTcomo resultado de um comando SELECT A cláusula DISTINCT cria tabelas temporárias para poder A cláusula DISTINCT cria tabelas temporárias para poder

eliminar as linhas em duplicidadeeliminar as linhas em duplicidade Usar o DISTINCT num SELECT que retorne campos string Usar o DISTINCT num SELECT que retorne campos string

grandes é desaconselhável do ponto de vista de grandes é desaconselhável do ponto de vista de performanceperformance

Se for imprescindível usar o DISTINCT, optar por faze-lo Se for imprescindível usar o DISTINCT, optar por faze-lo em cima de campos numéricosem cima de campos numéricos

Muitas vezes o uso do DISTINCT esta mascarando Muitas vezes o uso do DISTINCT esta mascarando um comando SQL mal construído um comando SQL mal construído

Page 34: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

ÍndiceÍndice

Para que utilizar índices ?Para que utilizar índices ? Garantir valores únicos (PK e Unique index)Garantir valores únicos (PK e Unique index) Pode ordenar os registros da tabela fisicamente Pode ordenar os registros da tabela fisicamente

(parâmetro cluster)(parâmetro cluster) Agilizar acesso aos dadosAgilizar acesso aos dados

Qual a diferença entre PK, FK e índices ?Qual a diferença entre PK, FK e índices ? PK: índice principal (campos obrigatórios)PK: índice principal (campos obrigatórios) índice: estruturas auxiliares para agilizar acesso aos índice: estruturas auxiliares para agilizar acesso aos

registros (aceita ausência de valor: NULL)registros (aceita ausência de valor: NULL) FK: Garante a integridade referencial do dado, verificando FK: Garante a integridade referencial do dado, verificando

se o mesmo existe numa tabela principal. Não gera índicese o mesmo existe numa tabela principal. Não gera índice..

Page 35: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

ÍndiceÍndice

Page 36: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

ÍndiceÍndice

Page 37: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Índice – Simulação de uma InclusãoÍndice – Simulação de uma Inclusão

Localizar a folha onde a chave deve ser Inserida Se houver espaço, insere Senão quebrar página em duas e promover chave do

meio para o nível acima. Executar passo anterior para inserir chave promovida no nó pai.http://slady.net/java/bt/view.php?w=800&h=600

Page 38: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

ÍndiceÍndice

Utilizem sempre que possível filtros nas Utilizem sempre que possível filtros nas consultasconsultas

Montem a ordem do filtro (WHERE), baseado Montem a ordem do filtro (WHERE), baseado na ordem do índice existente para a tabelana ordem do índice existente para a tabela

Exemplo:Exemplo:

Where DT_ANO = 2006 DT_ANO = 2006

And CD_UG = 905602And CD_UG = 905602

And SQ_GESTAO = 4And SQ_GESTAO = 4

Page 39: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

TransaçõesTransações

Begin TransactionBegin Transaction

Insert into Tabela01Insert into Tabela01

Insert into Tabela02Insert into Tabela02

Insert into Tabela06Insert into Tabela06

Update Tabela03Update Tabela03

Update Tabela05Update Tabela05

Delete Tabela10Delete Tabela10

......

Commit TransactionCommit Transaction

Garantir atualizações atômicas em duas os mais tabelasGarantir atualizações atômicas em duas os mais tabelas

O usuário que iniciar as transações terá que ter O usuário que iniciar as transações terá que ter autorização em todas as tabelas envolvidasautorização em todas as tabelas envolvidas

Page 40: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Monitorar TransaçõesMonitorar Transações

Begin TransactionBegin Transaction

Insert into Tabela01Insert into Tabela01

Insert into Tabela02Insert into Tabela02

Insert into Tabela06Insert into Tabela06

Update Tabela03Update Tabela03

Update Tabela05Update Tabela05

Delete Tabela10Delete Tabela10

......

Commit TransactionCommit Transaction

db2 update monitor switches using LOCK ONdb2 update monitor switches using LOCK ON db2 update monitor switches using STATEMENT ONdb2 update monitor switches using STATEMENT ON db2 update monitor switches using UOW ONdb2 update monitor switches using UOW ON

db2 get snapshot for locks on <database name>db2 get snapshot for locks on <database name>

Documento do WordPad

Page 41: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Melhoria de PerformanceMelhoria de Performance

Conheçam profundamente o modelo de dados Conheçam profundamente o modelo de dados

Evitem reutilizar consultas de forma indiscriminadaEvitem reutilizar consultas de forma indiscriminada

““Consultas mágicas” não existem Consultas mágicas” não existem

Evitem o uso de DISTINCTEvitem o uso de DISTINCT

Cuidado ao utilizar a cláusula GROUP ByCuidado ao utilizar a cláusula GROUP By

Eliminar acessos desnecessários a tabelas e viewsEliminar acessos desnecessários a tabelas e views

Só incluir nos Joins tabelas de onde se retornarão Só incluir nos Joins tabelas de onde se retornarão dados, usando a cláusula Where para os filtros dados, usando a cláusula Where para os filtros necessáriosnecessários

Page 42: Workshop DB2 desempenho e boas práticas em comandos SQL v00 01

Workshop DB2 UDBWorkshop DB2 UDB

Melhoria de PerformanceMelhoria de Performance

Analisem as necessidades de consultas e criem Analisem as necessidades de consultas e criem tantas consultas quanto necessário.tantas consultas quanto necessário.

Verifiquem junto a equipe de banco de dados Verifiquem junto a equipe de banco de dados como foi montado o plano de execução da como foi montado o plano de execução da consulta.consulta.

Estudar junto a equipe de banco de dados a Estudar junto a equipe de banco de dados a criação de índices para agilizar o retorno dos criação de índices para agilizar o retorno dos dados consultados e minimizando as “Tables dados consultados e minimizando as “Tables Scans”.Scans”.

Se tiverem dúvidas quanto ao uso de comandos Se tiverem dúvidas quanto ao uso de comandos SQL procurem a equipe de banco de dadosSQL procurem a equipe de banco de dados