Está ativando o MySQL query_cache_size Innodb Lock Safe?

3

O query_cache_size se parece com o tipo de configuração que normalmente seria desejado, o que me intrigou, já que o padrão é 0 . Então eu li o seguinte sobre a configuração query_cache_wlock_invalidate dos documentos do MySQL

Normally, when one client acquires a WRITE lock on a MyISAM table, other clients are not blocked from issuing statements that read from the table if the query results are present in the query cache. Setting this variable to 1 causes acquisition of a WRITE lock for a table to invalidate any queries in the query cache that refer to the table. This forces other clients that attempt to access the table to wait while the lock is in effect.

Não faz menção sobre o mecanismo InnoDB. Essa configuração também impede leituras do cache quando o Innodb possui um bloqueio de gravação na linha / tabela?

    
por Programster 11.06.2014 / 13:09

1 resposta

4

Fico feliz por você ter perguntado sobre o InnoDB e o Query Cache.

IMHO Eles nunca devem aparecer na mesma frase ou na mesma conversa. Por favor, perdoe o meu uso deles na primeira frase.

Brincadeira à parte, falei no DBA StackExchange muitas vezes

Aqui está minha Jun 11, 2014 post sobre por que ela deve ser desativada (com exceções)

De acordo com a Documentação do MySQL sobre estados de cache de consulta

This state occurs while a session is waiting to take the query cache lock. This can happen for any statement that needs to perform some query cache operation, such as an INSERT or DELETE that invalidates the query cache, a SELECT that looks for a cached entry, RESET QUERY CACHE, and so forth.

Este é definitivamente um grande problema com tabelas InnoDB porque os mecanismos do InnoDB fazem incursões no cache de consultas. Eu escrevi sobre esse fenômeno antes

Existem algumas opções que você tem neste

OPÇÃO # 1

Você pode desativar completamente o cache de consultas

SET GLOBAL query_cache_size = 0;

Se todas as consultas contra tabelas InnoDB forem satisfatórias a partir de então, inclua isto em my.cnf

[mysqld]
query_cache_size = 0;

OPÇÃO # 2

Se você realmente deseja um cache de consulta maior, talvez seja necessário estabelecer limites para o tamanho das entradas

  • Você pode criar query_cache_min_res_unit . Seu padrão é 4K. Se você definir isso mais alto, isso evitará que pequenos resultados fiquem no cache de consultas. Isso reduzirá o número geral de entradas no cache de consultas.
  • Você pode alterar query_cache_limit . Seu padrão é 1 milhão.

A alteração dessas opções pode permitir que você dite o número mínimo de entradas de cache de consulta.

Por exemplo, se você definir o seguinte

[mysqld]
query_cache_size = 2G
query_cache_min_res_unit = 64M
query_cache_limit = 128M

Isso limitará o número de entradas de cache de consulta

  • Mínimo de 16 (2G / 128M)
  • Máximo de 32 (2G / 64M)

Se você realmente conhece sua carga de trabalho de dados e sua taxa de transferência, pode experimentar os limites.

SUA QUESTÃO REAL

Is enabling MySQL query_cache_size Innodb Lock Safe ?

Sim, é. Na verdade, o InnoDB pode ser um verdadeiro maníaco por controle quando você torna o Cache de Consulta muito grande. Embora a resposta geral para isso seja deixar query_cache_size = 0, é possível dimensioná-lo de maneira inteligente para seu conjunto de dados e carga de trabalho.

    
por 12.06.2014 / 23:36