SlideShare uma empresa Scribd logo
Otimizando o MySQL




                                                Elton Luís Minetto

quarta-feira, 6 de julho de 2011
QUEM SOU EU?
    • Graduado                      e pós-graduado em Ciência da Computação

    • Trabalha   com PHP/MySQL desde 2000. Trabalha com Linux
         desde 1997. Professor desde 2004.

    • 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

    • Sócio               da Coderockr
quarta-feira, 6 de julho de 2011
QUEM USA MYSQL?

    • Facebook                             • Flickr

    • Twitter                              • 37Signals
                                                   apps (Basecamp,
                                            Campfire)
    • Feedburner

    • Linkedin

    • Digg

    • Friendster

quarta-feira, 6 de julho de 2011
MÉTRICAS
quarta-feira, 6 de julho de 2011
quarta-feira, 6 de julho de 2011
quarta-feira, 6 de julho de 2011
quarta-feira, 6 de julho de 2011
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

quarta-feira, 6 de julho de 2011
CONCEITOS

    • Avaliar                a aplicação inteira (full-stack)

          • ab; siege; http_load; jMeter

    • ou          somente o MySQL (single-component)

          • mysqlslap; sysbench; Database Test                  Suite; MySQL Benchmark
              Suite (sql-bench) ; innotop


quarta-feira, 6 de julho de 2011
CONCEITOS

    •O           que medir

          • Transações                por unidade de tempo

          • Tempo                  de resposta ou latência

          • Escalonamento

          • Concorrência



quarta-feira, 6 de julho de 2011
NATIVAS- 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.

quarta-feira, 6 de julho de 2011
NATIVAS- SHOW STATUS

    • 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



quarta-feira, 6 de julho de 2011
MYSQLADMIN


    • Conexões

          •   mysqladmin extended -i10 | grep Threads_running


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




quarta-feira, 6 de julho de 2011
FAZENDO O TUNNING
quarta-feira, 6 de julho de 2011
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



quarta-feira, 6 de julho de 2011
TUNNING DO ARQUIVO DE
             CONFIGURAÇÃO



quarta-feira, 6 de julho de 2011
MY.CNF
    •O     arquivo original da instalação do MySQL possui uma
         configuração com recursos reduzidos. 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

quarta-feira, 6 de julho de 2011
MYSQL PERFORMANCE
                        TUNING PRIMER SCRIPT
    • Script  que auxilia a identificar mudanças no arquivo de
         configuração do MySQL
          •   wget http://day32.com/MySQL/tuning-primer.sh

          •   chmod +x ./tuning-primer.sh

          •   ./tuning-primer.sh


    •É     apresentado um relatório dividido em várias seções com
         sugestões de modificações nos parâmetros

quarta-feira, 6 de julho de 2011
OTIMIZANDO CONSULTAS
                   SQL E DADOS



quarta-feira, 6 de julho de 2011
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

quarta-feira, 6 de julho de 2011
EXPLAIN
    • table   - mostra o nome da tabela à qual o resultado diz
         respeito (para quando são efetuados 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;

quarta-feira, 6 de julho de 2011
EXPLAIN

    • 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“.


quarta-feira, 6 de julho de 2011
MELHORANDO HARDWARE/
             ARQUITETURA



quarta-feira, 6 de julho de 2011
• Sobre                o Youtube:

          • “Eles  seguiram uma evolução comum: servidor único, único
              master e múltiplos slaves para leitura e depois particionaram
              (sharding) a base de dados.”




quarta-feira, 6 de julho de 2011
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


quarta-feira, 6 de julho de 2011
PARTICIONAMENTO
    • Particionamento                      lógico de tabelas

    • Transparente                      ao usuário

    • Fácil           manutenção

    • Melhora                      da performance de queries

    • Fácil           gerenciamento de tabelas com muitos registros

    • MySQL                        5.1 e superiores

quarta-feira, 6 de julho de 2011
PARTICIONAMENTO

         CREATE TABLE Employee ( emp_id INT AUTO_INCREMENT, fname VARCHAR
         (50), lname VARCHAR(50), store_id TINYINT,
         PRIMARY KEY (emp_id) ) ENGINE=MyISAM
         PARTITION BY RANGE (emp_id) (
            PARTITION p0 VALUES LESS THAN (10000),
            PARTITION p1 VALUES LESS THAN (20000),
            PARTITION p2 VALUES LESS THAN (30000),
            PARTITION p3 VALUES LESS THAN (40000)
         )




quarta-feira, 6 de julho de 2011
PARTICIONAMENTO


         CREATE TABLE Employee ( emp_id INT AUTO_INCREMENT, fname VARCHAR
         (50), lname VARCHAR(50), store_id TINYINT,
         PRIMARY KEY (emp_id) ) ENGINE=MyISAM
         PARTITION BY HASH (emp_id)
         PARTITIONS 4;




quarta-feira, 6 de julho de 2011
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 )


quarta-feira, 6 de julho de 2011
ARQUITETURA


    • 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




quarta-feira, 6 de julho de 2011
ARQUITETURA
quarta-feira, 6 de julho de 2011
REPLICAÇÃO


                                       Master
                                        r/w




quarta-feira, 6 de julho de 2011
REPLICAÇÃO

                                            Master
                                              w




                                    Slave            Slave
                                      r                r




quarta-feira, 6 de julho de 2011
REPLICAÇÃO
                                                        Top
                                                       Master
                                                         w
                                   Mensagens                            Amigos
                                      r/w                                r/w


                                                Top              Top
                                               Slave            Slave
                                                 r                r




quarta-feira, 6 de julho de 2011
REPLICAÇÃO
                                                        Top
                                                       Master
                                                         w
                                   Mensagens                            Amigos
                                       w                                  w


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




quarta-feira, 6 de julho de 2011
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.”

quarta-feira, 6 de julho de 2011
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

quarta-feira, 6 de julho de 2011
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/
    •    http://josefernandes.pt/artigos/optimizar-mysql-linux
    •    http://www.mysqlperformanceblog.com/
    •    http://www.linux.com/archive/feature/41348
    •    http://ilkinbalkanay.blogspot.com/2010/03/load-testing-relational-databases-with.html


quarta-feira, 6 de julho de 2011
CONTATO

         <?php
         $card = array(
           ‘nome’ => ‘Elton Luís Minetto’,
           ‘site’ => ‘http://www.eltonminetto.net’,
           ‘e-mail’ => ‘eminetto@coderockr.com’,
           ‘twitter’ => ‘@eminetto’,
           ‘all’ => ‘http://about.me/eminetto'
         );
         var_dump($card);
         ?>




quarta-feira, 6 de julho de 2011

Mais conteúdo relacionado

Mais procurados

Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 
Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de Dados
Fabrízio Mello
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
Leonardo Soares
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
Daniel Brandão
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
flaviognm
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
Wagner Bianchi
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
Dextra
 
Aula 05 acessando o mysql
Aula 05   acessando o mysqlAula 05   acessando o mysql
Aula 05 acessando o mysql
Roitier Gonçalves
 
Mysql for IBMers
Mysql for IBMersMysql for IBMers
Mysql for IBMers
Wagner Bianchi
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
Leo Frazão
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
elliando dias
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
Pablo Garcia
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
Ed W. Jr
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
Denis Vieira
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Marlon Munhoz
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
Eduardo Lopes
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
Juliano Atanazio
 
UNIFAL - MySQL Storage Engine - 5.0/5.6
UNIFAL - MySQL Storage Engine - 5.0/5.6UNIFAL - MySQL Storage Engine - 5.0/5.6
UNIFAL - MySQL Storage Engine - 5.0/5.6
Wagner Bianchi
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
Luis Ferreira
 

Mais procurados (20)

Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de Dados
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
 
Aula 05 acessando o mysql
Aula 05   acessando o mysqlAula 05   acessando o mysql
Aula 05 acessando o mysql
 
Mysql for IBMers
Mysql for IBMersMysql for IBMers
Mysql for IBMers
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
UNIFAL - MySQL Storage Engine - 5.0/5.6
UNIFAL - MySQL Storage Engine - 5.0/5.6UNIFAL - MySQL Storage Engine - 5.0/5.6
UNIFAL - MySQL Storage Engine - 5.0/5.6
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 

Destaque

Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipmanjonesshipman
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Daniel Rehn
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
iniciativaverds
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Daniel Rehn
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2dmc digital media center GmbH
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Manuel Menezes de Sequeira
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
dbi services
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
NotORM
NotORMNotORM
NotORM
Tiago Davi
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27domidp
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
Elton Minetto
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
marcossonotec
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea
FC Barcelona
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
Francois Ostyn
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Daniel Rehn
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
Julien Fallet
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
elliando dias
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
HerdwangerSV
 

Destaque (20)

Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
Digitale Mentalität II
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
NotORM
NotORMNotORM
NotORM
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
 

Semelhante a Otimização MySQL

Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveis
Elton Minetto
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto Alegre
Rafael Gomes
 
Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014
MySQL Brasil
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
Adriano Schmidt
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
Felipe Ribeiro
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
MySQL Brasil
 
