Mysql para aplicações Web escaláveis

Elton Minetto
Elton MinettoSoftware developer, teacher, speaker, open source evangelist, tech leader at Code:Nation
Mysql para aplicações Web escaláveis


                                     Elton Luís Minetto



segunda-feira, 19 de abril de 2010
segunda-feira, 19 de abril de 2010
Quem sou eu?

        Graduado e pós-graduado em Ciência da Computação.
         Cursando MBA em Gerenciamento de Projetos
        Trabalha com PHP/MySQL desde 2000
        Autor do livro Frameworks para Desenvolvimento em
         PHP - Editora Novatec e co-autor do livro Grid
         Computing in Research and Education - IBM Redbooks
        Membro do PHPSC
        Diretor de Desenvolvimento do Drimio e professor na
         Unochapecó(Chapecó/SC)




segunda-feira, 19 de abril de 2010
E vocês?

        Quem são vocês?
               Desenvolvedores
               DBAs
               Administrador de sistemas
        A quanto tempo usa MySQL? E outros bancos de dados?




segunda-feira, 19 de abril de 2010
Terminologia

        Performance: a habilidade que uma aplicação tem de
         atingir um objetivo, como por exemplo responder no
         menor tempo possível
        Capacidade: a carga total que uma aplicação pode
         suportar
        Escalabilidade: a habilidade de uma aplicação manter a
         performance quando a carga de trabalho aumenta. É a
         junção da capacidade e da performance




segunda-feira, 19 de abril de 2010
Ou...




segunda-feira, 19 de abril de 2010
Ou...

        Performance: a velocidade do carro
        Capacidade: o limite de velocidade e o número de
         pistas da estrada
        Escalabilidade: quantos carros e pistas eu posso
         adicionar sem diminuir a velocidade do tráfego
               “Performance is a problem. Scaling your performance is a
                bigger problem”




segunda-feira, 19 de abril de 2010
Camadas




segunda-feira, 19 de abril de 2010
MySQL

        Segundo a Wikipédia:
               O MySQL é um sistema de gerenciamento de banco de dados
                (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta
                Estruturada, do inglês Structured Query Language) como
                interface. É atualmente um dos bancos de dados mais
                populares, com mais de 10 milhões de instalações pelo mundo.
               No dia 16 de Janeiro de 2008, a MySQL AB, desenvolvedora do
                MySQL foi adquirida pela Sun Microsystems, por US$ 1 bilhão,
                um preço jamais visto no setor de licenças livres. No dia 20 de
                Abril de 2009 a Oracle compra a Sun Microsystems e todos o seu
                produtos, incluindo o MySQL




segunda-feira, 19 de abril de 2010
Porque usar MySQL?

        Portabilidade
        Compatibilidade com diversas linguagens de
         programação
        Excelente desempenho e estabilidade;
        Pouco exigente quanto a recursos de hardware;
        É um Software Livre com base na GPL;
        Contempla a utilização de vários Storage Engines como
         MyISAM, InnoDB, Falcon, BDB, Archive, Federated, CSV,
         Solid…
        Suporta controle transacional, Triggers, Stored
         Procedures e Functions;
        Replicação facilmente configurável;



segunda-feira, 19 de abril de 2010
Quem usa MySQL?

           Facebook
           Twitter
           Feedburner
           Linkedin
           Digg
           Friendster
           Flickr
           37Signals apps (Basecamp, Campfire)




segunda-feira, 19 de abril de 2010
Métricas




segunda-feira, 19 de abril de 2010
Métricas




segunda-feira, 19 de abril de 2010
Métricas




segunda-feira, 19 de abril de 2010
Métricas - Drimio


        Gráfico de CPU de um dos servidores




segunda-feira, 19 de abril de 2010
Métricas - Drimio


        Gráfico de CPU de um dos servidores




                                     Alerta




segunda-feira, 19 de abril de 2010
Métricas - Drimio


        Gráfico de CPU de um dos servidores



                                              Pânico

                                     Alerta




segunda-feira, 19 de abril de 2010
Métricas - Drimio


        Gráfico de CPU de um dos servidores



                                              Pânico

                                     Alerta
                                                       Cool!




segunda-feira, 19 de abril de 2010
Conceitos

        Avaliação de desempenho
               “Quão bem isto executa?”
               Determinar a capacidade de um sistema
        Análise de desempenho
               “Por que isso executa desta maneira?”
               Determinar onde a aplicação gasta mais tempo e recurso
        Avaliar a aplicação inteira (full-stack) ou somente o
         MySQL (single-component)
        O que medir
                 Transações por unidade de tempo
                 Tempo de resposta ou latência
                 Escalonamento
                 Concorrência




segunda-feira, 19 de abril de 2010
Ferramentas

        Full-stack
                 ab
                 siege
                 http_load
                 jMeter
        Single-component
                 mysqlslap
                 sysbench
                 Database Test Suite
                 MySQL Benchmark Suite (sql-bench)
                 innotop, mytop




segunda-feira, 19 de abril de 2010

siege -c50 "http://www.drimio.com/usuario/eminetto" -b -r10
No ab verificar “Requests per second”. No siege “Transaction rate”

./run-all-tests --user=root -password=senha --log
Nativas do MySQL - show status
        Open_tables, Opened_tables: Número de tabelas abertas
         atualmente e o número de tabelas abertas desde que foi iniciado.
         Analisa se está certo o cache de tabelas. Valores altos significam
         que o cache deveria ser maior
        Slow_queries: Número de queries demorando mais do que um
         valor pré-determinado de tempo (my.cnf).
        Select_scan: Número de queries que estão usando um full scan
         para encontrar os dados. Valores altos significam que as queries
         devem ser otimizadas.
        Select_full_join: Número de joins que estão sendo executadas
         sem o uso de índices. Valor alto significa que índices devem ser
         criados ou consultas otimizadas.
        Qcache_hits: Número de acessos ao cache de queries do MySQL.
         Um valor alto significa que o MySQL está usando o cache de
         maneira eficiente, sem precisar reconstruir a query em toda
         execução



segunda-feira, 19 de abril de 2010
Ferramentas -mysqladmin

        Conexões
               mysqladmin extended -i10 | grep Threads_running

        Total de queries
               mysqladmin extended -i10 | grep Questions




segunda-feira, 19 de abril de 2010
segunda-feira, 19 de abril de 2010
Melhorando a performance

        É possível melhorar a performance do MySQL de três
         maneiras:
               Tunning do arquivo de configuração (my.cnf)
               Otimizando as consultas SQL
               Melhorando hardware/arquitetura



        Você também pode dar uma folga pro coitado!




segunda-feira, 19 de abril de 2010
my.cnf

        O arquivo original da instalação do MySQL possui uma
         configuração com recursos reduzidos, para ser rodado
         na grande maioria dos servidores
        Usar o arquivo apropriado:
               my-huge.cnf (enorme capacidade) - Servidores com mais de 1
                Gb de memória RAM dedicada ao MySQL
               my-large.cnf (grande capacidade) - Servidores com 512 megas
                a 1 Gb de memória RAM dedicadas ao MySQL
               my-medium.cnf (média capacidade) - Servidores com 128 a 256
                megas de memória RAM dedicadas ao MySQL
               my-small.cnf (pequena capacidade) - Servidores com 64 a 128
                megas de memória RAM dedicadas ao MySQL




