motor MySql InnoDB e bloqueio

motor MySql InnoDB e bloqueio

fechaduras mysql são muito perguntas da entrevista de alta frequência, que, muitas vezes encontramos, mas não notamos onde em seu desenvolvimento diário. Eu coloquei minha própria compreensão dos bloqueios compartilhá-lo através deste post, porque o bloqueio requer uma combinação de transações para entender, este artigo apenas descreve os conceitos básicos do fechamento, o mesmos, a fim de compreender a transação será mais profunda, introduzir alguns conceitos básicos de InnoDB, mas também para gravar o seu aprendizagem, bem-vindo para discutir a troca.

Seguinte: Transação eo mysql mvcc

Categoria Lock:

  • granularidade do bloqueio de acordo com pontos

    • Bloqueio global: bloquear toda a base de dados, uma biblioteca é uma analogia edifício, ou seja, trancar a porta desta vez todo o edifício
    • bloqueio de tabela: mechas de uma tabela específica, uma analogia tabela para um piso num edifício, no caso em que a camada inteira de bloqueio é uma camada
    • fechaduras no nível de linha: a fechadura é uma linha de dados, cada bloqueio de linha analogia é uma camada de um quarto, desta vez uma mecha é um quarto
  • A diferença entre a mesa e linha fechaduras
    • O bloqueio no nível de tabela, gastando grande, fecho rápido, impasse não ocorrerá. Bloqueio de granularidade grande. Baixo grau de concorrência.
    • bloqueio ao nível de linha, uma pequena sobrecarga, bloqueio lento, haverá um bloqueio, uma pequena granularidade de bloqueio, alta concorrência.

o bloqueio ao nível Tabela:

mysql bloqueio de tabela, existem dois: os metadados e tabela fechaduras.

Duas formas de bloqueios de tabela:

  • Tabela compartilhada bloqueio de leitura

  • Tabela bloqueios de gravação exclusivos

    • adicionar manualmente bloqueio de tabela

      lock table tableName read;
    • Ver caso bloqueio de tabela

      show open tables;
    • bloqueio de tabela de exclusão

      unlock tables;

bloqueio de metadados:

  • Versão 5.5 introduziu o MDL, uma mesa de adições de dados e exclusões em tempos, além de MDL ler bloqueio; tempo para fazer alterações na estrutura da tabela, além de MDL bloqueio de gravação.

de bloqueio ao nível de linhas

mysql no nível de linha mecanismo de armazenamento de bloqueio é implementada, mysql agora o motor de dados padrão para o InnoDB. Este artigo descreve o bloqueio de linha InnoDB;

InnoDB bloqueio de linha é para conseguir bloqueio de entrada de índice, o que significa que utilizam apenas o índice para recuperar os bloqueios de linha de dados, ou que irão utilizar bloqueios de tabela.

De acordo com a gama termos

  • bloqueio de linha: Bloquear um da tabela de logs.
  • Bloquear a lacuna:
    • Bloquear os valores intermédios ficha índice
    • Um primeiro valor de bloqueio ou registro de índice em frente ao último valor do índice depois

De acordo com Funcionalmente

  • bloqueios compartilhados, também conhecido como S-lock: permite que uma transação para ler uma linha de dados, impedindo que outras transações adicionar bloqueio exclusivo, bloqueio compartilhado é autorizado a continuar a adicionar leitura
  • bloqueio exclusivo, também conhecido como fechaduras X: permitir que a transação para adquirir um bloqueio exclusivo para atualizar os dados, impedindo que outras transações adicionar leitura compartilhada de bloqueio e um bloqueio exclusivo para escrever add

Para InnoDB, a instrução será adicionado automaticamente para as adições e deleções para fechaduras exclusivos, bloqueio X. Para consulta ordinária não acrescenta quaisquer bloqueios.

intenção fechaduras

InnoDB também realizado o bloqueio ao nível de mesa, que é intenção de bloqueio. Intenção fechaduras mysql uso interno e não exigem que o usuário intervir.

  • bloqueios compartilhados intenção, Lock é: Direitos pretende adicionar ao bloqueio de linha de dados compartilhado, um deve adquirir transação é bloquear a tabela antes de adicionar um bloqueio compartilhado a uma linha de dados.
  • Intenção exclusivo bloqueio bloqueio IX: dados de transação vai dar Air Canada um bloqueio exclusivo, os dados da transação em uma fila para adicionar bloqueio exclusivo deve ser adquirido antes do bloqueio IX sobre a mesa.

Intenção bloqueios de linha e co-existir lata, o papel é bloquear a intenção de melhorar o desempenho quando uma tabela cheia de dados de atualização ou ao atualizar a tabela inteira para recuperar dados que têm bloqueio de linha na linha.

gap de bloqueio

Tal como o nome sugere, o fecho principal é adicionada entre a gravação, a diferença não é permitido inserir os dados. Por exemplo, a identificação é de 24, desta vez usando a lacuna que iria bloquear 234 bloqueio estes três, mais tarde também introduzir um dos principais bloqueios gap papel, bloquear a abertura de novo na introdução, quando a transação é resolver o problema da leitura fantasma. Aqui para descobrir.

impasse

impasse mysql e impasse em nossa teoria código é o mesmo, a diferença é, mysql refere-se a duas conexões diferentes esperando para o outro para soltar a trava para liberar os recursos que possuem, de modo que o impasse resultante. mysql também tem otimização impasse direita. Em seguida, especificamente depois.