MySQL no Windows: implementação eficiente de novas aplicações
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 Brasil
 
Desenvolvendo serviços escaláveis e de alta performance com MySQL
Desenvolvendo serviços escaláveis e de alta performance com MySQLDesenvolvendo serviços escaláveis e de alta performance com MySQL
Desenvolvendo serviços escaláveis e de alta performance com MySQL
MySQL Brasil
 
Otimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend FrameworkOtimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend Framework
Elton Minetto
 
MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor
MySQL Brasil
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
Roberto Fonseca
 
Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
Raul Oliveira
 
Mongo db
Mongo dbMongo db
Mongo db
Edmilson Neto
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
Mateus Aubin
 
Serviços Escaláveis e de Alta Performance com MySQL e Java
Serviços Escaláveis e de Alta Performance com MySQL e JavaServiços Escaláveis e de Alta Performance com MySQL e Java
Serviços Escaláveis e de Alta Performance com MySQL e Java
MySQL Brasil
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
J0071
 
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
MySQL Brasil
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
Mateus Aubin
 

Semelhante a Otimização MySQL (20)

Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveis
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto Alegre
 
Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
 
MySQL no Windows: implementação eficiente de novas aplicações
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
 
Desenvolvendo serviços escaláveis e de alta performance com MySQL
Desenvolvendo serviços escaláveis e de alta performance com MySQLDesenvolvendo serviços escaláveis e de alta performance com MySQL
Desenvolvendo serviços escaláveis e de alta performance com MySQL
 
Otimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend FrameworkOtimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend Framework
 
MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
 
Mongo db
Mongo dbMongo db
Mongo db
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
 
Serviços Escaláveis e de Alta Performance com MySQL e Java
Serviços Escaláveis e de Alta Performance com MySQL e JavaServiços Escaláveis e de Alta Performance com MySQL e Java
Serviços Escaláveis e de Alta Performance com MySQL e Java
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
 
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
 

Mais de Elton Minetto

Go e Microserviços - Nascidos um para o outro
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 Minetto
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
Elton Minetto
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
Elton Minetto
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
Elton Minetto
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Elton Minetto
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
Elton Minetto
 
JAMstack
JAMstackJAMstack
JAMstack
Elton Minetto
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
Elton Minetto
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
Elton Minetto
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
Elton Minetto
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
Elton Minetto
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
Elton Minetto
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
Elton Minetto
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
Elton Minetto
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
Elton Minetto
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
Elton Minetto
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
Elton Minetto
 
Start you
Start youStart you
Start you
Elton Minetto
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
Elton Minetto
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
Elton Minetto
 

Mais de Elton Minetto (20)

Go e Microserviços - Nascidos um para o outro
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
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
 
JAMstack
JAMstackJAMstack
JAMstack
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
 
Start you
Start youStart you
Start you
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
 