segunda-feira, 19 de abril de 2010
MySQL Performance Tuning Primer Script

        Script que auxilia a identificar mudanças no arquivo de
         configuração do MySQL
        Fazer o download do script
               wget http://day32.com/MySQL/tuning-primer.sh
        Tornar o script executável
               chmod +x ./tuning-primer.sh
        Executar o script
               ./tuning-primer.sh
        É apresentado um relatório dividido em
         várias seções com sugestões de
         modificações nos parâmetros
               http://dev.mysql.com/doc/refman/5.0/en/server-
                system-variables.html


segunda-feira, 19 de abril de 2010

tunning_resultado_real.txt
tunning_resultado_mac.txt
Otimização de consultas/dados

        “Fazer o tunning do MySQL durante a escolha da engine
         de armazenamento das tabelas. Usar InnoDB quando
         precisa de transações e MyISAM quando não
         precisa” (Digg)
        “Desnormalização ou cacheamento são as únicas formas
         de gerar uma tag cloud em milissegundos para milhões
         de tags” (Flickr)
        Usar o tipo correto de dados na tabela:
               INT x SMALLINT x TINYINT
               CHAR x VARCHAR




segunda-feira, 19 de abril de 2010
Otimização de consultas/dados

        Explain
               table - mostra o nome da tabela à qual o resultado diz respeito
                (para quando são efectuados JOINs entre tabelas);
               type - tipo de join usado. Do melhor para o pior tipo temos:
                system, const, eq_ref, ref, range, index, all;
               possible_keys - indica quais os índices que o MySQL pode usar
                para encontrar resultados nesta tabela;
               key - índice usado na consulta, ou NULL caso não tenham sido
                usados índices;
               key_len - tamanho do índice usado, caso exista;
               ref - coluna(s) usada(s) com a key para devolver resultados;
               rows - número de registos que o MySQL tem que examinar para
                executar a consulta;
               extra - informação adicional acerca de como o MySQL vai
                executar a consulta. A evitar o aparecimento de “using
                filesort” e “using temporary“.


segunda-feira, 19 de abril de 2010

explain.tx
t
Hardware

        CPU
               CPUs mais rápidas são melhores do que mais CPUs
               64bits com SOs de 64bits
        I/O: discos mais rápidos
        Mais memória




segunda-feira, 19 de abril de 2010
Arquitetura

           Load Balancers
           Cache servers
           Bancos de dados Master/Slave, Sharding
           Scale-Out Wins Over Scale-Up
            (escalar horizontalmente adicionando mais máquinas é 
            melhor do que verticalmente adicionando
            mais memória/CPU )




segunda-feira, 19 de abril de 2010
Arquitetura

        Sobre o Youtube:
               “Eles seguiram uma evolução comum: servidor único, único
                master e múltiplos slaves para leitura e depois particionaram a
                base de dados.”
        Dividir a carga entre servidores. As requisições de
         modificação (INSERT, UPDATE,DELETE) podem ser
         enviadas para o Master. Os dados são replicados para os
         Slaves. As requisições de leitura (SELECT) são enviadas
         direto para os Slave




segunda-feira, 19 de abril de 2010
Arquitetura




segunda-feira, 19 de abril de 2010
Arquitetura - Observações

        Como agora um cliente pode ser atendido por diversos
         servidores Web durante o uso, as sessões dos usuários
         devem ser salvas no banco de dados ou nos servidores
         de cache (Memcached)
        O MySQL Master é um SPOF( Single Point of Failure) –
         adicionar mais Masters em um esquema de replicação
         Master/Master.
        Diversos servidores de cache podem ser adicionados




segunda-feira, 19 de abril de 2010
Arquitetura - Replicação




                                     Master
                                      r/w




segunda-feira, 19 de abril de 2010
Arquitetura - Replicação



                                      Master
                                        w




                              Slave            Slave
                                r                r




segunda-feira, 19 de abril de 2010
Arquitetura - Replicação



                                        Top
                                       Master
                                         w
  Mensagens                                             Amigos
     r/w                                                 r/w


                                Top              Top
                               Slave            Slave
                                 r                r




segunda-feira, 19 de abril de 2010
Arquitetura - Replicação



                                              Top
                                             Master
                                               w
  Mensagens                                                   Amigos
      w                                                         w


                                      Top              Top
                                     Slave            Slave
          Msg                          r                r      Amg
         Slave                                                 Slave
           r                                                     r




segunda-feira, 19 de abril de 2010
Arquitetura - Sharding

        Master-Slave tem o problema do tempo de
         sincronização. Resposta: sharding.
               “Uma base de dados pode ser sharded por tabelas, dados ou
                faixas (ranges). É similar ao particionamento, mas possui
                algumas diferenças. Sharding envolve separar os dados em
                máquinas fisicamente distintas, enquanto que particionamento
                geralmente ocorre em mesmo hardware. MySQL não suporta
                nativamente sharding, mas sim tabelas particionadas, tabelas
                federadas (federated) e clusters.”
               Ou você pode fazer uma solução “caseira”, usando uma
                linguagem de programação.




segunda-feira, 19 de abril de 2010
Arquitetura - Sharding

        Exemplo: um blog
               Você tem uma tabela com os posts do blog, com as colunas: id,
                titulo, texto, data, autor_id
               autor_id é uma chave estrangeira (foreign key) com a tabela
                usuarios
               Nós vamos dividir os posts do blog em duas bases de dados
               Posts cujo autor_id é par vão estar armazenados na base de
                dados 1
               Posts cujo autor_id é ímpar vão estar armazenados na base de
                dados 2
               A consulta: "mostre-me todos os posts do autor de id 26"




