• Nenhum resultado encontrado

Bancos de Dados. 15. Processamento e O3mização de Consultas

N/A
N/A
Protected

Academic year: 2021

Share "Bancos de Dados. 15. Processamento e O3mização de Consultas"

Copied!
55
0
0

Texto

(1)

Bancos de Dados

(2)

Introdução

•  Existe nos SGBDR um módulo conhecido como “o3mizador de consultas” •  A expressão “o3mização de consultas”, embora seja frequentemente u3lizada, é na verdade imprópria, pois em alguns casos a estratégia encontrada não é garan3damente a melhor possível (ó3ma) •  Encontrar a estratégia ó3ma consumiria muito tempo, e exigiria o uso de informação dinâmica sobre o conteúdo e organização em disco das tabelas •  Em vez de “o3mização de consultas”, deveríamos dizer “planejamento de execução de consultas”

(3)
(4)

Introdução

•  Em algumas linguagens de consulta, a estratégia está definida na maneira em que o programador implementa a consulta •  Em SQL, que é uma linguagem declara3va, apenas os resultados desejados são especificados •  Portanto, a o3mização de consultas é necessária em SGBD relacionais, baseados em SQL

(5)

Introdução

•  Passos:

–  Tradução de consultas SQL em álgebra relacional –  O3mização usando o resultado da tradução –  Estratégias de o3mização •  Heurís3cas •  Baseadas na es3ma3va de custos •  O3mização semân3ca (recente)

(6)

Ferramentas

•  Algoritmos para ordenação em memória secundária •  Algoritmos para SELECT •  Algoritmos para JOIN •  Algoritmos para PROJECT e operações de conjunto •  Alterna3vas para implementação das operações de agregação e outros 3pos de JOIN (OUTER, LEFT, RIGHT, etc.)

(7)

Ordenação Externa

•  A ordenação é um dos principais recursos para o3mização de consultas –  Usada sempre que aparece ORDER BY –  Usada para implementar algoritmos SORT-MERGE para processar junções –  Usada na eliminação de tuplas duplicadas (cláusula DISTINCT, ou em operações de conjuntos) •  A ordenação pode ser evitada se houver um índice •  Estratégia usual: SORT-MERGE –  Dividir a tabela em pedaços que caibam na memória –  Ordenar cada pedaço e salvar em disco –  Mesclar os pedaços (à la MergeSort) –  Vide E&N para a análise de complexidade

(8)
(9)

Ordenação Externa

•  O tamanho dos buffers de memória disponíveis para o SGBD é importante –  Tuning: definir um balanceamento para divisão da memória entre •  Buffers do SGBD e caches de I/O •  Espaço disponível para o S.O. (paginação, memória virtual) •  No tuning de I/O e do SGBD, o fator crí3co é a memória principal –  Se o SGBD usar memória em excesso, tornará o S.O. lento –  Se usar muito pouca memória, terá seu funcionamento prejudicado –  Servidores de BD 3picamente são configurados com muita memória, mas ter muitos dados em buffers de memória aguardando a gravação defini3va aumenta a dificuldade das operações de recuperação de falhas

(10)

Algoritmos para SELECT

•  Casos gpicos de SELECT

–  OP1: σCPF=‘55590333395’(EMPREGADO)

•  Igualdade, atributo único, possível índice

–  OP2: σNUMDEP>5(DEPARTAMENTO)

•  Não igualdade, atributo único, possível índice

–  OP3: σNUD=5(EMPREGADO)

•  Igualdade em atributo não-chave

–  OP4: σ(NUD=5 AND SALARIO>3000 AND SEXO=F)(EMPREGADO)

•  Múl3plas condições simultâneas (conjun3vas)

–  OP5: σCPFE=‘55590333395’ AND PNO=10(TRABALHA_EM)

(11)

SELECT

•  Algoritmos para implementação de SELECT S1. Busca linear (força bruta) S2. Busca binária S3a. Usar um índice primário S3b. Usar uma chave de hash S4. Usar índice primário para recuperar múl3plos resultados S5. Usar índice em cluster S6. Usar um índice secundário (ex. B+-tree) S7a. Usar índice em bitmap S7b. Usar um índice funcional S8. Métodos de busca para seleção conjun3va (índice composto, interseção de índices, índices mul3dimensionais…) S9. Métodos de busca para seleção disjun3va

(12)

Algoritmos para SELECT