Otimização MySQL

  • 1. Otimizando o MySQL Elton Luís Minetto quarta-feira, 6 de julho de 2011
  • 2. QUEM SOU EU? • Graduado e pós-graduado em Ciência da Computação • Trabalha com PHP/MySQL desde 2000. Trabalha com Linux desde 1997. Professor desde 2004. • 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 • Sócio da Coderockr quarta-feira, 6 de julho de 2011
  • 3. QUEM USA MYSQL? • Facebook • Flickr • Twitter • 37Signals apps (Basecamp, Campfire) • Feedburner • Linkedin • Digg • Friendster quarta-feira, 6 de julho de 2011
  • 5. quarta-feira, 6 de julho de 2011
  • 6. quarta-feira, 6 de julho de 2011
  • 7. quarta-feira, 6 de julho de 2011
  • 8. 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 quarta-feira, 6 de julho de 2011
  • 9. CONCEITOS • Avaliar a aplicação inteira (full-stack) • ab; siege; http_load; jMeter • ou somente o MySQL (single-component) • mysqlslap; sysbench; Database Test Suite; MySQL Benchmark Suite (sql-bench) ; innotop quarta-feira, 6 de julho de 2011
  • 10. CONCEITOS •O que medir • Transações por unidade de tempo • Tempo de resposta ou latência • Escalonamento • Concorrência quarta-feira, 6 de julho de 2011
  • 11. NATIVAS- 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. quarta-feira, 6 de julho de 2011
  • 12. NATIVAS- SHOW STATUS • 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 quarta-feira, 6 de julho de 2011
  • 13. MYSQLADMIN • Conexões • mysqladmin extended -i10 | grep Threads_running • Total de queries • mysqladmin extended -i10 | grep Questions quarta-feira, 6 de julho de 2011
  • 14. FAZENDO O TUNNING quarta-feira, 6 de julho de 2011
  • 15. 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 quarta-feira, 6 de julho de 2011
  • 16. TUNNING DO ARQUIVO DE CONFIGURAÇÃO quarta-feira, 6 de julho de 2011
  • 17. MY.CNF •O arquivo original da instalação do MySQL possui uma configuração com recursos reduzidos. 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 quarta-feira, 6 de julho de 2011
  • 18. MYSQL PERFORMANCE TUNING PRIMER SCRIPT • Script que auxilia a identificar mudanças no arquivo de configuração do MySQL • wget http://day32.com/MySQL/tuning-primer.sh • chmod +x ./tuning-primer.sh • ./tuning-primer.sh •É apresentado um relatório dividido em várias seções com sugestões de modificações nos parâmetros quarta-feira, 6 de julho de 2011
  • 19. OTIMIZANDO CONSULTAS SQL E DADOS quarta-feira, 6 de julho de 2011
  • 20. 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 quarta-feira, 6 de julho de 2011
  • 21. EXPLAIN • table - mostra o nome da tabela à qual o resultado diz respeito (para quando são efetuados 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; quarta-feira, 6 de julho de 2011
  • 22. EXPLAIN • 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“. quarta-feira, 6 de julho de 2011
  • 23. MELHORANDO HARDWARE/ ARQUITETURA quarta-feira, 6 de julho de 2011
  • 24. • Sobre o Youtube: • “Eles seguiram uma evolução comum: servidor único, único master e múltiplos slaves para leitura e depois particionaram (sharding) a base de dados.” quarta-feira, 6 de julho de 2011
  • 25. 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 quarta-feira, 6 de julho de 2011
  • 26. PARTICIONAMENTO • Particionamento lógico de tabelas • Transparente ao usuário • Fácil manutenção • Melhora da performance de queries • Fácil gerenciamento de tabelas com muitos registros • MySQL 5.1 e superiores quarta-feira, 6 de julho de 2011
  • 27. PARTICIONAMENTO CREATE TABLE Employee ( emp_id INT AUTO_INCREMENT, fname VARCHAR (50), lname VARCHAR(50), store_id TINYINT, PRIMARY KEY (emp_id) ) ENGINE=MyISAM PARTITION BY RANGE (emp_id) ( PARTITION p0 VALUES LESS THAN (10000), PARTITION p1 VALUES LESS THAN (20000), PARTITION p2 VALUES LESS THAN (30000), PARTITION p3 VALUES LESS THAN (40000) ) quarta-feira, 6 de julho de 2011
  • 28. PARTICIONAMENTO CREATE TABLE Employee ( emp_id INT AUTO_INCREMENT, fname VARCHAR (50), lname VARCHAR(50), store_id TINYINT, PRIMARY KEY (emp_id) ) ENGINE=MyISAM PARTITION BY HASH (emp_id) PARTITIONS 4; quarta-feira, 6 de julho de 2011
  • 29. 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 ) quarta-feira, 6 de julho de 2011
  • 30. ARQUITETURA • 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 quarta-feira, 6 de julho de 2011
  • 32. REPLICAÇÃO Master r/w quarta-feira, 6 de julho de 2011
  • 33. REPLICAÇÃO Master w Slave Slave r r quarta-feira, 6 de julho de 2011
  • 34. REPLICAÇÃO Top Master w Mensagens Amigos r/w r/w Top Top Slave Slave r r quarta-feira, 6 de julho de 2011
  • 35. REPLICAÇÃO Top Master w Mensagens Amigos w w Top Top Slave Slave Msg r r Amg Slave Slave r r quarta-feira, 6 de julho de 2011
  • 36. 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.” quarta-feira, 6 de julho de 2011
  • 37. 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 quarta-feira, 6 de julho de 2011
  • 38. 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/ • http://josefernandes.pt/artigos/optimizar-mysql-linux • http://www.mysqlperformanceblog.com/ • http://www.linux.com/archive/feature/41348 • http://ilkinbalkanay.blogspot.com/2010/03/load-testing-relational-databases-with.html quarta-feira, 6 de julho de 2011
  • 39. CONTATO <?php $card = array( ‘nome’ => ‘Elton Luís Minetto’, ‘site’ => ‘http://www.eltonminetto.net’, ‘e-mail’ => ‘eminetto@coderockr.com’, ‘twitter’ => ‘@eminetto’, ‘all’ => ‘http://about.me/eminetto' ); var_dump($card); ?> quarta-feira, 6 de julho de 2011