segunda-feira, 19 de abril de 2010
Arquitetura - Sharding
            <?php
            $id = 26;//$_GET['id'];
            if($id % 2 == 0) {
            	       $con = mysql_connect('servidor1','root','root');
            	       mysql_select_db("sh_db1");
            }
            else {
            	       $con = mysql_connect('servidor2','root','root');
            	       mysql_select_db("sh_db2");
            }
            $res = mysql_query("select * from post where autor_id=
            $id",$con);
            while($conteudo = mysql_fetch_array($res, MYSQL_ASSOC))
            	       var_dump($conteudo);


segunda-feira, 19 de abril de 2010
Arquitetura - Sharding: Como particionar?

        Vertical Partitioning: dividir os dados em um nível de
         tabela/feature. Exemplo: tabela users, no DB1, tabela
         posts no DB2
        Range-based Partitioning: dividir os dados de acordo
         com faixas. Exemplo: posts de id 1 a 500.000 estão na
         tabela posts do DB1 e acima deste valor no DB2
        Key or Hash based Partitioning: usar uma função
         matemática para determinar o DB apartir do id.
         Exemplo: id % 10 = 2, o dado está no DB2, id % 10 = 3, o
         dado está no DB3.
        Directory based Partitioning: usar uma tabela ou serviço
         de diretório para armazenar onde encontra-se o dado
         procurado. A desvantagem é que esta tabela/serviço de
         diretórios torna-se um SPOF (Single Point Of Failure)

segunda-feira, 19 de abril de 2010
Arquitetura - Sharding: Problemas

           Dependência da programação
           Consultas SQL complexas para serem cross-shard
           Consistência dos dados
           Integridade referencial
           Complexidade do código
               Adicionar novos servidores
        Escolha do modo de particionamento é importante
        Os servidores web conectam-se a mais servidores
         MySQL.
               Problemas de rede




segunda-feira, 19 de abril de 2010
segunda-feira, 19 de abril de 2010
Dando uma folga pro MySQL

        “Não é só porque você tem um martelo que tudo é um
         prego”
        Para algumas aplicações pode-se usar outras
         tecnologias
               Memcached
               Sphinx
               NoSQL (Cassandra/MongoDB/CouchDB)




segunda-feira, 19 de abril de 2010
Memcached - O que é?

        Sistema distribuído e de alta performance para fazer
         cache de objetos em memória RAM. É genério por
         natureza mas muito usado para acelerar aplicações web
         dinâmicas, reduzindo a carga de bases de dados,
         sessões de usuários, arquivos CSS.
        Foi desenvolvido pela Danga Interactive para aumentar
         a performance do site LiveJournal.com, que possui mais
         de 20 milhões de page views por dia e atende 1 milhão
         de usuários. memcached reduziu a carga dos servidores
         de banco de dados forncecendo páginas mais rápidas e
         melhor utilização de recursos.




segunda-feira, 19 de abril de 2010
Memcached - Por que usar?

        Escalável: fácil adicionar máquinas e instâncias
        RAM é muito mais rápido que I/O em disco
        Alivia a carga do banco de dados
        Muito flexível: pode armazenar qualquer dado, desde
         que não ultrapasse 1 MB
        Bibliotecas client disponíveis em diversas linguagens
         (PHP, C, Java, Ruby, Python)




segunda-feira, 19 de abril de 2010
Memcached

        Armazena qualquer coisa que pode ser serializado
        Armazena com uma chave única (255 caracteres) e
         tempo de validade
        O programador usa da seguinte forma :
        Encontrou no cache? Retorna os dados
        Não encontrou no cache? Processa, armazena no cache
         e retorna o dado




segunda-feira, 19 de abril de 2010
Memcached - Exemplo (PHP)
            <?php
            $memcache = new Memcache;
            $memcache->connect('localhost', 11211);
            $conteudo = $memcache->get('estados');
            if($conteudo === false) {
                         echo "buscando do banco de dadosn";
                         $con = mysql_connect('localhost','user','senha');
                         mysql_select_db("banco");
                         $res = mysql_query("select * from state",$con);
                         $conteudo = mysql_fetch_array($res, MYSQL_ASSOC);
                         $memcache->set('estados',$conteudo,false,100);
                         mysql_close($con);
            }
            var_dump($conteudo);




segunda-feira, 19 de abril de 2010
Memcached e MySQL

        O memcache_engine permite que o Memcached
         trabalhe como uma "storage engine" do MySQL. Isto
         permite fazer SELECT/UPDATE/INSERTE/DELETE em
         uma tabela armazenada no Memcached
               http://tangent.org/index.pl?node_id=506


        Existe um conjunto de MySQL UDFs (user defined
         functions) que permite acessar dados do Memcached de
         dentro de uma consulta SQL ou uma Trigger/Procedure
               http://tangent.org/586/Memcached_Functions_for_MySQL.html




segunda-feira, 19 de abril de 2010
Sphinx

        Sphinxsearch é um motor de pesquisa de texto
         completo, distribuído sob a versão GPLv2 .
        Sphinx foi especialmente desenvolvido para integrar um
         banco de dados SQL com uma linguagem de
         'scripts' (oficialmente suportada - PHP). Atualmente o
         Sphinx conecta-se diretamente com os bancos de dados
         MySQL e Postgres
        O nome "Sphinx" é um acrônimo oficial da frase 'SQL
         Phrase Index'.




segunda-feira, 19 de abril de 2010
Sphinx - Arquitetura

        O Sphinxsearch inclui os seguintes programas:
               indexer - um utilitário para criar índices fulltext
               search - uma simples (teste) utilidade para consulta índices
                fulltext de linha de comando
               searchd - um servidor('daemon') para pesquisar através de
                índices fulltext. (web utilizando scripts Sphinx API; ou MySQL
                com SphinxSE, ou o seu servidor de aplicações)
               sphinxapi - um conjunto de APIs de bibliotecas populares da
                web (API - PHP, Python, Java, Perl e Ruby).




segunda-feira, 19 de abril de 2010
Sphinx - Características

        Alta velocidade de indexação (10 MB/s em uma CPU)
        Alta velocidade de pesquisa (menor que 0.1 segundo em
         2-4 GB de texto)
        Alta escalabilidade (mais de 100 GB de texto, mais de
         100 M de documentos em uma CPU)
        Suporte a pesquisa distribuida
        Suporte nativo ao banco de dados MySQL
        Suporte a pesquisa por frases
        Suporte a 'ranking' de proximidade das frases, com boa
         relavância




segunda-feira, 19 de abril de 2010
Sphinx - Características

        Suporte a 'stemming' de Inglês e Russo
        Suporte a vários números de campos de documentos (os
         pesos podem ser mudados na hora)
        Suporte a grupos de documentos
        Suporte a 'stopwords'
        Suporte a diferentes modos de pesquisas ("match all",
         "match phrase" e "match any" - v.0.9.5)
        PHP API




segunda-feira, 19 de abril de 2010
Sphinx X MySQL
            mysql> select id from entity where name = 'Apple';
            2 rows in set (0.01 sec)
            mysql> select id from entity where name like '%Apple%';
            6610 rows in set (36.49 sec)


            [root@linux ~]# search -i entity apple
            Sphinx 0.9.9-release (r2117)
            Copyright (c) 2001-2009, Andrew Aksyonoff


            using config file '/usr/local/etc/sphinx.conf'...
            index 'entity': query 'apple ': returned 1000 matches of
            5930 total in 0.001 sec




segunda-feira, 19 de abril de 2010

explain_sphinx.txt
NoSQL

        Algumas aplicações podem se beneficiar de um
         ambiente “sem esquema”, ou “não normalizado”
        Os bancos NoSQL (ou não relacionais) possuem a
         capacidade de escalar de maneira mais rápida
        Mas não são todas as aplicações que podem “abrir mão”
         da integridade ACID




segunda-feira, 19 de abril de 2010
NoSQL - Exemplos

        Orientados a Documento
               CouchDB
               MongoDB
        Orientados a Chave/Valor (Key/Value)
                 Memcachedb
                 Project Voldemort
                 Redis
                 SimpleDB
                 Hbase
        Tabular
               Cassandra
               Hypertable




segunda-feira, 19 de abril de 2010
Referências
        Alto Desempenho em MySQL. Editora Alta Books
        http://ha-mc.org/node/24
        http://dev.mysql.com/news-and-events/newsletter/2004-01/
         a0000000301.html
        http://architects.dzone.com/news/your-mysql-server-loaded
        http://www.dicas-l.com.br/dicas-l/20090511.php
        http://axonflux.com/mysql-sharding-for-5-billion-p
        http://www.jurriaanpersyn.com/archives/2009/02/12/database-
         sharding-at-netlog-with-mysql-and-php/#databasesetup4
        http://www.hitk.com.br/?q=node/40
        http://www.plugmasters.com.br/sys/materias/888/1/Otimiza
         %E7%E3o-de-Aplica%E7%F5es-MySQL---Parte-II
        http://www.mysqlperformanceblog.com/mysql-performance-
         presentations/




segunda-feira, 19 de abril de 2010
Referências
        http://articles.techrepublic.com.com/
         5100-10878_11-5211760.html
        http://josefernandes.pt/artigos/optimizar-mysql-linux
        http://www.mysqlperformanceblog.com/
        http://www.linux.com/archive/feature/41348
        http://www.myloadtest.com/
        http://blog.thiagobelem.net/mysql/2009/07/08/otimizando-
         consultas-mysql-com-o-memcached-563/
        http://ilkinbalkanay.blogspot.com/2010/03/load-testing-
         relational-databases-with.html
        http://www.sphinxsearch.com.br/Sobre-SphinxSearch




segunda-feira, 19 de abril de 2010
Contato

       <?php
       $card = array(
       	 ‘nome’ =>                   ‘Elton Luís Minetto’,
       	 ‘site’ => ‘http://www.eltonminetto.net’,
       	 ‘e-mail’ => ‘elton.minetto@drimio.com’,
            ‘twitter’ => ‘@eminetto’,
       	 ‘fone’ => ‘(47) 9189 6359’
       );
       var_dump($card);
       ?>



segunda-feira, 19 de abril de 2010
PHPinga




segunda-feira, 19 de abril de 2010
1 of 60

Recommended

Mysql for IBMers by
Mysql for IBMersMysql for IBMers
Mysql for IBMersWagner Bianchi
3.6K views157 slides
MySQL - the database by
MySQL - the databaseMySQL - the database
MySQL - the databaseMiguel Sousa Filipe
2.3K views15 slides
My sql apresentação by
My sql apresentaçãoMy sql apresentação
My sql apresentaçãoBarbara Damacena
3.1K views21 slides
Oracle Real Application Clusters by
Oracle Real Application ClustersOracle Real Application Clusters
Oracle Real Application Clusters4Partner
3.7K views19 slides
Ficha de trabalho nº2 so 11º-2011_2012 by
Ficha de trabalho nº2  so 11º-2011_2012Ficha de trabalho nº2  so 11º-2011_2012
Ficha de trabalho nº2 so 11º-2011_2012teacherpereira
2.1K views1 slide
UNIFAL - MySQL Logs - 5.0/5.6 by
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6Wagner Bianchi
1.3K views15 slides

More Related Content

What's hot

Estratégia de backup - RMAN by
Estratégia de backup - RMANEstratégia de backup - RMAN
Estratégia de backup - RMANEduardo Legatti
14.1K views46 slides
Sistemas operativos servidor by
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorJoao Andre Picao
1.4K views8 slides
GUO-RS - Junho/2005 - ASM 10g by
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gDaniela Macedo
598 views30 slides
Otimizando um banco de dados Oracle para Exadata by
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataRodrigo Almeida
2.4K views35 slides
Treinamento RMAN Workshop 12c by
Treinamento RMAN Workshop 12cTreinamento RMAN Workshop 12c
Treinamento RMAN Workshop 12cDouglas Paiva de Sousa
4.5K views389 slides
MySQL 5.6, o que há de novidade? by
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL Brasil
1.1K views6 slides

What's hot(20)

Estratégia de backup - RMAN by Eduardo Legatti
Estratégia de backup - RMANEstratégia de backup - RMAN
Estratégia de backup - RMAN
Eduardo Legatti14.1K views
GUO-RS - Junho/2005 - ASM 10g by Daniela Macedo
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10g
Daniela Macedo598 views
Otimizando um banco de dados Oracle para Exadata by Rodrigo Almeida
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
Rodrigo Almeida2.4K views
MySQL 5.6, o que há de novidade? by MySQL Brasil
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?
MySQL Brasil1.1K views
Mais performance com o MySQL 5.6 by MySQL Brasil
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
MySQL Brasil5.9K views
Estrategias de backup e recovery by Rodrigo Crespi
Estrategias de backup e recoveryEstrategias de backup e recovery
Estrategias de backup e recovery
Rodrigo Crespi495 views
Sistemas operativos servidor by André bogas
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
André bogas674 views
Virtualização de Cluster na plataforma Microsoft. by Jaguaraci Silva
Virtualização de Cluster na plataforma Microsoft.Virtualização de Cluster na plataforma Microsoft.
Virtualização de Cluster na plataforma Microsoft.
Jaguaraci Silva1.1K views
Oracle Day - Produtos de banco de dados by Rodrigo Almeida
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dados
Rodrigo Almeida2.5K views
Compartilhamento no samba com permissão de grupo by Carlos Eduardo
Compartilhamento no samba com permissão de grupoCompartilhamento no samba com permissão de grupo
Compartilhamento no samba com permissão de grupo
Carlos Eduardo7.9K views
PostgreSQL: Conceitos e aplicações by Fernando Ike
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
Fernando Ike5.4K views

Viewers also liked

Prática de laboratório utilizando views, stored procedures e triggers by
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
3.3K views29 slides
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri... by
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...MySQL Brasil
4.6K views75 slides
Livro Mini-Curso de Haskell by
Livro Mini-Curso de HaskellLivro Mini-Curso de Haskell
Livro Mini-Curso de HaskellMikeNandes
521 views31 slides
Algoritmo e lógica de programação by
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programaçãojose alisson
476 views67 slides
Como Estudar Sozinho em Casa by
Como Estudar Sozinho em CasaComo Estudar Sozinho em Casa
Como Estudar Sozinho em CasaRichard Reinaldo
6.6K views8 slides
Haskell by
HaskellHaskell
Haskellraquelcarsi
5.5K views96 slides

Viewers also liked(20)

Prática de laboratório utilizando views, stored procedures e triggers by Daniel Maia
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
Daniel Maia3.3K views
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri... by MySQL Brasil
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
MySQL Brasil4.6K views
Livro Mini-Curso de Haskell by MikeNandes
Livro Mini-Curso de HaskellLivro Mini-Curso de Haskell
Livro Mini-Curso de Haskell
MikeNandes521 views
Algoritmo e lógica de programação by jose alisson
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programação
jose alisson476 views
Comunicação e Empregabilidade by mairamed
Comunicação e EmpregabilidadeComunicação e Empregabilidade
Comunicação e Empregabilidade
mairamed2.2K views
Algoritmo de euclides by lizethkathe
Algoritmo de euclidesAlgoritmo de euclides
Algoritmo de euclides
lizethkathe1.2K views
08 linguagens recursivamente enumeraveis e sensiveis ao contexto by Computação Depressão
08   linguagens recursivamente enumeraveis e sensiveis ao contexto08   linguagens recursivamente enumeraveis e sensiveis ao contexto
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
Utilizando views, stored procedures e triggers by Daniel Maia
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
Daniel Maia6.7K views
Teoria da Computação by Alefe Variani
Teoria da ComputaçãoTeoria da Computação
Teoria da Computação
Alefe Variani1.8K views
Máquinas de Turing by Tania Arroyo
Máquinas de TuringMáquinas de Turing
Máquinas de Turing
Tania Arroyo3.3K views

Similar to Mysql para aplicações Web escaláveis

App Web Escalaveis Fisl by
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis FislElton Minetto
734 views43 slides
Otimização MySQL by
Otimização MySQLOtimização MySQL
Otimização MySQLElton Minetto
2.9K views39 slides
Planejamento E Gerenciamento de Capacidade Para Sistemas Distribuídos by
Planejamento E Gerenciamento de Capacidade Para Sistemas DistribuídosPlanejamento E Gerenciamento de Capacidade Para Sistemas Distribuídos
Planejamento E Gerenciamento de Capacidade Para Sistemas DistribuídosRodrigo Campos
734 views36 slides
Desenvolvendo aplicações Web escaláveis com PHP by
Desenvolvendo aplicações Web escaláveis com PHPDesenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHPElton Minetto
2.5K views43 slides
Apresentação do Curso by
Apresentação do CursoApresentação do Curso
Apresentação do CursoEduardo de Lucena Falcão
735 views19 slides
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ... by
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Tchelinux
621 views57 slides

Similar to Mysql para aplicações Web escaláveis(20)

Planejamento E Gerenciamento de Capacidade Para Sistemas Distribuídos by Rodrigo Campos
Planejamento E Gerenciamento de Capacidade Para Sistemas DistribuídosPlanejamento E Gerenciamento de Capacidade Para Sistemas Distribuídos
Planejamento E Gerenciamento de Capacidade Para Sistemas Distribuídos
Rodrigo Campos734 views
Desenvolvendo aplicações Web escaláveis com PHP by Elton Minetto
Desenvolvendo aplicações Web escaláveis com PHPDesenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHP
Elton Minetto2.5K views
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ... by Tchelinux
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Tchelinux621 views
Mining software repositories by Rafael Rossi
Mining software repositoriesMining software repositories
Mining software repositories
Rafael Rossi1.8K views
Novidades do Universo MySQL Maio 2014 by MySQL Brasil
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
MySQL Brasil1.4K views
MySQL - o banco de dados open source mais popular do mundo by MySQL Brasil
MySQL - o banco de dados open source mais popular do mundoMySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundo
MySQL Brasil2.5K views
MySQL no Windows: implementação eficiente de novas aplicações by MySQL Brasil
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicações
MySQL Brasil2.2K views
Unidade 3.2 instalação do sistemas operacionais livres by Juan Carlos Lamarão
Unidade 3.2   instalação do sistemas operacionais livresUnidade 3.2   instalação do sistemas operacionais livres
Unidade 3.2 instalação do sistemas operacionais livres
Elastic MeetUp Porto Alegre by Rafael Gomes
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto Alegre
Rafael Gomes130 views
Aumente a performance de seu site de maneira disciplinada by Henrique Lima
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
Henrique Lima1.4K views
Cenário das Plataformas de Dados 2017/2018 by Raul Oliveira
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018
Raul Oliveira897 views
MySQL Profiling com Enterprise Monitor by MySQL Brasil
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor
MySQL Brasil910 views
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n... by iMasters
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
iMasters738 views

More from Elton Minetto

Go e Microserviços - Nascidos um para o outro by
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroElton Minetto
1.9K views37 slides
Object Calisthenics em Go by
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em GoElton Minetto
792 views79 slides
Programar != desenvolver software (v2) by
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Elton Minetto
341 views22 slides
Gerenciando uma startup no Github Projects by
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsElton Minetto
402 views30 slides
Clean Architecture by
Clean ArchitectureClean Architecture
Clean ArchitectureElton Minetto
915 views37 slides
Serverless em Go by
Serverless em GoServerless em Go
Serverless em GoElton Minetto
433 views31 slides

More from Elton Minetto(20)

Go e Microserviços - Nascidos um para o outro by Elton Minetto
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outro
Elton Minetto1.9K views
Object Calisthenics em Go by Elton Minetto
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
Elton Minetto792 views
Programar != desenvolver software (v2) by Elton Minetto
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
Elton Minetto341 views
Gerenciando uma startup no Github Projects by Elton Minetto
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
Elton Minetto402 views
Clean architecture em Go - v2 by Elton Minetto
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
Elton Minetto661 views
Programar != desenvolver software by Elton Minetto
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
Elton Minetto1.6K views
Clean Architecture em PHP by Elton Minetto
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
Elton Minetto3.3K views
Clean Architecture in Golang by Elton Minetto
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
Elton Minetto1.4K views
A jornada do desenvolvedor by Elton Minetto
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
Elton Minetto636 views
Modernizando projetos legados usando APIs by Elton Minetto
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
Elton Minetto1K views
12 factor in the PHP world by Elton Minetto
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
Elton Minetto1.4K views
O case da Compufácil e AWS by Elton Minetto
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
Elton Minetto256 views

Recently uploaded

VIRTUS 1.6 MSI.pdf by
VIRTUS 1.6 MSI.pdfVIRTUS 1.6 MSI.pdf
VIRTUS 1.6 MSI.pdfFbioVieira85
5 views13 slides
Shift left DevOps Experience by
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps ExperienceWalter Coan
5 views19 slides
DevFest2023-Pragmatismo da Internet das Coisas by
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das CoisasWalter Coan
25 views40 slides
Conheça agora o UiPath Autopilot™ para o Studio.pdf by
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdfBrunaCavalcanti29
14 views8 slides
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023 by
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023AcademicaDlaUnicesum
6 views3 slides
certificado excel.pdf by
certificado excel.pdfcertificado excel.pdf
certificado excel.pdfjuniorcarvalho136
5 views1 slide

Recently uploaded(8)

Shift left DevOps Experience by Walter Coan
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps Experience
Walter Coan5 views
DevFest2023-Pragmatismo da Internet das Coisas by Walter Coan
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das Coisas
Walter Coan25 views
Conheça agora o UiPath Autopilot™ para o Studio.pdf by BrunaCavalcanti29
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdf
TechConnection 2023 Floripa Azure Container Apps by Walter Coan
TechConnection 2023 Floripa Azure Container AppsTechConnection 2023 Floripa Azure Container Apps
TechConnection 2023 Floripa Azure Container Apps
Walter Coan6 views

Mysql para aplicações Web escaláveis

  • 1. Mysql para aplicações Web escaláveis Elton Luís Minetto segunda-feira, 19 de abril de 2010
  • 2. segunda-feira, 19 de abril de 2010
  • 3. Quem sou eu?  Graduado e pós-graduado em Ciência da Computação. Cursando MBA em Gerenciamento de Projetos  Trabalha com PHP/MySQL desde 2000  Autor do livro Frameworks para Desenvolvimento em PHP - Editora Novatec e co-autor do livro Grid Computing in Research and Education - IBM Redbooks  Membro do PHPSC  Diretor de Desenvolvimento do Drimio e professor na Unochapecó(Chapecó/SC) segunda-feira, 19 de abril de 2010
  • 4. E vocês?  Quem são vocês?  Desenvolvedores  DBAs  Administrador de sistemas  A quanto tempo usa MySQL? E outros bancos de dados? segunda-feira, 19 de abril de 2010
  • 5. Terminologia  Performance: a habilidade que uma aplicação tem de atingir um objetivo, como por exemplo responder no menor tempo possível  Capacidade: a carga total que uma aplicação pode suportar  Escalabilidade: a habilidade de uma aplicação manter a performance quando a carga de trabalho aumenta. É a junção da capacidade e da performance segunda-feira, 19 de abril de 2010
  • 7. Ou...  Performance: a velocidade do carro  Capacidade: o limite de velocidade e o número de pistas da estrada  Escalabilidade: quantos carros e pistas eu posso adicionar sem diminuir a velocidade do tráfego  “Performance is a problem. Scaling your performance is a bigger problem” segunda-feira, 19 de abril de 2010
  • 9. MySQL  Segundo a Wikipédia:  O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface. É atualmente um dos bancos de dados mais populares, com mais de 10 milhões de instalações pelo mundo.  No dia 16 de Janeiro de 2008, a MySQL AB, desenvolvedora do MySQL foi adquirida pela Sun Microsystems, por US$ 1 bilhão, um preço jamais visto no setor de licenças livres. No dia 20 de Abril de 2009 a Oracle compra a Sun Microsystems e todos o seu produtos, incluindo o MySQL segunda-feira, 19 de abril de 2010
  • 10. Porque usar MySQL?  Portabilidade  Compatibilidade com diversas linguagens de programação  Excelente desempenho e estabilidade;  Pouco exigente quanto a recursos de hardware;  É um Software Livre com base na GPL;  Contempla a utilização de vários Storage Engines como MyISAM, InnoDB, Falcon, BDB, Archive, Federated, CSV, Solid…  Suporta controle transacional, Triggers, Stored Procedures e Functions;  Replicação facilmente configurável; segunda-feira, 19 de abril de 2010
  • 11. Quem usa MySQL?  Facebook  Twitter  Feedburner  Linkedin  Digg  Friendster  Flickr  37Signals apps (Basecamp, Campfire) segunda-feira, 19 de abril de 2010
  • 15. Métricas - Drimio  Gráfico de CPU de um dos servidores segunda-feira, 19 de abril de 2010
  • 16. Métricas - Drimio  Gráfico de CPU de um dos servidores Alerta segunda-feira, 19 de abril de 2010
  • 17. Métricas - Drimio  Gráfico de CPU de um dos servidores Pânico Alerta segunda-feira, 19 de abril de 2010
  • 18. Métricas - Drimio  Gráfico de CPU de um dos servidores Pânico Alerta Cool! segunda-feira, 19 de abril de 2010
  • 19. Conceitos  Avaliação de desempenho  “Quão bem isto executa?”  Determinar a capacidade de um sistema  Análise de desempenho  “Por que isso executa desta maneira?”  Determinar onde a aplicação gasta mais tempo e recurso  Avaliar a aplicação inteira (full-stack) ou somente o MySQL (single-component)  O que medir  Transações por unidade de tempo  Tempo de resposta ou latência  Escalonamento  Concorrência segunda-feira, 19 de abril de 2010
  • 20. Ferramentas  Full-stack  ab  siege  http_load  jMeter  Single-component  mysqlslap  sysbench  Database Test Suite  MySQL Benchmark Suite (sql-bench)  innotop, mytop segunda-feira, 19 de abril de 2010 siege -c50 "http://www.drimio.com/usuario/eminetto" -b -r10 No ab verificar “Requests per second”. No siege “Transaction rate” ./run-all-tests --user=root -password=senha --log
  • 21. Nativas do MySQL - show status  Open_tables, Opened_tables: Número de tabelas abertas atualmente e o número de tabelas abertas desde que foi iniciado. Analisa se está certo o cache de tabelas. Valores altos significam que o cache deveria ser maior  Slow_queries: Número de queries demorando mais do que um valor pré-determinado de tempo (my.cnf).  Select_scan: Número de queries que estão usando um full scan para encontrar os dados. Valores altos significam que as queries devem ser otimizadas.  Select_full_join: Número de joins que estão sendo executadas sem o uso de índices. Valor alto significa que índices devem ser criados ou consultas otimizadas.  Qcache_hits: Número de acessos ao cache de queries do MySQL. Um valor alto significa que o MySQL está usando o cache de maneira eficiente, sem precisar reconstruir a query em toda execução segunda-feira, 19 de abril de 2010
  • 22. Ferramentas -mysqladmin  Conexões  mysqladmin extended -i10 | grep Threads_running  Total de queries  mysqladmin extended -i10 | grep Questions segunda-feira, 19 de abril de 2010
  • 23. segunda-feira, 19 de abril de 2010
  • 24. Melhorando a performance  É possível melhorar a performance do MySQL de três maneiras:  Tunning do arquivo de configuração (my.cnf)  Otimizando as consultas SQL  Melhorando hardware/arquitetura  Você também pode dar uma folga pro coitado! segunda-feira, 19 de abril de 2010
  • 25. my.cnf  O arquivo original da instalação do MySQL possui uma configuração com recursos reduzidos, para ser rodado na grande maioria dos servidores  Usar o arquivo apropriado:  my-huge.cnf (enorme capacidade) - Servidores com mais de 1 Gb de memória RAM dedicada ao MySQL  my-large.cnf (grande capacidade) - Servidores com 512 megas a 1 Gb de memória RAM dedicadas ao MySQL  my-medium.cnf (média capacidade) - Servidores com 128 a 256 megas de memória RAM dedicadas ao MySQL  my-small.cnf (pequena capacidade) - Servidores com 64 a 128 megas de memória RAM dedicadas ao MySQL segunda-feira, 19 de abril de 2010
  • 26. MySQL Performance Tuning Primer Script  Script que auxilia a identificar mudanças no arquivo de configuração do MySQL  Fazer o download do script  wget http://day32.com/MySQL/tuning-primer.sh  Tornar o script executável  chmod +x ./tuning-primer.sh  Executar o script  ./tuning-primer.sh  É apresentado um relatório dividido em várias seções com sugestões de modificações nos parâmetros  http://dev.mysql.com/doc/refman/5.0/en/server- system-variables.html segunda-feira, 19 de abril de 2010 tunning_resultado_real.txt tunning_resultado_mac.txt
  • 27. Otimização de consultas/dados  “Fazer o tunning do MySQL durante a escolha da engine de armazenamento das tabelas. Usar InnoDB quando precisa de transações e MyISAM quando não precisa” (Digg)  “Desnormalização ou cacheamento são as únicas formas de gerar uma tag cloud em milissegundos para milhões de tags” (Flickr)  Usar o tipo correto de dados na tabela:  INT x SMALLINT x TINYINT  CHAR x VARCHAR segunda-feira, 19 de abril de 2010
  • 28. Otimização de consultas/dados  Explain  table - mostra o nome da tabela à qual o resultado diz respeito (para quando são efectuados JOINs entre tabelas);  type - tipo de join usado. Do melhor para o pior tipo temos: system, const, eq_ref, ref, range, index, all;  possible_keys - indica quais os índices que o MySQL pode usar para encontrar resultados nesta tabela;  key - índice usado na consulta, ou NULL caso não tenham sido usados índices;  key_len - tamanho do índice usado, caso exista;  ref - coluna(s) usada(s) com a key para devolver resultados;  rows - número de registos que o MySQL tem que examinar para executar a consulta;  extra - informação adicional acerca de como o MySQL vai executar a consulta. A evitar o aparecimento de “using filesort” e “using temporary“. segunda-feira, 19 de abril de 2010 explain.tx t
  • 29. Hardware  CPU  CPUs mais rápidas são melhores do que mais CPUs  64bits com SOs de 64bits  I/O: discos mais rápidos  Mais memória segunda-feira, 19 de abril de 2010
  • 30. Arquitetura  Load Balancers  Cache servers  Bancos de dados Master/Slave, Sharding  Scale-Out Wins Over Scale-Up (escalar horizontalmente adicionando mais máquinas é  melhor do que verticalmente adicionando mais memória/CPU ) segunda-feira, 19 de abril de 2010
  • 31. Arquitetura  Sobre o Youtube:  “Eles seguiram uma evolução comum: servidor único, único master e múltiplos slaves para leitura e depois particionaram a base de dados.”  Dividir a carga entre servidores. As requisições de modificação (INSERT, UPDATE,DELETE) podem ser enviadas para o Master. Os dados são replicados para os Slaves. As requisições de leitura (SELECT) são enviadas direto para os Slave segunda-feira, 19 de abril de 2010
  • 33. Arquitetura - Observações  Como agora um cliente pode ser atendido por diversos servidores Web durante o uso, as sessões dos usuários devem ser salvas no banco de dados ou nos servidores de cache (Memcached)  O MySQL Master é um SPOF( Single Point of Failure) – adicionar mais Masters em um esquema de replicação Master/Master.  Diversos servidores de cache podem ser adicionados segunda-feira, 19 de abril de 2010
  • 34. Arquitetura - Replicação Master r/w segunda-feira, 19 de abril de 2010
  • 35. Arquitetura - Replicação Master w Slave Slave r r segunda-feira, 19 de abril de 2010
  • 36. Arquitetura - Replicação Top Master w Mensagens Amigos r/w r/w Top Top Slave Slave r r segunda-feira, 19 de abril de 2010
  • 37. Arquitetura - Replicação Top Master w Mensagens Amigos w w Top Top Slave Slave Msg r r Amg Slave Slave r r segunda-feira, 19 de abril de 2010
  • 38. Arquitetura - Sharding  Master-Slave tem o problema do tempo de sincronização. Resposta: sharding.  “Uma base de dados pode ser sharded por tabelas, dados ou faixas (ranges). É similar ao particionamento, mas possui algumas diferenças. Sharding envolve separar os dados em máquinas fisicamente distintas, enquanto que particionamento geralmente ocorre em mesmo hardware. MySQL não suporta nativamente sharding, mas sim tabelas particionadas, tabelas federadas (federated) e clusters.”  Ou você pode fazer uma solução “caseira”, usando uma linguagem de programação. segunda-feira, 19 de abril de 2010
  • 39. Arquitetura - Sharding  Exemplo: um blog  Você tem uma tabela com os posts do blog, com as colunas: id, titulo, texto, data, autor_id  autor_id é uma chave estrangeira (foreign key) com a tabela usuarios  Nós vamos dividir os posts do blog em duas bases de dados  Posts cujo autor_id é par vão estar armazenados na base de dados 1  Posts cujo autor_id é ímpar vão estar armazenados na base de dados 2  A consulta: "mostre-me todos os posts do autor de id 26" segunda-feira, 19 de abril de 2010
  • 40. Arquitetura - Sharding <?php $id = 26;//$_GET['id']; if($id % 2 == 0) { $con = mysql_connect('servidor1','root','root'); mysql_select_db("sh_db1"); } else { $con = mysql_connect('servidor2','root','root'); mysql_select_db("sh_db2"); } $res = mysql_query("select * from post where autor_id= $id",$con); while($conteudo = mysql_fetch_array($res, MYSQL_ASSOC)) var_dump($conteudo); segunda-feira, 19 de abril de 2010
  • 41. Arquitetura - Sharding: Como particionar?  Vertical Partitioning: dividir os dados em um nível de tabela/feature. Exemplo: tabela users, no DB1, tabela posts no DB2  Range-based Partitioning: dividir os dados de acordo com faixas. Exemplo: posts de id 1 a 500.000 estão na tabela posts do DB1 e acima deste valor no DB2  Key or Hash based Partitioning: usar uma função matemática para determinar o DB apartir do id. Exemplo: id % 10 = 2, o dado está no DB2, id % 10 = 3, o dado está no DB3.  Directory based Partitioning: usar uma tabela ou serviço de diretório para armazenar onde encontra-se o dado procurado. A desvantagem é que esta tabela/serviço de diretórios torna-se um SPOF (Single Point Of Failure) segunda-feira, 19 de abril de 2010
  • 42. Arquitetura - Sharding: Problemas  Dependência da programação  Consultas SQL complexas para serem cross-shard  Consistência dos dados  Integridade referencial  Complexidade do código  Adicionar novos servidores  Escolha do modo de particionamento é importante  Os servidores web conectam-se a mais servidores MySQL.  Problemas de rede segunda-feira, 19 de abril de 2010
  • 43. segunda-feira, 19 de abril de 2010
  • 44. Dando uma folga pro MySQL  “Não é só porque você tem um martelo que tudo é um prego”  Para algumas aplicações pode-se usar outras tecnologias  Memcached  Sphinx  NoSQL (Cassandra/MongoDB/CouchDB) segunda-feira, 19 de abril de 2010
  • 45. Memcached - O que é?  Sistema distribuído e de alta performance para fazer cache de objetos em memória RAM. É genério por natureza mas muito usado para acelerar aplicações web dinâmicas, reduzindo a carga de bases de dados, sessões de usuários, arquivos CSS.  Foi desenvolvido pela Danga Interactive para aumentar a performance do site LiveJournal.com, que possui mais de 20 milhões de page views por dia e atende 1 milhão de usuários. memcached reduziu a carga dos servidores de banco de dados forncecendo páginas mais rápidas e melhor utilização de recursos. segunda-feira, 19 de abril de 2010
  • 46. Memcached - Por que usar?  Escalável: fácil adicionar máquinas e instâncias  RAM é muito mais rápido que I/O em disco  Alivia a carga do banco de dados  Muito flexível: pode armazenar qualquer dado, desde que não ultrapasse 1 MB  Bibliotecas client disponíveis em diversas linguagens (PHP, C, Java, Ruby, Python) segunda-feira, 19 de abril de 2010
  • 47. Memcached  Armazena qualquer coisa que pode ser serializado  Armazena com uma chave única (255 caracteres) e tempo de validade  O programador usa da seguinte forma :  Encontrou no cache? Retorna os dados  Não encontrou no cache? Processa, armazena no cache e retorna o dado segunda-feira, 19 de abril de 2010
  • 48. Memcached - Exemplo (PHP) <?php $memcache = new Memcache; $memcache->connect('localhost', 11211); $conteudo = $memcache->get('estados'); if($conteudo === false) { echo "buscando do banco de dadosn"; $con = mysql_connect('localhost','user','senha'); mysql_select_db("banco"); $res = mysql_query("select * from state",$con); $conteudo = mysql_fetch_array($res, MYSQL_ASSOC); $memcache->set('estados',$conteudo,false,100); mysql_close($con); } var_dump($conteudo); segunda-feira, 19 de abril de 2010
  • 49. Memcached e MySQL  O memcache_engine permite que o Memcached trabalhe como uma "storage engine" do MySQL. Isto permite fazer SELECT/UPDATE/INSERTE/DELETE em uma tabela armazenada no Memcached  http://tangent.org/index.pl?node_id=506  Existe um conjunto de MySQL UDFs (user defined functions) que permite acessar dados do Memcached de dentro de uma consulta SQL ou uma Trigger/Procedure  http://tangent.org/586/Memcached_Functions_for_MySQL.html segunda-feira, 19 de abril de 2010
  • 50. Sphinx  Sphinxsearch é um motor de pesquisa de texto completo, distribuído sob a versão GPLv2 .  Sphinx foi especialmente desenvolvido para integrar um banco de dados SQL com uma linguagem de 'scripts' (oficialmente suportada - PHP). Atualmente o Sphinx conecta-se diretamente com os bancos de dados MySQL e Postgres  O nome "Sphinx" é um acrônimo oficial da frase 'SQL Phrase Index'. segunda-feira, 19 de abril de 2010
  • 51. Sphinx - Arquitetura  O Sphinxsearch inclui os seguintes programas:  indexer - um utilitário para criar índices fulltext  search - uma simples (teste) utilidade para consulta índices fulltext de linha de comando  searchd - um servidor('daemon') para pesquisar através de índices fulltext. (web utilizando scripts Sphinx API; ou MySQL com SphinxSE, ou o seu servidor de aplicações)  sphinxapi - um conjunto de APIs de bibliotecas populares da web (API - PHP, Python, Java, Perl e Ruby). segunda-feira, 19 de abril de 2010
  • 52. Sphinx - Características  Alta velocidade de indexação (10 MB/s em uma CPU)  Alta velocidade de pesquisa (menor que 0.1 segundo em 2-4 GB de texto)  Alta escalabilidade (mais de 100 GB de texto, mais de 100 M de documentos em uma CPU)  Suporte a pesquisa distribuida  Suporte nativo ao banco de dados MySQL  Suporte a pesquisa por frases  Suporte a 'ranking' de proximidade das frases, com boa relavância segunda-feira, 19 de abril de 2010
  • 53. Sphinx - Características  Suporte a 'stemming' de Inglês e Russo  Suporte a vários números de campos de documentos (os pesos podem ser mudados na hora)  Suporte a grupos de documentos  Suporte a 'stopwords'  Suporte a diferentes modos de pesquisas ("match all", "match phrase" e "match any" - v.0.9.5)  PHP API segunda-feira, 19 de abril de 2010
  • 54. Sphinx X MySQL mysql> select id from entity where name = 'Apple'; 2 rows in set (0.01 sec) mysql> select id from entity where name like '%Apple%'; 6610 rows in set (36.49 sec) [root@linux ~]# search -i entity apple Sphinx 0.9.9-release (r2117) Copyright (c) 2001-2009, Andrew Aksyonoff using config file '/usr/local/etc/sphinx.conf'... index 'entity': query 'apple ': returned 1000 matches of 5930 total in 0.001 sec segunda-feira, 19 de abril de 2010 explain_sphinx.txt
  • 55. NoSQL  Algumas aplicações podem se beneficiar de um ambiente “sem esquema”, ou “não normalizado”  Os bancos NoSQL (ou não relacionais) possuem a capacidade de escalar de maneira mais rápida  Mas não são todas as aplicações que podem “abrir mão” da integridade ACID segunda-feira, 19 de abril de 2010
  • 56. NoSQL - Exemplos  Orientados a Documento  CouchDB  MongoDB  Orientados a Chave/Valor (Key/Value)  Memcachedb  Project Voldemort  Redis  SimpleDB  Hbase  Tabular  Cassandra  Hypertable segunda-feira, 19 de abril de 2010
  • 57. Referências  Alto Desempenho em MySQL. Editora Alta Books  http://ha-mc.org/node/24  http://dev.mysql.com/news-and-events/newsletter/2004-01/ a0000000301.html  http://architects.dzone.com/news/your-mysql-server-loaded  http://www.dicas-l.com.br/dicas-l/20090511.php  http://axonflux.com/mysql-sharding-for-5-billion-p  http://www.jurriaanpersyn.com/archives/2009/02/12/database- sharding-at-netlog-with-mysql-and-php/#databasesetup4  http://www.hitk.com.br/?q=node/40  http://www.plugmasters.com.br/sys/materias/888/1/Otimiza %E7%E3o-de-Aplica%E7%F5es-MySQL---Parte-II  http://www.mysqlperformanceblog.com/mysql-performance- presentations/ segunda-feira, 19 de abril de 2010
  • 58. Referências  http://articles.techrepublic.com.com/ 5100-10878_11-5211760.html  http://josefernandes.pt/artigos/optimizar-mysql-linux  http://www.mysqlperformanceblog.com/  http://www.linux.com/archive/feature/41348  http://www.myloadtest.com/  http://blog.thiagobelem.net/mysql/2009/07/08/otimizando- consultas-mysql-com-o-memcached-563/  http://ilkinbalkanay.blogspot.com/2010/03/load-testing- relational-databases-with.html  http://www.sphinxsearch.com.br/Sobre-SphinxSearch segunda-feira, 19 de abril de 2010
  • 59. Contato <?php $card = array( ‘nome’ => ‘Elton Luís Minetto’, ‘site’ => ‘http://www.eltonminetto.net’, ‘e-mail’ => ‘elton.minetto@drimio.com’, ‘twitter’ => ‘@eminetto’, ‘fone’ => ‘(47) 9189 6359’ ); var_dump($card); ?> segunda-feira, 19 de abril de 2010

Editor's Notes

  1. siege -c50 &quot;http://www.drimio.com/usuario/eminetto&quot; -b -r10 No ab verificar &amp;#x201C;Requests per second&amp;#x201D;. No siege &amp;#x201C;Transaction rate&amp;#x201D; ./run-all-tests --user=root -password=senha --log
  2. tunning_resultado_real.txt tunning_resultado_mac.txt
  3. explain.txt
  4. explain_sphinx.txt