•  S1. Busca linear (força bruta): recuperar todos os registros no arquivo, testando se os valores atendem ou não à condição de seleção •  S2. Busca binária: executada sobre o atributo que determina a ordenação do arquivo (ex.: OP1, se CPF for a chave de ordenação do arquivo) •  S3: Uso de índice primário (ou chave de hashing): executada sobre o atributo que determina a indexação do arquivo. Recupera no máximo um registro (ex.: OP1, se CPF for a chave de indexação)

(13)

Algoritmos para SELECT

•  S4. Uso de índice primário para recuperar múl3plos registros: executado se a comparação não for de igualdade mas for sobre um atributo chave de um índice primário (ex.: NUMDEP em OP2) •  S5. Uso de índice em cluster para recuperar múl3plos registros: executado se a comparação não for de igualdade e for sobre atributo não-chave que possui índice em cluster (ex.: NUD=5 em OP3) •  S6. Uso de índice secundário (B-tree, B+-tree) sobre comparação de igualdade: usado para recuperar um único registro se o atributo de indexação for chave (valores únicos) ou para recuperar múl3plos registros se o atributo de indexação não for chave

(14)

Algoritmos para SELECT

•  S7. Seleção conjun3va usando índice individual: se um atributo envolvido em uma única condição simples em uma cláusula de junção conjun3va possuir um caminho de acesso que permita usar S2 a S6, selecionar com base nesse atributo e checar o atendimento às demais condições em cada registro recuperado •  S8. Seleção conjun3va usando índice composto: se dois ou mais atributos envolvidos em comparações de igualdade na condição de seleção conjun3va, e um índice composto exis3r para esses atributos, selecionar com base nesses atributos e checar o atendimento às demais condições em cada registro recuperado (ex.: OP5, com índice sobre CPFE e PNO)

(15)

Algoritmos para SELECT

•  S9. Seleção conjun3va pela interseção de apontadores de registros: se índices secundários ou outros caminhos de acesso es3verem disponíveis para mais de um dos atributos envolvidos na condição de seleção conjun3va, cada índice pode ser usado para recuperar um conjunto de apontadores para registros que sa3sfazem parcialmente à condição. A interseção entre esses conjuntos indica os registros que devem ser recuperados

(16)

Clodoveu Davis 16

Métodos de acesso

(17)

Ferramentas

•  Es3ma3va da sele3vidade de uma condição –  Cálculo aproximado do custo de uma operação de seleção •  Heurís3ca: baseado no 3po do atributo e no operador de comparação •  Baseado em custos: cálculo apoiado por metadados man3dos pelo SGBD –  Usado na priorização das condições, quando há várias –  Condições mais sele)vas são executadas primeiro

(18)

Clodoveu Davis 18

N_distinct: se -1, provavelmente valores únicos; se < 1, indica % de registros únicos; se > 1, indica

(19)

Ferramentas

•  Algoritmos para implementação de JOIN –  J1. Loops aninhados –  J2. Loops aninhados baseados em índice –  J3. Sort-merge join –  J4. Par33on-hash join •  Es3ma3vas do fator de seleção na junção –  Fração dos registros de uma tabela que serão combinados com registros da outra tabela

(20)

Algoritmos para JOIN

•  JOIN é uma das operações mais pesadas no processamento de consultas •  Serão analisadas aqui apenas EQUIJOINs ou NATURAL JOINs, que são a maioria dos casos (R A=B S) •  Casos gpicos

–  OP6: EMPREGADO DNO=NUMDEP DEPARTAMENTO –  OP7: DEPARTAMENTO CPFGER=CPF EMPREGADO

(21)

Algoritmos para JOIN

•  J1. Junção usando loop aninhado (força bruta): para cada registro r de R, recuperar todo registro s de S e testar se os dois registros atendem a condição de junção •  J2. Junção usando loop simples: requer estrutura de acesso para recuperar os registros correspondentes na outra tabela, portanto um dos atributos da condição de junção precisa ser a chave de um índice •  J3. Junção sort-merge: se os registros de R e de S es3verem fisicamente ordenados pelos atributos A e B, realizar a junção pela varredura simultânea dos dois arquivos (este é o método mais eficiente possível)

(22)

Algoritmos para JOIN

•  J4. Hash-join: os registros de R e de S são espalhados no mesmo arquivo de hash, usando a mesma função de hash e tendo os dois atributos, A e B, como chaves –  Primeira passada: hashing dos registros do arquivo que contém menos registros (R) –  Segunda passada: varredura simples dos registros do outro arquivo (S), testando o atendimento à condição de junção em todos os registros do bucket correspondente à chave de S