Depois, começamos a introduzir a transação, o acima é apenas uma introdução breve para explicar os conceitos básicos da fechadura, fechadura de combinação, bem como parte das necessidades de transação para entender, para que haja um bloqueio mais tarde.

Antes de introduzir a transação, 'Vamos Conversar' sobre a arquitetura InnoDB, algumas partes da transação envolverá o conteúdo desta seção.

arquivo de disco InnoDB

arquivo de disco InnoDB

  • espaço de tabela
    • espaço de tabela do sistema é um espaço de tabela compartilhada
    • O sistema compreende um conjunto de dados espaço dicionário tabela, memória intermédia de escrita doule, tampão de mudança, desfazer log área de armazenamento que compreende dados do utilizador e a estrutura da tabela de índice criados na tabela de sistema
  • espaço de tabela de usuário
    • Definir parâmetros innodb_file_per_table, para cada usuário pode criar um espaço de tabela de usuário separada baseado no motor InnoDB tabela, que é arquivo .ibd.
    • Armazenar os dados da tabela, as informações de índice.

estrutura de memória InnoDB

  • lustre piscina piscina
    • Os dados são armazenados no disco, e o disco devido à velocidade da CPU de velocidade diferença, o uso do pool de buffer para melhorar o desempenho global.
    • Podem ser fornecidas por tamanho innodb_buffer_pool_size buffer pool, o tamanho do buffer pool sobre o desempenho vai afetar.
    • Dados tipo de buffer:
      • índice Página
      • página de dados
      • Quando o mecanismo de armazenamento de trabalho, você precisa carregar um disco de dados unidade de página na memória, páginas de dados e páginas de índice são o tipo mais importante de página dois tipos
      • undo página: mysql para alcançar um instantâneo multi-versão pode ser entendida como a cadeia de versão. operações MVCC e de reversão estão relacionados com o registo de desfazer.
      • inserção tampão: um desempenho melhorado para a inserção de um índice não agrupado
      • índices hash adaptativas
      • informações InnoDB bloqueio de armazenamento
      • Informações de dicionário

dados da memória de um disco

dados FIG InnoDB fora do disco pode ser visto, há duas maneiras de conseguir

  • dados página suja do disco
  • redo log pré-escrita

Há duas formas de colocar uma ordem, pode ser entendida como a persistência em disco. É garantir que o número de inatividade súbita biblioteca, perda de dados.

páginas sujas fora do disco IO vai produzir e é de gravação aleatória, demorado muito tempo. Frequent disco perda de desempenho IO é muito grande. E a segurança dos dados não pode ser garantida. Se os dados da página sujo não é tempo suficiente para deixar o tempo de inatividade processo de placa ou bandeja, em seguida, os dados serão perdidos.

Em face do exposto, o MySQL completo com a segurança dos dados de segurança duplo, páginas sujas em disco é uma queda, enquanto a outra é log pré-escrita redo, em primeiro lugar, precisamos saber redo mantidas no disco é seqüência de gravação, a velocidade de gravação da ordem mais rápido do que gravações aleatórias, quando um amigo vai pedir, páginas sujas fora do disco, por que não usá-lo, mas escrito fim?

velocidade de gravação da ordem, ao mesmo tempo irá produzir recursos de disco fragmentação do disco, a fragmentação do disco será muito desperdiçados.

redo log persistência tempo é gravado no disco quando a transação compromete o arquivo de redo, caso em que os dados da página suja não é necessariamente finalizava o prato, colocar ordens páginas sujas são controlados pelo mecanismo de checkpoint checkpoint, estamos aqui não prosseguir a dizer.

A ocorrência de tempo de inatividade base de dados:

  • dados da página sujas quase nunca dirigir, transações não confirmadas. Isso produz uma perda de dados, todos nós sabemos que, se a transação não é confirmada outro ponto de vista estes perda de dados é normal.
  • dados da página sujas quase nunca dirigir, a transação tenha sido apresentado, em seguida, refazer arquivo de log já tem os dados, ele irá reiniciar quando a recuperação de dados mysql a partir de um arquivo de log de redo em.

Alguns amigos vão dizer, que os dados do arquivo de log redo não seria infinito?

ib_logfile0, ib_logfile1 que é nomeado rodo logon no nosso disco, você pode ver, existem dois arquivos, usando uma forma circular da escrita, se 1 está escrito sobre a escrita total de 2,2 1, assim o ciclo.

redo log mantidas no disco é configurável, o conjunto por innodb_push_log_at_trx_commit InnoDB

  1. Quando o valor do atributo de 0, a transação é confirmada, não para refazer uma operação de gravação, o principal espera thread para o tempo de gravação;
  2. Quando o valor da propriedade 1, a transação é confirmada, os dados são gravados no disco, para garantir que nenhuma perda de dados;
  3. 2 Quando o valor da propriedade, a transação é confirmada, os dados são gravados no cache do sistema, permitindo que o sistema de arquivos para julgar por si mesmos quando gravados em disco.

O valor padrão é 1, a recomendação geral é definida como 1, ele vai garantir a segurança dos dados, e somente quando 1 irá garantir a consistência transacional é.


Isso é tudo para este post, e obrigado Diga-me. Bem-vindo a fazer perguntas para explorar a troca.

Seguinte: operação mysql e mvcc

Acho que você gosta

Origin www.cnblogs.com/sx-wuyj/p/12540537.html
Recomendado
Clasificación