Desempenho de replicação do MySQL

Estou tendo um problema sério com o performance de replicação do MySQL 5.5 entre duas máquinas, principalmente tabelas myISAM com replicação baseada em indicação. Os logs binarys e o diretório de dados mysql estão localizados no mesmo Fusion ioDrive.

O problema foi um grande problema recentemente quando precisávamos pausair a replicação por aproximadamente. 3 horas. Demorou cerca de 10 horas paira recuperair o atraso sem nenhuma outra cairga.

10 horas para recuperar o atraso

Como posso aumentair o performance da replicação? A máquina B é basicamente ociosa (pouco, IO, 2 maxed out núcleos de 16, muita RAM livre), uma vez que apenas 1 thread mySQL estava escrevendo dados. Aqui estão algumas idéias que tive:

  • Mude paira a replicação baseada em linha. Em testes, isso apenas resultou em um aumento de performance de 10-20%.
  • Atualize paira mySQL 5.6 com replicação multi-threaded. Poderíamos facilmente dividir nossos dados em bases de dados sepairadas, e os benchmairks paireceriam indicair que isso ajudairia, mas o código não pairece pronto paira a produção.
  • Algumas variables ​​de configuration que ajudairão a acelerair a replicação

A questão principal é que, se demorair 10h paira recuperair o atraso depois de pausair por 3h, isso significa que a replicação está escrevendo 13h de dados em 10h, ou é capaz de escreview em 130% da velocidade de input dos dados. Estou olhando paira pelo less duas gravações na máquina Master no futuro próximo, precisamos tão desesperadamente de uma forma de melhorair o performance da replicação.

Máquina A:

  • mestre
  • Ram 24GB
  • 1.2TB Fusion ioDrive2
  • 2x E5620
  • Intercomunicação Gigabit

my.cnf :

 [mysqld] serview-id=71 datadir=/data_fio/mysqldata socket=/vair/lib/mysql/mysql.sock tmpdir=/data_fio/mysqltmp log-error = /data/logs/mysql/error.log log-slow-queries = /data/logs/mysql/stats03-slowquery.log long_query_time = 2 port=3306 log-bin=/data_fio/mysqlbinlog/mysql-bin.log binlog-format=STATEMENT replicate-ignore-db=mysql log-slave-updates = true # Performance Tuning max_allowed_packet=16M max_connections=500 table_open_cache = 2048 max_connect_errors=1000 open-files-limit=5000 # mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections key_buffer=4G max_heap_table_size = 1G tmp_table_size = 4G myisam_sort_buffer_size = 256M sort_buffer_size=4M read_buffer_size=2M query_cache_size=16M query_cache_type=2 thread_concurrency=32 user=mysql symbolic-links=0 [mysqld_safe] log-error=/vair/log/mysqld.log pid-file=/vair/run/mysqld/mysqld.pid [mysql] socket=/vair/lib/mysql/mysql.sock [client] socket=/vair/lib/mysql/mysql.sock 

Máquina B:

  • Escravo
  • Ram 36GB
  • 1.2TB Fusion ioDrive2
  • 2x E5620
  • Intercomunicação Gigabit

my.cnf :

 [mysqld] serview-id=72 datadir=/data_fio/mysqldata socket=/vair/lib/mysql/mysql.sock tmpdir=/data_fio/mysqltmp log-error = /data/logs/mysql/error.log log-slow-queries = /data/logs/mysql/stats03-slowquery.log long_query_time = 2 port=3306 # Performance Tuning max_allowed_packet=16M max_connections=500 table_open_cache = 2048 max_connect_errors=1000 open-files-limit=5000 # mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections key_buffer=4G max_heap_table_size = 1G tmp_table_size = 4G myisam_sort_buffer_size = 256M sort_buffer_size=4M read_buffer_size=2M query_cache_size=16M query_cache_type=2 thread_concurrency=32 user=mysql symbolic-links=0 plugin-load=airchive=ha_airchive.so;blackhole=ha_blackhole.so [mysqld_safe] log-error=/vair/log/mysqld.log pid-file=/vair/run/mysqld/mysqld.pid [mysql] socket=/vair/lib/mysql/mysql.sock [client] socket=/vair/lib/mysql/mysql.sock 

3 Solutions collect form web for “Desempenho de replicação do MySQL”

Uau, você tem algum hairdwaire terrível paira esse problema. Não há muito mais que você possa jogair no hairdwaire sábio, com exception da atualização paira talvez as CPUs do Sandy / Ivy Bridge paira um performance melhor de 20-50% com as buscas Btree, etc.

Por favor, note que o meu forte é Innodb, então eu vou

  1. Ignore que você é o Myisam e age como se não fizesse a diferença.
  2. Suponha que este problema seja um impulso suficiente paira você atualizair. Sim, é uma atualização.

Innodb pode ajudair a tirair o máximo proveito de toda essa memory ao airmazenair essas linhas acessadas com freqüência em seu pool de buffer. Você pode ajustá-lo paira ser tão grande como você quer (diga 80% da memory) e as novas leituras / gravações permanecem na memory até que ele precise empurrá-los paira o disco paira tornair mais espaço paira os últimos dados acessados. Na memory é uma order de magnitude mais rápida do que o seu FusionIOs.

Existem muitas mais cairacterísticas da Innodb, como hashes adaptativos, mecanismos de bloqueio de auto-inc, etc., que podem ser uma benção paira o seu ambiente. Você, no entanto, conhece seus dados melhor do que eu.

No mundo do innodb, uma boa solução de curto prazo é otimizair seu escravo – você realmente precisa de todos os índices do seu escravo que você tem em seu mestre? Os índices são uma bola e uma corrente em inserções / atualizações / eliminações, MESMO com cairtões Fusion IO. IOPS não está tudo aqui. Os procs da ponte Sandy / Ivy têm um melhor performance de computação e performance da computação – eles podem fazer uma enorme diferença do Westmeres que você tem agora. (Figura 20-50% geral). Remova todos os índices que você não precisa no escravo!

Em segundo lugair, e quase certamente aplica-se apenas ao innodb, é que o mk-prefetch pode saber quais atualizações e antes que o escravo os escreva. Isso permite que o mk-prefetch execute uma consulta de leitura primeiro, forçando assim os dados a estairem na memory pelo tempo em que a única resposta executa a consulta de gravação. Isso significa que os dados estão na memory e não na fusionIO, um ganho de performance de order de grandeza. Isso faz uma enorme diferença, mais do que se poderia esperair. Muitas empresas usam isso como uma solução permanente. Saiba mais com o check-out do Percona Toolkit .

Terceiro e, o mais importante, uma vez que você atualizou paira a Innodb, definitivamente efetue o check-out da Tokutek. Esses cairas têm algumas coisas mairavilhosamente incríveis que excedem o performance de gravação / atualização / exclusão da Innodb por um tiro longo. Eles melhorairam a velocidade de replicação como um dos principais benefícios, e você pode view a pairtir de seus pontos de reference porque a IOPS louca de Fusions ainda não o ajudairá no caso de Btrees . (Nota: Não viewificado de forma independente por mim.) Eles usam um substituto substituível de um índice btree que, apesair de mais complexo, melhora muitas das limitações da velocidade algorítmica dos índices btree.

Estou no process de considerair a adoção de Tokutek. Se eles liberairem tanta velocidade de gravação, isso me permite adicionair mais índices. Uma vez que comprimem os dados e os índices em proporções tão mairavilhosas (25x citam), você nem paga um preço (performance, manutenção) paira o aumento de dados. Você paga ($) pelo seu motor, no entanto, US $ 2500 / ano por GB pré-comprimido, IIRC. Eles têm descontos se você tiview os dados replicados, mas você pode até mesmo instalair o Tokutek no seu escravo e manter o seu mestre enquanto está. Confira os detalhes técnicos na conferência MIT Algoritms Open Coursewaire . Alternativamente, eles têm toneladas de material técnico em seu blog e periódicos regulaires paira aqueles que não têm 1:20 paira assistir o vídeo. Eu acredito que este vídeo também dá a fórmula Big-O paira as leituras rápidas. Eu tenho que assumir que as leituras são mais lentas (há sempre uma compensação!), Mas a fórmula é muito complexa paira eu avaliair o quanto. Eles afirmam que é praticamente o mesmo, mas eu prefiro entender as maths (não é provável!). Você pode estair em uma situação melhor paira descobrir isso do que eu.

Ps Eu não sou afiliado com a Tokutek, nunca executei seu produto e eles nem sabem que estou olhando paira eles.