(23)

Algoritmos para JOIN

•  Todos os algoritmos devem ser implementados para lidar com blocos de disco inteiros, em vez de registros individuais •  Há muita influência do tamanho do buffer na memória para executar as operações

(24)

Algoritmos para PROJECT e

operações de conjunto

•  O PROJECT é de implementação simples se a lista de atributos con3ver uma chave •  Se não con3ver, é necessário resolver a eliminação de duplicatas •  A eliminação é feita após uma ordenação, mas também pode ser resolvida usando hashing (como em J7) •  Operações de conjunto são caras, em par3cular o produto cartesiano •  A implementação é feita usando variações da técnica sort-merge, ou usando hashing

(25)

Algoritmos para Operações de

Agregação e Outer Joins

•  Os operadores de agregação podem ser implementados usando uma varredura na tabela ou o percurso de um índice, se disponível •  Se exis3r índice, o resultado de MIN e MAX pode ser ob3do diretamente •  O resultado de COUNT pode ser ob3do no índice, sem a necessidade de acessar os registros •  SUM e AVG podem ser muito simplificados se forem sobre um valor indexado

(26)

Algoritmos para Operações de

Agregação e Outer Joins

•  Quando existe cláusula GROUP BY, a tabela deve ser par3cionada em subconjuntos de tuplas •  Isso é feito usando hashing ou ordenando •  Se exis3r um índice em cluster, esse par3cionamento pode já estar pronto para uso •  Outer joins são resolvidos usando variações dos algoritmos de join, como J1 ou J2; no caso, o loop externo tem que ser sobre a tabela ligada ao lado do outer join

(27)

Tradução de Consultas SQL para AR

•  Consultas SQL são decompostas em blocos •  Cada bloco é transformado em uma expressão da AR •  Os blocos são o3mizados internamente e através de decisões sobre a ordem de execução dos blocos •  Um bloco contém um único comando SELECT-FROM-WHERE, incluindo cláusulas GROUP BY e HAVING, se houver

(28)

Tradução de Consultas SQL para AR

•  Exemplo

SELECT nome FROM empregado

WHERE salario > (SELECT MAX(salario) FROM empregado WHERE numdep = 5) SELECT MAX(salario) FROM empregado WHERE numdep = 5 SELECT nome FROM empregado

