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 / 18147
Accepted
Alireza
Alireza
Asked: 2012-05-19 04:51:18 +0800 CST2012-05-19 04:51:18 +0800 CST 2012-05-19 04:51:18 +0800 CST

Para um servidor de 768 milhões de RAM, a alocação de 617 milhões em my.cnf é boa ou ruim?

  • 772

Eu tenho um aplicativo da web de gravação intensiva e comprei um VDS com 768 MB de RAM

  • Este my.cnf é bom para meus propósitos?

Eu especifiquei bulk_insert_buffer_size para 126M e alguns outros parâmetros como abaixo:

[mysqld]
bulk_insert_buffer_size=126M
set-variable = max_connections=500
safe-show-database
max_user_connections=200
key_buffer_size = 16M
query_cache_size = 50M
tmp_table_size = 50M
max_heap_table_size  = 200M
thread_cache_size = 4
table_cache = 80
thread_concurrency = 8
innodb_buffer_pool_size = 100M
innodb_log_file_size = 25M
query_cache_limit = 50M
innodb_flush_log_at_trx_commit = 2
mysql mysql-5
  • 1 1 respostas
  • 561 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-05-19T05:39:42+08:002012-05-19T05:39:42+08:00

    Isso depende da quantidade de dados do MySQL e de quais mecanismos de armazenamento você está usando

    Quando se trata de MyISAM e InnoDB, eles armazenam em cache de forma diferente. Escrevi um post sobre isso em 14 de abril de 2011 .

    Como sua máquina tem apenas 768M de RAM, você deve fazer um bom ato de equilíbrio, dependendo de qual mecanismo de armazenamento está usando mais.

    Todos MyISAM

    Execute esta consulta

    Consulta #1

    SELECT CONCAT(ROUND(KBS/POWER(1024,
    IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
    SUBSTR(' KMG',IF(PowerOf1024<0,0,
    IF(PowerOf1024>3,0,PowerOf1024))+1,1))
    recommended_key_buffer_size FROM
    (SELECT LEAST(POWER(2,32),KBS1) KBS
    FROM (SELECT SUM(index_length) KBS1
    FROM information_schema.tables
    WHERE engine='MyISAM' AND
    table_schema NOT IN ('information_schema','mysql')) AA ) A,
    (SELECT 2 PowerOf1024) B;
    

    Esta consulta informará o tamanho de um MyISAM Key Buffer que seus dados precisam em MB. Obviamente, a quantidade de RAM instalada tem precedência, portanto, use o bom senso. Você deve executar esta consulta:

    Consulta #2

    SELECT
        DataSize/POWER(1024,2) DataMB,
        IndexSize/POWER(1024,2) IndexMB,
        (DataSize/IndexSize) DataToIdexRatio
    FROM
    (
        SELECT SUM(data_length) DataSize,SUM(index_length) IndexSize
        FROM information_schema.tables
        WHERE engine='MyISAM' AND
        table_schema NOT IN ('information_schema','mysql')
    ) A;
    

    Se o DataToIndexRatio for menor que 3, examine todos os índices. Você pode ter índices muito grandes ou apenas muitos índices. Se você remover todos os índices não utilizados, isso aumentará o DataToIndexRatio e você poderá executar a Consulta nº 1 e obter uma recomendação menor. Mais uma vez, usei o bom senso, pois você só tem 768M. Pessoalmente, eu não ultrapassaria 256M. Portanto, você deve escolher 256M ou o resultado da Consulta #1, o que for menor.

    Se você não tem nenhum dado InnoDB, você adicionou isso ao my.cnf (my.ini)

    [mysqld]
    skip-innodb
    

    e reinicie o mysql. Dessa forma, o mysqld inicializará mais rápido porque não precisará verificar a recuperação de falha do InnoDB.

    Você mencionou que seu aplicativo é de gravação intensiva. Uma mistura de INSERTs, UPDATEs e DELETE causará a fragmentação da tabela e do índice rapidamente. Se este for o caso, você precisa converter o formato de linha das tabelas MYiSAM para Fixo. Por quê?

    O livro MySQL Database Design and Tuning recomenda o uso ROW_FORMAT=FIXEDnas páginas 72,73. Isso converterá internamente todos os campos VARCHAR em CHAR. Isso tornará a tabela MyISAM maior, mas SELECTs executados contra ela serão muito mais rápidos. Eu posso atestar isso pessoalmente. Certa vez, tive uma mesa com 1,9 GB. Eu mudei o formato com ALTER TABLE tblname ROW_FORMAT=FIXED. A tabela acabou 3,7 GB. A velocidade dos SELECTs contra ele foi 20-25% mais rápida sem melhorar ou alterar mais nada.

    Todos InnoDB

    Execute esta consulta

    Consulta #3

    SELECT CONCAT(ROUND(KBS/POWER(1024,
    IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
    SUBSTR(' KMG',IF(PowerOf1024<0,0,
    IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
    FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
    WHERE engine='InnoDB') A,
    (SELECT 2 PowerOf1024) B;
    

    Esta consulta informará o tamanho de um Buffer Pool InnoDB que seus dados e índices precisam em MB. Obviamente, a quantidade de RAM instalada tem precedência, portanto, use o bom senso. Você deve executar a Consulta nº 2 e aplicar a mesma regra DataToIndexRatio ainda mais rigorosamente porque os índices secundários no InnoDB tendem a ser mais inchados do que suas contrapartes MyISAM.

    Se você estiver executando o MySQL 5.5, ajuste o InnoDB para engajamento de várias CPUs:

    • Possível fazer o MySQL usar mais de um núcleo?
    • Sobre o desempenho de bancos de dados de thread único versus multithread
    • Vários núcleos e desempenho do MySQL

    Como você tem apenas 768 MB de RAM, recomendo novamente 256 MB para innodb_buffer_pool_size ou o resultado da Consulta nº 3, o que for menor.

    Você deve redimensionar os buffers de log do InnoDB. Por exemplo, se o innodb_buffer_pool_size escolhido for 256M, você precisará redimensionar os arquivos de log para 25% desse número, 64M assim:

    PASSO 01) Desligue o mysql

    • service mysql stoppara Linux
    • net stop mysqlpara Windows

    PASSO 02) Deletar ib_logfile0 e ib_logfile1

    PASSO 03) Adicione isso ao my.cnf (my.ini)

    [mysqld]
    innodb_log_file_size = 64M
    

    PASSO 04) Inicialize o mysql (arquivos de log são recriados para o novo tamanho)

    • service mysql startpara Linux
    • net start mysqlpara Windows

    InnoDB e MyISAM misturados

    Eu aplicaria as regras acima e dividiria 128 MB para key_buffer_size e 128 MB para innodb_buffer_pool size .

    RESUMO

    Eu escolho 256M porque, independentemente do Storage Engine Mix que você possui, você tem um aplicativo de gravação intensiva. Você precisará fazer um bom cache para InnoDB, bem como índices MyISAM.

    Por outro lado, reservo apenas 256 MB de um ou ambos os mecanismos de armazenamento porque o sistema operacional precisará do máximo de RAM possível para os seguintes aspectos:

    • Sistema operacional
    • Cache de consulta
    • Conexões de banco de dados (buffers por conexões, contagem máxima de conexões)
    • Identificadores de arquivo ( open_files_limit , innodb_open_files (se estiver usando innodb_file_per_table ))

    Divirta-se configurando todos esses aspectos!!!

    • 5

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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