Pontos de conhecimento relacionados:
INNODB_STATS_PERSIST=ON
Ou, STATS_PERSIST=1
ao definir uma única tabela, as estatísticas do otimizador são mantidas no disco. Por padrão, innodb_stats_persistent
está habilitada.
Estatísticas persistentes são armazenadas em tabelas mysql.innodb_table_stats
e .mysql.innodb_index_stats
A variável habilitada por padrão innodb_stats_auto_recalc
controla se as estatísticas são calculadas automaticamente quando mais de 10% das linhas da tabela são alteradas. STATS_AUTO_RECALC
O recálculo automático de estatísticas pode ser configurado para uma tabela individual especificando a cláusula ao criar ou alterar a tabela .
Devido à natureza assíncrona do recálculo automático de estatísticas que ocorre em segundo plano, mesmo se habilitado innodb_stats_auto_recalc
, as estatísticas não serão recalculadas imediatamente após a execução de uma operação DML que afete mais de 10% da tabela. Em alguns casos, o recálculo das estatísticas pode demorar alguns segundos. Se as estatísticas mais recentes forem necessárias imediatamente, execute ANALYZE TABLE para iniciar um recálculo síncrono (em primeiro plano) das estatísticas.
Se desativado innodb_stats_auto_recalc
, você poderá garantir a precisão das estatísticas do otimizador executando uma instrução ANALYZE TABLE após fazer um grande número de alterações em uma coluna de índice.
As estatísticas do otimizador não são persistidas no disco ao criar ou alterar uma única tabela INNODB_STATS_PERSIST=OFF
usando . STATS_PERSIST=0
Em vez disso, as estatísticas são armazenadas na memória e perdidas quando o servidor é desligado. As estatísticas também são atualizadas periodicamente através de determinadas ações e sob determinadas condições.
Quando um índice é adicionado a uma tabela existente ou quando uma coluna é adicionada ou removida, innodb_stats_auto_recalc
as estatísticas do índice são calculadas e adicionadas à innodb_index_stats
tabela, independentemente do valor de .
Cinco parâmetros que afetam as estatísticas
-
innodb_stats_persistent
: especifica se as estatísticas do índice InnoDB são persistidas no disco. Ele está habilitado por padrão. -
innodb_stats_persistent_sample_pages
: o número de páginas de índice a serem amostradas ao estimar a cardinalidade e outras estatísticas para colunas de índice (como aquelas calculadas pela tabela de análise). Aumentar esse valor pode melhorar a precisão das estatísticas do índice, masinnodb_stats_persistent_sample_pages
definir um valor mais alto pode fazer com que as tabelas de análise demorem mais para serem executadas. -
innodb_stats_auto_recalc
: faz com que o InnoDB recalcule automaticamente as estatísticas persistentes após alterações significativas nos dados da tabela. O limite é 10% do número de linhas na tabela e está ativado por padrão. -
innodb_stats_include_delete_marked
: Se o InnoDB inclui registros marcados para exclusão ao calcular estatísticas do otimizador persistente, desativado por padrão. -
innodb_stats_transient_sample_pages
: o número de páginas de índice a serem amostradas ao estimar a cardinalidade e outras estatísticas para colunas de índice (como aquelas calculadas pela tabela de análise). O valor padrão é 8. Aumentar esse valor pode melhorar a precisão das estatísticas do índice, melhorando assim os planos de execução de consultas, mas ao custo de maior E/S ao abrir tabelas do InnoDB ou recalcular estatísticas. Este parâmetro só se aplica se desabilitado para a tabelainnodb_stats_persistent
, se habilitadoINNODB_STATS_PERSIST
ele é aplicadoINNODB_STATS_PERSIST_SAMPLE_PAGES
em seu lugarinnodb_stats_sample_pages
Resumir:
1. A informação estatística não persistente será atualizada automaticamente nas seguintes situações:
- Executar ANALISAR TABELA
innodb_stats_on_metadata=ON
Neste caso, execute SHOW TABLE STATUS, SHOW INDEX e consulte TABLES e STATISTICS em INFORMATION_SCHEMA.- Com a função --auto-rehash habilitada, use o cliente mysql para fazer login
- A tabela é aberta pela primeira vez
- Desde a última atualização da informação estatística, os dados da tabela 1/16 foram modificados.
As desvantagens das estatísticas não persistentes são óbvias. Se um grande número de tabelas começar a atualizar as estatísticas após a reinicialização do banco de dados, isso terá um grande impacto na instância, portanto, as estatísticas persistentes são usadas atualmente.
2. As estatísticas de persistência serão atualizadas automaticamente nas seguintes situações:
-
INNODB_STATS_AUTO_RECALC=ON
Neste caso, 10% dos dados da tabela são modificados -
Adicionar novo índice
3. Tratamento de informações estatísticas imprecisas
Verificamos o plano de execução e descobrimos que o índice correto não foi usado. Se for causado por uma grande diferença nas informações estatísticas em innodb_index_stats, pode ser tratado das seguintes maneiras:
- Atualize manualmente as informações estatísticas. Observe que bloqueios de leitura serão adicionados durante a execução:
ANALYZETABLE TABLE_NAME;
- Se as informações estatísticas ainda estiverem imprecisas após a atualização, você pode considerar adicionar páginas de dados para amostragem de tabela. Há duas maneiras de modificá-las:
a. O INNODB_STATS_PERSISTENT_SAMPLE_PAGES
valor padrão das variáveis globais é 20;
b. Uma única tabela pode especificar a amostragem da tabela:
ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;
Após o teste, STATS_SAMPLE_PAGES
o valor máximo aqui é 65535. Se for excedido, um erro será relatado.
c. Atualizar manualmente innodb_table_stats
as innodb_index_stats
estatísticas da tabela (modificar essas duas tabelas não gerará o log binário) e, em seguida, usar FLUSH TABLE tbl_name
instruções para carregar as estatísticas atualizadas.
Aproveite o GreatSQL :)
Sobre GreatSQL
GreatSQL é um banco de dados doméstico independente de código aberto adequado para aplicativos de nível financeiro. Possui muitos recursos básicos, como alto desempenho, alta confiabilidade, alta facilidade de uso e alta segurança. e é utilizado em ambientes de produção online, totalmente gratuito e compatível com MySQL ou Percona Server.
Links relacionados: Guia da comunidade GreatSQL GitHub Bilibili
Comunidade GreatSQL:
Sugestões e feedback de recompensas da comunidade: https://greatsql.cn/thread-54-1-1.html
Detalhes do envio do prêmio do blog da comunidade: https://greatsql.cn/thread-100-1-1.html
(Se você tiver alguma dúvida sobre o artigo ou tiver ideias exclusivas, você pode acessar o site oficial da comunidade para perguntar ou compartilhá-las ~)
Grupo de intercâmbio técnico:
Grupo WeChat e QQ:
Grupo QQ: 533341697
Grupo WeChat: Adicione o GreatSQL Community Assistant (WeChat ID:) wanlidbc
como amigo e espere que o assistente da comunidade adicione você ao grupo.