WHERE salario > c /* c = result.consulta anterior

> F

MAX(salario)(

σ

numdep=5 (empregado))

(29)

Tradução de Consultas SQL para AR

•  No exemplo, a subconsulta interna precisa ser executada apenas uma vez –  Subconsulta não correlacionada –  A ordem ideal é fácil de determinar •  Subconsultas correlacionadas (em que uma variável de tupla do bloco externo aparece no bloco interno) são bem mais complicadas

(30)

Heurís3cas para o3mização de consultas

•  Sequência básica de eventos: –  O parser da consulta gera uma representação interna inicial –  A o3mização é realizada de acordo com regras heurís3cas –  Um plano de execução é construído, de modo a gerar grupos de operações com base nos arquivos e índices envolvidos –  O plano é repassado ao processador de run3me para escalonamento •  Em vez das regras heurís3cas, cálculos baseados em um modelo de custos podem ser usados

(31)

Árvores e grafos de consulta

•  Árvore de consulta: corresponde a uma expressão em AR •  Relações de entrada são representadas em folhas •  Operações são representadas em nós internos •  A execução consiste em executar as operações assim que os operandos correspondentes es3verem disponíveis, e subs3tuir o nó interno com o resultado (uma relação) •  O processo termina quando o nó raiz é executado •  Exemplo: SELECT P.PNUMBER, P.DNUM, E.LNAME, E.ADDRESS, E.BDATE FROM PROJECT P, DEPARTMENT D, EMPLOYEE E WHERE P.DNUM = D.DNUMBER AND D.SSNMGR = E.SSN AND P.LOCATION=‘STAFFORD’

(32)
(33)

Árvores e grafos de consulta

•  Grafos de consulta: relações são indicadas em nós, valores constantes são indicados em nós com linhas duplas, e condições de seleção e junção são indicadas nos arcos •  Grafos de consulta não indicam a ordem de execução, ao contrário das árvores •  Existe apenas um grafo correspondente a cada consulta •  Árvores de consulta são preferidas para a o3mização, pois o processamento precisa ter sua ordem definida

(34)

O3mização heurís3ca de árvores

de consulta

•  Parte de uma árvore “canônica”, obviamente ineficiente mas fácil de compor •  No exemplo anterior, considerando: –  P tem 100 tuplas de 100 bytes –  D tem 20 tuplas de 50 bytes –  E tem 5000 tuplas de 150 bytes •  Os produtos cartesianos resultariam em 10 milhões de tuplas de 300 bytes cada •  Transformações a par3r da árvore canônica usam regras de equivalência entre expressões da AR para melhorar progressivamente esse resultado

(35)

Exemplo

SELECT P.Pnumber, D.Dnum, E.Lname, E.Address, E.Bdate FROM PROJECT P, DEPARTMENT D, EMPLOYEE E

WHERE P.Dnum = D.Dnumber AND D.Mgr_SSN = E.SSN

AND P.Plocation = ‘Stafford’

> Para cada projeto situado em ‘Stafford’, recuperar o número do projeto, o número do departamento que o controla, e o sobrenome, endereço e data de nascimento de seu gerente.

π

Pnumber,Dnum,Lname,Address,Bdate(((

σ

Ploca3on=‘Stafford’ (PROJECT)

Dnum=Dnumber (DEPARTMENT)) Mgr_ssn=Essn (EMPLOYEE))

(36)
(37)

Exemplo, etapa 2

Duas seleções

(PNAME e BDATE) são aplicadas antes dos produtos cartesianos, para reduzir o número de tuplas resultantes

(38)

Exemplo, etapa 3

As posições de EMPLOYEE e

PROJECT são trocadas para que a condição de seleção mais restritiva (PNAME=...) seja

(39)

Exemplo, etapa 4

Produtos cartesianos seguidos de seleção são substituídos por JOINs

(40)

Exemplo, etapa 5

Manter a cada passo apenas os atributos necessários – deslocar as operações

(41)

O3mização heurís3ca de árvores

de consulta

•  As transformações do exemplo são possíveis apenas se forem comprovadamente equivalentes, de modo a não alterar o resultado final •  Ou seja, a cada passo as árvores de consulta são equivalentes •  Existem regras gerais de transformação que garantem a equivalência

(42)

O3mização heurís3ca de árvores

de consulta

•  Regras gerais de transformação

–  R1. Cascata de seleções:

σ

<cond1 E cond2 E ... E condn>(R) =

σ

<cond1>(

σ

<cond2>(...

σ

<condn>(R))

–  R2. Comuta3vidade de seleções:

σ

<cond1>(

σ

<cond2>(R)) =

σ

<cond2>(

σ

<cond1>(R)) –  R3. Cascata de projeções:

π<lista 1>(π<lista 2) (R)) = π<lista 1>(R)

–  R4. Comuta3vidade de SELECT e PROJECT π<lista>(

σ

<cond>(R)) =

σ

<cond> (π<lista> (R))

(43)

O3mização heurís3ca de árvores

de consulta

•  Regras gerais de transformação (cont.) –  R5. Comuta3vidade de JOIN e produto cartesiano R X S = S X R, e (R JOINc S = S JOINc R) –  R6. Comuta3vidade entre SELECT e JOIN (ou X)

σ

<cond1>(R JOINc S) =

σ

<cond1>(R) JOINc S

–  R7. Comuta3vidade entre PROJECT e JOIN (ou X) π<lista>(R JOINc S) = π<listaR>(R) JOINc π<listaS>(S)

•  Se algum atributo usado em c não es3ver nas listas, acrescentar em ambas –  R8. Comuta3vidade das operações de união e interseção –  R9. Associa3vidade de JOIN, X, união e interseção

(

R

θ

S

)

θ

T

=

R

θ

(

S

θ

T

)

(44)

O3mização heurís3ca de árvores

de consulta

•  Regras gerais de transformação (cont.)

–  R10. Comuta3vidade entre SELECT e operações de conjuntos

σ

<cond>(R

θ

S) =

σ

<cond>(R)

θ

σ

<cond>(S)

–  R11. Comuta3vidade entre PROJECT e união

π

<lista>(R U S) =

π

<lista>(R) U

π

<lista>(S)

–  R12. Definição de junção

σ

<cond>(R X S) = R JOINcond A

(45)

O3mização heurís3ca de árvores

de consulta

•  Passos de um algoritmo de o3mização heurís3ca 1.  Usando R1, quebrar operações SELECT com condições conjun3vas em uma cascata de SELECTs 2.  Usando R2, R4, R6, R10, mover cada SELECT para baixo na árvore tanto quanto possível (dependendo dos atributos envolvidos na condição de seleção) 3.  Usando R5, R9 quanto à comuta3vidade e associa3vidade, rearranjar os nós folha de acordo com o seguinte: 3.1 Posicionar os nós folha com condições mais restri3vas para execução mais cedo (produzem menos tuplas, têm o menor tamanho absoluto, ou têm menor sele3vidade) 3.2 Garan3r que a ordenação dos nós folha não provoque a execução de um produto cartesiano (p.ex., as condições mais restri3vas não têm um JOIN em comum, e produzem mais de uma tupla cada)

(46)

O3mização heurís3ca de árvores

de consulta

•  Algoritmo (cont.) 4.  Usando R12, combinar produtos cartesianos com SELECTs subseqüentes para formar JOINs 5.  Usando R3, R4, R7 e R11, quebrar em partes e mover para baixo tanto quanto possível as operações PROJECT, mantendo apenas os atributos necessários para processamento dos passos subseqüentes 6.  Iden3ficar sub-árvores que representem grupos de operações que possam ser executadas por um único algoritmo de recuperação, possivelmente sem a necessidade de armazenamento de resultados intermediários (execução em pipeline versus execução materializada)

(47)

Sele3vidade e es3ma3vas de

custos para o3mização

•  As regras heurís3cas não são suficientes em todos os casos •  Existem situações de o3mização que podem ser melhor resolvidas se exis3r informação sobre os volumes de dados envolvidos •  Para que isso funcione corretamente, as es3ma3vas de custos têm que ser realistas e justas •  O custo do processamento das alterna3vas também não pode ser excessivo •  Es3ma3vas de custos são mais empregadas em consultas compiladas antecipadamente, enquanto para consultas intera3vas a escolha de uma alterna3va pode afetar o tempo de resposta

(48)

Sele3vidade e es3ma3vas de

custos para o3mização

•  A o3mização de consultas baseada em custos usa técnicas de o3mização propriamente ditas para encontrar a solução ó3ma em um espaço de soluções, minimizando o valor de uma função obje)vo (função de custo) •  As funções obje3vo são aproximadas, e portanto nem quando a solução ó3ma do problema de custos é encontrado podemos garan3r que se trata da solução ó3ma da estratégia para a consulta

(49)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Componentes de custo –  Custo do acesso à memória secundária –  Custo de armazenamento (temporário) –  Custo computacional (busca, ordenação, cálculos, etc.) –  Custo de uso de memória principal (buffers necessários) –  Custo de comunicação (envio/recebimento da consulta e resultados) •  Para grandes BD, a ênfase é na minimização do custo de acesso à memória secundária •  Para BD de pequeno porte (cabe quase tudo na memória), a ênfase pode ser no custo computacional •  Em BD distribuídos, o custo de comunicação pode ser predominante •  Em muitos casos, considera-se apenas o custo do acesso ao disco

(50)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Uso de informações do catálogo –  Número de registros (tuplas) (r) –  Tamanho médio do registro (R) –  Número de blocos de disco (b) –  Fator de bloco (número de registros por bloco) (ƒ) –  Número de níveis dos índices mul3nível (x) –  Número de valores dis3ntos de um atributo (d) –  Sele3vidade (sl): fração dos registros que sa3sfaz a uma condição de igualdade sobre o atributo (ex.: em 1000 registros, a sele3vidade de um atributo CPF é 0,001; a de um atributo sexo é 0,50) •  Atributo chave: sl = 1/r •  Atributo não chave: sl = d/r –  Cardinalidade da seleção (s): número médio de registros que sa3sfaz a uma condição de igualdade sobre o atributo (s = sl * r) •  Essas informações são aproximadas, dificilmente estarão totalmente atualizadas

(51)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Exemplos de uso de funções de custo para SELECT

–  Supondo r(EMPREGADO) = rE = 10000, bE = 2000, bfE = 5 –  Caminhos de acesso

•  Índice em cluster sobre o atributo SALARIO, com xSAL = 3 níveis e cardinalidade sSAL = 20

•  Índice secundário sobre o atributo chave CPF, com xCPF=4 e sCPF = 1 •  Índice secundário sobre o atributo NUD, com xNUD=2 e bNUD = 4

blocos no primeiro nível, sendo dNUD=125, e portanto sNUD=10000/125 = 80

•  Índice secundário sobre o atributo SEXO, com xSEXO=1, sendo dSEXO = 2, e portanto sSEXO = 5000

(52)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Exemplos (custos em número de acessos a disco) –  OP1:

σ

CPF=‘55590333395’(EMPREGADO) •  Opções: S1 (força bruta) ou S6 (B-Tree, com igualdade) –  Custo de S1 = 2000/2 = 1000 (busca seqüencial por atrib. chave) –  Custo de S6 = xCPF + 1 = 4 + 1 = 5

–  OP2:

σ

NUMDEP>5(DEPARTAMENTO)

•  Opções: S1 (força bruta) ou S6 (B-Tree, com “>”)

–  Custo de S1 = 2000 (busca seqüencial por atrib. não chave)

–  Custo de S6 = xNUD + (bNUD / 2) + (r / 2) = 2 + 4/2 + 10000/2 = 5004 (1 bloco por nível + metade dos blocos em cada nível + metade dos registros via índice)

(53)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Exemplos (custos em número de acessos a disco)

–  OP3:

σ

NUD=5(EMPREGADO)

•  Opções: S1 ou S6

–  Custo de S1= 2000 (busca seqüencial por atrib. não chave) –  Custo de S6 = xNUD + sNUD = 2 + 80 = 82

–  OP4:

σ

(NUD=5 AND SALARIO>3000 AND SEXO=F)(EMPREGADO)

•  Opções: S1 ou S6

–  Custo de S1 = 2000

–  Custo de S6 sobre NUD = 82 (cf. acima)

–  Custo de S6 sobre SALARIO = xSAL + bE / 2 = 3 + 2000/2 = 1003 –  Custo de S6 sobre SEXO = xSEXO + sSEXO = 1 + 5000 = 5001

•  Executar a seleção sobre NUD, executando a parte final da condição sobre cada registro recuperado

(54)

Sele3vidade e es3ma3vas de

custos para o3mização

•  Para que se tenha es3ma3vas minimamente precisas para operações de junção, é necessário es3mar a quan3dade de tuplas que resulta –  É em geral definido como a fração de tuplas resultantes da junção sobre a quan3dade de tuplas produzidas por um produto cartesiano –  Sele)vidade da junção (join selec3vity, js) –  js = | (R JOINc S) | / | (R X S) | = | (R JOINc S) | / |R| * |S| –  Caso especial: condição de junção é R.A = S.B •  Se A é chave de R, então js <= 1 / |R| •  Se B é chave de S, então js <= 1 / |S| •  Loops aninhados (J1) ou loops únicos (J2) devem ser escolhidos com base na tabela com menos registros •  Vide seções 15.8.4 e 15.8.6 para es3ma3vas completas de custos em exemplos

(55)

Referências

•  Capítulo 18 e 19 de Elmasri & Navathe 7ª Edição

•  Vide: seção sobre estratégias de o3mização no ORACLE e documentação do ORACLE

Referências

Documentos relacionados

Coletaram-se informações referentes à habilitação pro- fissional dos docentes; suas fontes de conhecimentos sobre a Guerra do Contestado; seu conhecimento referente aos redutos

Os instrumentos de pesquisa utilizados serão: Ficha de Rastreamento das Participantes do Estudo, International Consultation on Incontinence Questionnaire – Short Form

Nosso ponto de partida metodológico é observar e descrever a interação do individuo desde sua infância mais imatura com seu contexto social, cultural, econômico, político com

Triagem da infecção pelo HCV por meio de testes rápidos em indivíduos maiores de 18 meses.. Fonte: Manual Técnico para o Diagnóstico das

De maneira geral, o apoio, a valorização e os investimentos são os fatores que mais contribuem para o crescimento e desenvolvimento do paradesporto nacional,

Capitalismo Sindical” e consiste basicamente em dizer que processos políticos podem ter o seu princípio alterado em detrimento de uma outra classe social. No caso das Primaveras

Tabela 3 - Duração do ciclo após a germinação, produtividade, eficiência no uso da água em cenários climáticos futuros RCP4.5 para o milho semeado em 10 de outubro.. Já para

Segundo Brown (2004), apoiado principalmente no trabalho de Warren e Nisbet (1999), é possível conceber que os indivíduos, quer sejam professores ou estudantes, geralmente