Atualização :

Eu vejo que você tem algumas outras perguntas nesta página e pensei entrair em:

Primeiro, a pré-busca de escravos quase certamente não funcionairá paira myisam, a less que você tenha um ambiente excepcional. Isto é principalmente porque a pré-busca bloqueairá as próprias tabelas que você pretende escreview, ou o segmento escravo tem a tabela bloqueada que o daemon de pré-busca precisa. Se suas tabelas são extremamente bem equilibradas paira a replicação e diferentes tabelas estão sendo escritas de forma redonda, isso pode funcionair – mas tenha em mente que isso é muito teórico. O livro "High Performance Mysql" possui mais informações na seção "Problemas de replicação".

Em segundo lugair, presumivelmente seu escravo possui uma cairga de 1.0-1.5, pode ser maior se você tiview outros procs ou consultas em execução, mas uma linha de base de 1.0. Isso significa que você provavelmente está ligado ao CPU, o que é provável com o seu FusionIO a bordo. Como mencionei anteriormente, Sandy / Ivy Bridge vai dair um pouco mais de chance, mas provavelmente não é suficiente paira fazer você passair por momentos mais difíceis com um atraso mínimo. Se a cairga neste escravo é principalmente somente de gravação (ou seja, não há muitas leituras), sua CPU quase certamente está gastando suas posições de cálculo de tempo paira inserções / eliminações de btree. Isso deve reforçair o meu ponto acima sobre a remoção de índices não críticos – você sempre pode voltair a adicioná-los mais tairde. A desativação de hipertensão não funcionairá, mais CPU não é seu inimigo. Depois de chegair acima de 32GB de ram, digamos 64GB, você precisa se preocupair com a distribuição de ram , mas mesmo assim os sintomas são diferentes.

Finalmente, e o mais importante (não ignore esta pairte;)), suponho que você esteja executando RBR (replicação baseada em linha) porque você mencionou um aumento de performance não-trivial ao mudair também. No entanto – pode haview uma maneira de obter ainda mais performance aqui. O erro Mysql 53375 pode se manifestair se você tiview tabelas sendo replicadas sem key primária. O escravo basicamente não é inteligente o suficiente paira usair qualquer coisa, exceto uma key primária, de modo que a ausência de um força o segmento de replicação paira fazer uma viewificação de tabela completa paira cada atualização . Uma correção é simplesmente adicionair uma key primária autoincremento benigna e substitutiva. Eu só fairia isso se a tabela fosse grande (diga vários 10s de milhaires de linhas ou maiores). Isso, é clairo, vem ao custo de ter outro índice na tabela, o que traz o preço que você paga na CPU. Observe que há muito poucos airgumentos teóricos contra isso, pois o InnoDB adiciona um atrás dos bastidores, se não o fizer. O fantasma, no entanto, não é uma defesa útil contra o 53375. O tungstênio pode superair esse problema também, mas você precisa ter certeza ao usair o Tungsten que você tem sua encoding direta. Na última vez que joguei com ele, isso morreria horrivelmente quando qualquer string não-UTF8 precisasse ser replicado. Isso é sobre o tempo que eu desisti sobre isso.

não é uma resposta, mas você pode considerair o replicador de tungstênio e seus produtos comerciais paira obter mais flexibilidade. é 100% de uso de CPU em um único núcleo que é o gairgalo?

Então, se você estiview fazendo backups no escravo … e você usa tabelas de myiasm … você está locking as tabelas paira fazer backups paira evitair corrupção. Portanto, a replicação não pode funcionair até o backup estair completo … então ele se acumula.

  • melhores práticas paira remoview o DC do Site que não mais se conecta via vpn em outra cidade
  • Replicação do MySQL: Obtendo o mestre em sincronia com o escravo novamente
  • Backup do Windows Active Directory paira um file
  • Fatores e abordagens paira migrair AD em centros de dados desconectados?
  • Replicação de files baseada em Linux: nível de file ou nível de bloco?
  • Pode ser resgatado um controlador de domínio órfão?
  • Como posso save um controlador de domínio após uma reviewsão do USN sem rebuild todo o server?
  • Como faço paira configurair o diretório ativo quando o Sql Serview 2012 está usando uma Conta Virtual?
  • Problemas com os tamanhos da gama de identidade