Baixar este arquivo PDF

Propaganda
Caderno de Estudos Tecnológicos
Uma abordagem prática sobre otimização de Banco de Dados
utilizando o gerenciamento automático de memória no Sistema
Gerenciador de Banco de Dados Oracle
Bruno P. Macedo1, José Mario P. Climaites1, Natanael S. Soares1.
Gustavo C. Bruschi²
1
Graduando em Tecnologia em Banco de Dados – Faculdade de Tecnologia de Bauru (FATEC)
Bauru – SP – Brasil
²
Professor do Curso de Tecnologia em Banco de Dados – Faculdade de Tecnologia de Bauru
(FATEC)
Bauru – SP – Brasil
[email protected], [email protected], [email protected],
[email protected]
Abstract. Database systems are becoming more and more useful. They help companies and
individuals to organize themselves better, have access to quick and precise information and
ensure a more competitive market position. The purpose of this project is to show what is
tuning of database using the Oracle, enabling businesses and information technology
professionals obtain some information.
Página
110
Resumo. Os sistemas de bancos de dados estão cada vez mais auxiliando empresas e as
pessoas a se organizarem e terem acesso à informações rápidas e precisas que as tornem
competitivas no mercado. Este trabalho mostrar a otimização de banco de dados,
utilizando o gerenciamento automático de memória do Oracle, possibilitando que empresas
e profissionais de tecnologia da informação obtenham algumas informações.
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Caderno de Estudos Tecnológicos
1. Introdução
O maior desafio desse trabalho é apresentar os benefícios alcançados com a otimização de
desempenho em banco de dados e as vantagens que ela pode trazer para as empresas e profissionais
de tecnologia da informação nos seus negócios.
Os bancos de dados têm se tornado cada vez mais importantes na sociedade moderna e, por
isso é cada vez mais necessário materiais e profissionais que dominem os seus conceitos, auxiliando as
empresas a tirarem o maior proveito de suas informações.
Esse trabalho visa auxiliar nesse processo com informações abordando o recurso de
gerenciamento automático de memoria do Sistema Gerenciador de Banco de Dados Oracle (SGBD) a
fim de obter maiores informações a respeito. Mesmo as empresas que desconhecem ou não acreditam
que a otimização de banco de dados possa ter impacto poderão ficar satisfeitas com os resultados
apresentados por esse trabalho.
1.1. Metodologia
Para a elaboração desse trabalho foi utilizado o SGBD, Oracle 11g Release 2 na sua versão Standard
Edition para sistemas sessenta e quatro bits, que pertence a Oracle Corporation sendo executado
sobre a plataforma de Sistema Operacional Windows 7 sessenta e quatro bits.
O Oracle Database 11g para Windows oferece uma solução de banco de dados otimizada para
disponibilizações que exigem escalabilidade, confiabilidade e alto desempenho. Usando um modelo de
serviço nativo do Windows baseado em thread, o Oracle Database 11g assegura alto desempenho,
escalabilidade, e integra-se perfeitamente aos avançados recursos do sistema operacional Windows e
ao hardware subjacente, oferecendo desempenho empresarial por meio de suporte a memória grande,
a arquivos grandes e brutos e a grid computing, certificado para sistemas operacionais Windows de 32
bits e de 64 bits (Colello, D; 2007).
Além do SGBD foi utilizado outro programa chamado Benchmark Factory sendo uma
ferramenta de teste de desempenho de banco de dados que permite conduz a reprodução da carga de
trabalho do banco de dados, testes esses de benchmark padrão industrial, e testes de escalabilidade,
ele permite que você implante alterações em seu ambiente de banco de dados com segurança, essa
alternativa foi usada para os testes na sua versão de avaliação por trinta dias, que pertence a Quest
Software. Outra curiosidade sobre o Benchmark Factory que ele é capaz simular uma quantidade
qualquer de usuários acessando simultaneamente como um servidor, permitindo avaliar o
comportamento do ambiente diante de uma grande quantidade de consultas e fazendo com que os
testes apresentados aqui sejam os mais reais possíveis.
Bancos de dados e sistemas de banco de dados são um componente essencial da vida na
sociedade moderna; a maioria de nós encontra diariamente diversas atividades que envolvem alguma
interação com um banco de dados. Por exemplo, quando vamos ao banco para depositar ou retirar
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
Em qualquer atividade ou lugar existe uma relação com sistemas de banco de dados. Nem sempre
essa relação é profunda, mas mesmo assim eles podem estar integrados. No mundo atual e na
proporção que necessitamos de informações em tempo hábil os bancos de dados tornam-se vitais em
nossas vidas.
111
2. Sistemas de Banco de Dados
Caderno de Estudos Tecnológicos
fundos, fazemos uma reserva de hotel ou voo, acessamos o catálogo de uma biblioteca virtual para
procurar uma referência bibliográfica, ou compramos algo on-line – como um livro ou brinquedo ou
um computador, provavelmente essas atividades envolveram alguém ou algum programa de
computador que acessa um banco de dados. Até mesmo a compra de produtos em um supermercado
atualiza automaticamente o banco de dados que mantém o controle de estoque dos itens (Elmasri;
Navathe, 2011)
Elmasri e Navathe, (2011) definem o termo banco de dados como: “Um banco de dados é uma
coleção de dados relacionados. Com dados queremos dizer fatos conhecidos que podem ser
registrados e possuem significado implícito.’’
3. Sistemas Gerenciadores de Banco de Dados (SGBD)
São softwares que permitem construir e manipular um banco de dados. Tudo o que fazemos
em um banco de dados passa pelo SGBD, ele é responsável por analisar, salvar, ligar e disponibilizar
os dados.
Um sistema gerenciador de banco de dados (SGBD - Database Management System) é uma
coleção de programas que permite aos usuários criar e manter um banco de dados. O SGBD é um
sistema de software de uso geral que facilita o processo de definição, construção, manipulação e
compartilhamento de bancos de dados entre diversos usuários e aplicações. (Elmasri; Navathe, 2011)
Para permitir a manipulação de um banco de dados, ele possui linguagens para definição,
consulta e manipulação desses dados. Essas linguagens auxiliam os desenvolvedores, administradores
de banco de dados e qualquer profissional que precisa manipular as informações contidas neles.
É muito comum que as pessoas chamem o SGBD de banco de dados (por exemplo: banco de
dados Oracle) sendo que na verdade eles são SGBD’s e banco de dados é o que eles oferecem aos
usuários.
4. Otimização de Banco de Dados
A otimização ou tuning pode ser definido como um ajuste para que algo funcione melhor,
independente do que seja. No caso desse trabalho estamos ajustando um banco de dados para ele
obtenha o melhor desempenho possível.
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
O processo de otimização em um banco de dados pode ser lento e envolver muitas
modificações na sua estrutura embora o resultado final deva compensar tudo isso. Essas modificações
podem envolver desde alterações nas instruções Structured Query Language (SQL) e no diagrama
entidade relacionamento até no hardware do servidor que está hospedando o banco de dados.
112
Segundo Ikematu (2000) a abordagem mais efetiva para realizar “tuning” é a abordagem
proativa na fase de projeto. O processo de tuning não começa quando os usuários reclamam sobre
tempo de respostas ruins. Quando o tempo de resposta está ruim, geralmente é muito tarde para usar
algumas das estratégias mais eficientes de “tuning”. Neste ponto, se não quiser redesenhar
completamente a aplicação, você pode somente melhorar a performance pela realocação de memória
e ajuste de I/O. Podendo chegar à conclusão que tanto o SGBD quanto o sistema operacional estão
funcionando bem. Neste caso, para conseguir obter performance adicional precisaria ajustar a
aplicação ou adicionar recursos.
Caderno de Estudos Tecnológicos
Vale ressaltar que a real possibilidade de implantação de qualquer otimização, ou seja, melhora
de performance, está ligada diretamente com o potencial intrínseco existente no modelo relacional,
caso uma otimização não seja possível de ser implantada, com certeza poderemos apontar para uma
falha de elaboração lógica do banco de dados, dentro das regras reais do modelo relacional. (Delgado
2011)
4.1. Tipos de Otimização
Podemos separar a otimização de banco de dados em três tipos principais, independente do SGBD
utilizado para realizar as mudanças:
1.
Otimização de consultas e objetos internos do banco de dados: aqui são avaliadas as consultas
executadas no banco de dados, os índices criados, recursos adicionais de otimização de
consulta oferecidos pelo SGBD utilizado, além de qualquer objeto interno que possa ser
melhorado;
2.
Otimização de sistema operacional: verificamos aqui os parâmetros e configurações existentes
no sistema operacional em uso pelo servidor;
3.
Otimização da arquitetura de memória do SGBD: essa é a otimização mais particular, pois são
avaliados parâmetros internos e comuns de cada SGBD. Parâmetros esses que se alterados
podem maximizar ou minimizar o desempenho ou comportamento do banco de dados, essa
está relacionada ao tema do artigo deste trabalho.
6. A Estrutura de Memória do Oracle
O Oracle é formado por duas estruturas de memória que são chamadas de Program Global
Area (PGA) e System Global Area (SGA). Abaixo temos as definições da PGA e SGA segundo dois
autores:
A Program Global Area é uma área de memória alocada e privada para um processo. A
configuração da PGA depende da configuração da conexão do banco de dados Oracle: ou servidor
compartilhado ou dedicado. (Bryla e Loney 2008).
Página
113
A System Global Area é um grupo de estruturas de memória compartilhada para uma instância
Oracle, compartilhada pelos usuários da instância de banco de dados. Quando uma instância Oracle é
iniciada, a memória é alocada para a SGA baseada nos valores especificados no arquivo de
parâmetros de inicialização ou codificado no software Oracle (Bryla e Loney 2008).
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Caderno de Estudos Tecnológicos
Imagem 1. Descrição da Estrutura da Memória do Oracle
Componentes e Grânulos da SGA
A SGA é composta por uma série de componentes de memória onde cada um tem sua função e
responsabilidade dentro do Oracle.
A Memória na SGA é alocada em unidades de grânulos. Um grânulo pode ser de quatro
megabytes ou dezesseis megabytes, dependendo do tamanho total da SGA. Se a SGA é menos que ou
igual a cento e vinte e oito megabytes, um grânulo é de quatro megabytes; do contrário ele é de
dezesseis megabytes (Bryla e Loney 2008).
Shared Pool
A Shared Pool é utilizada para armazenar os comandos SQL e Procedural Language/ Structured
Query Language (PL/SQL) que foram utilizados recentemente no servidor e as informações do
dicionário de dados que contém dois subcaches principais: a Library Cache e o Data Dictionary
Cache. A Shared Pool é medida pelo parâmetro de inicialização SHARED_POOL_SIZE. Este é um
outro parâmetro dinâmico que pode ser redimensionado desde que o tamanho total da SGA seja
menos que o SGA_MAX_SIZE ou SGA_TARGET. (Bryla e Loney 2008).
A Library Cache é responsável por armazenar os comandos SQL e PL/SQL enquanto que o
Data Dictionary Cache é uma coleção das tabelas do banco de dados que são de propriedade dos
usuários SYS e SYSTEM.
A partir do Oracle9i, a área de memória na SGA que armazena esses blocos de dados é
dinâmica. Isto é uma coisa boa, considerando que lá podem estar tablespaces no banco de dados com
tamanho de bloco diferentes do tamanho de bloco padrão; tablespaces com até cinco tamanhos de
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
Utilizado para armazenar os dados recentemente utilizados pelo banco de dados. Esta área é uma das
mais importantes, pois um correto gerenciamento dela diminui as gravações e leituras em disco.
114
Database Buffer Cache
Caderno de Estudos Tecnológicos
bloco diferentes (um tamanho de bloco pelo padrão, e até outros quatro tamanhos de bloco) requerem
seus próprios buffer cache. (Bryla e Loney 2008).
Redo Log Buffer
O Redo Log Buffer armazena as alterações feitas recentemente no banco de dados. As alterações são
armazenadas aqui antes de serem gravadas nos arquivos físicos.
Quando o Redo Log Buffer está um terço cheio, ou a cada três segundos, Oracle escreve os
registros Redo Log Buffer para os arquivos de Redo Log File. A transação cometida dos usuários não
é considerada completa até as entrada do Redo Log terem sido escritas de forma bem sucedida para
os arquivos do Redo Log (Bryla e Loney 2008).
Large Pool
Algumas operações requerem grandes blocos de memória para serem executadas e a Large Pool
reserva esse espaço para que elas possam utilizar quando precisarem.
A Large Pool é uma área opcional da SGA. É usado para transações que interagem com mais
que um banco de dados, mensagens do buffer para processos executando consultas paralelas, e o
RMAN paralelo salva e restaura as operações. Como o nome diz, o Large Pool disponibiliza grandes
blocos de memória para operações que precisam alocar grandes blocos de memória um de cada vez.
(Bryla e Loney 2008).
Java Pool
Utilizada pela Java Virtual Machine (JVM) para armazenar os códigos Java e funciona da mesma
maneira que a Shared Pool com os códigos SQL e PL/SQL.
Stream Pool
Utilizada armazenar os dados e manter o controle sobre o recurso Oracle Streams da Enterprise
Edition do Oracle.
Oracle Stream gerencia o compartilhamento dos dados e eventos num ambiente distribuído.
(Bryla e Loney 2008).
7. O Automatic Shared Memory Management
Quando o gerenciamento automático de memória está habilitado, os tamanhos dos diferentes
componentes da SGA são flexíveis e podem se adaptar às necessidades de uma carga de trabalho sem
exigir qualquer configuração adicional. O banco de dados automaticamente distribui a memória
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
O Gerenciamento Automático de Memória Compartilhada simplifica o gerenciamento de
memória do SGA. Você especifica o montante total da memória disponível da SGA para uma instância
usando o parâmetro de inicialização SGA_TARGET e o banco de dados Oracle automaticamente
distribui esta memória entre os vários componentes da SGA para assegurar a mais efetiva utilização
de memória. (Fogel 2007)
115
A SGA pode ser configurada manualmente com qualquer quantidade de memória (dependendo
da quantidade existente no servidor que o Oracle está instalado) ou então podemos habilitar uma
opção chamada de Automatic Shared Memory Management (ASMM). A função de gerenciamento
automático de memória foi introduzida no Oracle 11g.
Caderno de Estudos Tecnológicos
disponível entre os vários componentes como é exigido, permitindo ao sistema maximizar o uso de
toda a memória disponível na SGA. (Fogel 2007)
Habilitando o ASMM
Para habilitar o ASMM no Oracle podemos simplesmente definir o parâmetro SGA_TARGET com o
valor zero e ele vai começar a gerenciar a SGA sozinho com toda a quantidade de memória que
estiver disponível. Caso coloquemos algum outro valor diferente de zero nesse parâmetro o Oracle vai
destinar essa quantidade de memória para a SGA.
O comando que pode ser usado na linha de comando do Oracle para alterar os parâmetros são as
instruções a seguir:
ALTER SYSTEM SET SGA_TARGET=valor [SCOPE={SPFILE|MEMORY|BOTH}].
8. Comparação de Desempenho
Esse trabalho oferece comparações entre ambientes com menor carga de usuários e maior carga de
usuários configurado para gerenciamento manual e automático de memória. Para os testes com a SGA
configurada de forma manual são destinados um gigabyte de memória.
Conforme os testes são mostrados, as tabelas e gráficos ajudam a entender melhor os
resultados e em quais situações o gerenciamento automático de memória é mais indicado.
Testes com menor carga
Para os testes com menor carga de usuários foi utilizada uma quantidade máxima de quarenta usuários
acessando e manipulando o banco de dados simultaneamente. Essa é uma quantidade grande para
algumas empresas e pequena para outras, mas é o parâmetro passado ao software de simulação de
ambiente.
Veja nas tabelas e gráficos os resultados obtidos nos testes feitos com o ASMM desabilitado.
Tabela 1. Resultados dos testes com menor carga e ASMM desabilitado (Fonte: simulação
no software de Benchmark Factory)
Resultados
Transações por segundo
1332.697
Tempo médio de resposta (em milissegundos)
0.010
Tempo médio das transações (em milissegundos)
0.030
Número de execuções
218.995
Número de Linhas
219.323
Erros
0
Página
116
Descrição
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Caderno de Estudos Tecnológicos
Imagem 2. Transações por segundo e tempo de resposta em milissegundos (Fonte:
simulação no software de Benchmark Factory).
Imagem 3. Transações por segundo, número de usuários e a média de tempo de resposta
em milissegundos (Fonte: simulação no software de Benchmark Factory).
Descrição
Resultados
Transações por segundo
778.439
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
Tabela 2. Resultados dos testes com menor carga e ASMM habilitado (Fonte: simulação no
software de Benchmark Factory)
117
Na tabela 2 vejamos os resultados obtidos com o ASMM habilitado.
Caderno de Estudos Tecnológicos
Tempo médio de resposta (em milissegundos)
0.032
Tempo médio das transações (em milissegundos)
0.051
Número de execuções
136.707
Número de Linhas
136.752
Erros
0
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
Imagem 5. Transações por segundo, número de usuários e a média de tempo de resposta
em milissegundos (Fonte: simulação no software de Benchmark Factory).
118
Imagem 4. Transações por segundo e tempo de resposta em milissegundos (Fonte:
simulação no software de Benchmark Factory).
Caderno de Estudos Tecnológicos
Analisando esses resultados e gráficos podemos ver que a SGA manual executa mais
transações por segundo além de um tempo médio de resposta e transações menores. Percebe-se que a
quantidade de linhas executadas é maior no gerenciamento manual e mesmo assim temos um tempo
de resposta menor.
Pode-se pensar que o ASMM não é útil então, mas um dos objetivos desse trabalho é mostrar
que a utilização do ASMM se torna mais necessária conforme o ambiente do banco de dados cresce.
Em ambientes mais complexos a diferença de desempenho aumenta e pende para o lado do
gerenciamento automático e é isso que veremos no próximo tópico desse artigo.
Testes com maior carga
Para os testes com maior carga de usuários utilizamos uma quantidade máxima de cem usuários
acessando e manipulando o banco de dados simultaneamente. Essa é uma quantidade grande e simula
bem o ambiente de empresas de maior porte. Lembrando que mesmo empresas que possuem mais do
que essa quantidade de usuários nem sempre todos estão acessando simultaneamente.
Vejamos a seguir nas tabelas e gráficos os resultados obtidos nos testes feitos com o ASMM
desabilitado.
Tabela 3. Resultados dos testes com maior carga e o ASMM desabilitado (Fonte: simulação
no software de Benchmark Factory)
531.362
0.138
Tempo médio das transações (em milissegundos)
0.190
Número de execuções
81.539
Número de Linhas
81.598
Erros
0
Imagem 6. Transações por segundo e tempo de resposta em milissegundos (Fonte:
simulação no software de Benchmark Factory).
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
119
Transações por segundo
Tempo médio de resposta (em milissegundos)
Caderno de Estudos Tecnológicos
Imagem 7. Transações por segundo, número de usuários e a média de tempo de resposta
em milissegundos (Fonte: simulação no software de Benchmark Factory).
Vejamos os resultados obtidos com o ASMM habilitado.
Tabela 4. Resultados dos testes com maior carga e o ASMM habilitado (Fonte: simulação no
software de Benchmark Factory)
Resultados
Transações por segundo
745.300
Tempo médio de resposta (em milissegundos)
0.094
Tempo médio das transações (em milissegundos)
0.171
Número de execuções
77.239
Número de Linhas
77.276
Erros
0
Página
120
Descrição
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Caderno de Estudos Tecnológicos
Imagem 8. Transações por segundo e tempo de resposta em milissegundos (Fonte:
simulação no software de Benchmark Factory).
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Página
Analisando os resultados com maior carga podemos ver que o ASMM habilitado resultou num
melhor desempenho. Tivemos melhoras nas transações por segundo além de um tempo médio de
resposta e transações menores também. O fato da quantidade de linhas executadas serem maior no
gerenciamento manual não quer dizer que executou menos linhas simplesmente, mas sim que o
gerenciamento manual não gerenciou corretamente as instruções no tempo do teste (que é padrão
para todos os casos, cerca de quatro minutos).
121
Imagem 9. Transações por segundo, número de usuários e a média de tempo de resposta
em milissegundos (Fonte: simulação no software de Benchmark Factory).
Caderno de Estudos Tecnológicos
Vemos aqui a utilidade e versatilidade do ASMM e sendo mais ambicioso ainda podemos
vislumbrar casos com ambientes ainda mais críticos onde temos mais memória disponível para a SGA
e mais carga de usuários. Em ambientes assim teremos resultados ainda mais visíveis e satisfatórios.
Comparação entre os ambientes de execução
Apesar de ter sido mostrado os resultados dos testes com menor carga e maior carga nos tópicos
anteriores aqui iremos visualizar uma tabela contendo todos esses resultados juntos e agrupados. Com
isso conseguimos comparar mais facilmente os dados.
Tabela 5. Dados comparativos entre os testes efetuados com mais e menos carga e ASMM
habilitado e desabilitado (Fonte: simulação no software de Benchmark Factory)
SGA
1 GB
AUTO
Total de
Usuários
Transações
(Por
Segundo)
Resposta
(Tempo
Médio)
Transações
40
1.332.679
0.010 ms
100
531.362
40
100
Total de
Execuções
Total de
Linhas
0.030 ms
218.995
219.323
0.138 ms
0.190 ms
81.539
81.598
778.439
0.032 ms
0.051 ms
136.707
136.752
745.300
0.094 ms
0.171 ms
77.239
77.276
(Tempo
Médio)
Como dito anteriormente fica mais evidente na tabela acima que em ambientes com menor
carga a SGA de forma manual executa melhor os comandos enquanto que em ambientes com o
ASMM habilitado o Oracle consegue controlar e gerenciar melhor a memória disponível no servidor.
Apesar de tudo isso a realidade das empresas hoje é que a memória disponível nos seus
servidores de banco de dados seja grande e com isso o ASMM seja totalmente indicado.
Conclusão
Com esse trabalho conseguimos mostrar como utilizar o gerenciamento automático de memória no
SGBD Oracle 11g Release 2 e como ele pode tornar-se um tópico importante na avaliação e ações de
um Administrador de Banco de Dados com o objetivo de ganhar performance no acesso ao Banco de
Dados. Através do ASMM deixamos todo o gerenciamento da memória para o Oracle e nos
preocuparmos com outras tarefas como a segurança do nosso ambiente.
Apesar do gerenciamento automático não ser indicado para ambientes com pouca carga, hoje
em dia nas empresas temos um cenário onde cada vez mais temos processamento nos nossos
servidores.
Página
122
Em um ambiente empresarial com muitos usuários e uma quantidade grande de memória
disponível a utilização do ASMM é altamente recomendável, torna-se indispensável dependendo da
necessidade de desempenho que a empresa tenha, como foi dito anteriormente a informação rápida e
precisa é um ponto chave para os ganhos nos negócios.
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Caderno de Estudos Tecnológicos
9. Referências
Bryla, B. e Loney, K. (2008), Oracle Database 11g DBA Handbook, Oracle Press.
Collelo, D.; Keh, A. e Thammaiah, R. (julho/2007), Arquitetura do Oracle Database 11g no Windows,
p3.
Date, C. J. (2004), Introdução a Sistemas de Banco de Dados, Campus, 8ª edição.
Delgado, H. S. (2011), O Conceito de Tuning Aplicado em Instruções SQL Dentro de um Banco de
Dados Oracle, Guarulhos, São Paulo.
Elsmari, R., Navathe, S. B. (2011), Sistemas de banco de dados, Pearson, 6ª edição.
Fogel S. (2007), Oracle Database Administrator’s Guide 11g Release 1 (11.1), Oracle.
Página
123
Ikematu, R. S., Realizando Tuning na Base de Aplicações. Disponível em
http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=1592. Último acesso em
25/05/2013.
Faculdade de Tecnologia de Bauru
volume 01 – número 01 – julho/2013
Download