AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 63459
Accepted
user2732180
user2732180
Asked: 2014-04-18 20:13:03 +0800 CST2014-04-18 20:13:03 +0800 CST 2014-04-18 20:13:03 +0800 CST

Redirecionar consultas para índices de aquecimento dev/null?

  • 772

Estou tentando aquecer o buffer pool. Será suficiente executar uma consulta e redirecionar a saída para /dev/null?

  • por exemplo mysql -u nome de usuário -p -e "selecionar id de tbl onde 1=1" > /tmp/results.txt

Obrigado

mysql innodb
  • 3 3 respostas
  • 723 Views

3 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2014-04-19T06:18:23+08:002014-04-19T06:18:23+08:00

    Vejo que um dos comentários na pergunta menciona índices de cache

    observe que apenas um índice será armazenado em cache no buffer pool (provavelmente PRIMÁRIO, mas verifique EXPLICAR para ter certeza). Você também pode precisar de índices secundários no cache, portanto, é necessário executar SELECTs adicionais

    Acontece que eu tenho uma postagem Feb 04, 2012que permite que você faça essas consultas ( procedimento quente do MySQL ). A partir dessa postagem, aqui estão as consultas para mostrar todas as consultas que você precisa executar:

    CARREGANDO INNODB BUFFER POOL

    SELECT DISTINCT
        CONCAT('SELECT ',ndxcollist,' FROM ',db,'.',tb,
        ' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
        FROM
        (
            SELECT
                engine,table_schema db,table_name tb,
                index_name,GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
            FROM
            (
                SELECT
                    B.engine,A.table_schema,A.table_name,
                    A.index_name,A.column_name,A.seq_in_index
                FROM
                    information_schema.statistics A INNER JOIN
                    (
                        SELECT engine,table_schema,table_name
                        FROM information_schema.tables WHERE
                        engine='InnoDB'
                    ) B USING (table_schema,table_name)
                WHERE B.table_schema NOT IN ('information_schema','mysql')
                ORDER BY table_schema,table_name,index_name,seq_in_index
            ) A
            GROUP BY table_schema,table_name,index_name
        ) AA
    ORDER BY db,tb
    

    CARREGANDO CACHE DE CHAVES MyISAM

    SELECT DISTINCT CONCAT('SELECT ',ndxcollist,' FROM ',db,'.',tb,' ORDER 
    BY ',ndxcollist,';') SelectQueryToLoadCache
    FROM (SELECT engine,table_schema db,table_name tb,index_name,
    GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
    FROM (SELECT 
    B.engine,A.table_schema,A.table_name,A.index_name,A.column_name,A.seq_in_index
    FROM information_schema.statistics A INNER JOIN
    (SELECT engine,table_schema,table_name
    FROM information_schema.tables
    WHERE engine='MyISAM' AND table_schema
    NOT IN ('information_schema','mysql')) B
    USING (table_schema,table_name)
    WHERE A.index_type <> 'FULLTEXT'
    ORDER BY table_schema,table_name,index_name,seq_in_index) A
    GROUP BY table_schema,table_name,index_name) AA
    ORDER BY db,tb
    ;
    

    CARREGANDO INNODB BUFFER POOL E CACHE DE CHAVES MyISAM

    SELECT DISTINCT
        CONCAT('SELECT ',ndxcollist,' FROM ',
        db,'.',tb,' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
    FROM (
        SELECT
            engine,table_schema db,table_name tb,index_name,
            GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
        FROM (
            SELECT
                B.engine,A.table_schema,A.table_name,
                A.index_name,A.column_name,A.seq_in_index
            FROM
                information_schema.statistics A INNER JOIN
                (
                    SELECT engine,table_schema,table_name
                    FROM information_schema.tables
                    WHERE engine IN ('InnoDB','MyISAM')
                ) B USING (table_schema,table_name)
            WHERE
                B.table_schema NOT IN ('information_schema','mysql')
                AND A.index_type <> 'FULLTEXT'
            ORDER BY
                table_schema,table_name,index_name,seq_in_index
            ) A
        GROUP BY
            table_schema,table_name,index_name
    ) AA
    ORDER BY
        engine DESC,db,tb
    ;
    

    Basta redirecionar a saída para um arquivo de texto como /root/IndexWarmup.sql

    Em seguida, faça o login no mysql e execute

    mysql> source /root/IndexWarmup.sql
    

    SUGESTÃO OPCIONAL

    Eu recomendo atualizar para o MySQL 5.6. Por quê? Você pode fazer o seguinte:

    Despeje e carregue um mapa do desligamento e inicialização do buffer pool do InnoDB

    [mysqld]
    innodb_buffer_pool_dump_at_shutdown=1
    innodb_buffer_pool_load_at_startup=1
    

    Despeje e carregue um mapa do InnoDB Buffer Pool sob demanda

    mysql> set global innodb_buffer_pool_dump_now = 1;
    mysql> set global innodb_buffer_pool_load_now = 1;
    

    Dessa forma, você nunca terá que ler páginas de índice no Buffer Pool que você nunca acessa.

    Consulte a documentação do MySQL

    • innodb_buffer_pool_dump_at_shutdown
    • innodb_buffer_pool_load_at_startup
    • innodb_buffer_pool_dump_now
    • innodb_buffer_pool_load_now
    • 2
  2. Shlomi Noach
    2014-04-19T10:25:37+08:002014-04-19T10:25:37+08:00

    Com grandes conjuntos de dados, onde os dados não cabem na RAM, você aquecerá seu buffer pool - e além. Você vai destruir o buffer pool.

    Sua consulta faz uma verificação completa da tabela. Assumindo que idé o PRIMARY KEY, você estará aquecendo toda a árvore de índices (embora não necessariamente linhas nem índices secundários).

    Mas então você fará o mesmo para todas as suas tabelas e, eventualmente, ficará sem memória no pool, então você terá que evacuar as páginas (felizmente não sujas) do pool para abrir espaço para as mais novas.

    Seja carregando apenas índices ou índice+dados, você acabará aquecendo as páginas e depois resfriando-as novamente. Eventualmente, o que permanecerá no pool é o último conjunto de páginas por ordem de carregamento cronológico.

    Ah, e suas consultas resultarão em grandes transações que, por sua vez, colocarão mais bloqueios em seu banco de dados em execução...

    • 2
  3. Morgan Tocker
    2014-06-18T17:46:15+08:002014-06-18T17:46:15+08:00

    A partir do MySQL 5.5, o InnoDB usa um algoritmo LRU modificado para evitar que as varreduras de tabela preencham o buffer pool. Por padrão, apenas 3/8 do buffer pool está disponível para varreduras de tabela.

    No MySQL 5.6, isso foi aprimorado ainda mais, de modo que uma página deve estar no pool de buffers por 1000ms antes de poder ser promovida para a lista quente de 5/8 restantes.

    Portanto, embora essa técnica tenha sido útil no passado, ela não é mais um método confiável para aquecer caches.

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve