MySQL: visualize a proporção de leitura / gravação, por tabela específica

1

Estou otimizando a configuração de um servidor MySQL, executando apenas o Bromine. Isso não é específico para o aplicativo e foi observado apenas por completo. Eu estou tentando determinar se a mudança do MyISAM para o InnoDB é uma opção melhor, em alguns escrever tabelas dominantes. essas tabelas usam a maioria das gravações do servidor, mas também a porcentagem mais alta de todas as consultas. Eu não quero fazer todas as tabelas do InnoDB, mesmo que isso me salve dessa vez. Eu prefiro o MyISAM acima de tudo; O InnoDB tem suas próprias forças, o que faz sentido para essas escritas pesadas tabelas específicas.

Eu sei como ver as estatísticas de leitura / gravação da instância do MySQL e executar todos os scripts de análises recomendados. Eu gostaria de saber, como eu vejo as estatísticas de leitura / escrita em uma tabela específica?

Se alguém, com experiência relevante, tiver alguma estatística recomendada para analisar. Eu apreciaria a entrada.

ATUALIZAÇÃO: Eu postei sobre este assunto nos foruns do Bromo, e eles me informaram quais tabelas são escritas pesadamente. Isso realmente não responde à pergunta, como eu gostaria de saber de qualquer maneira.

Apenas por questão de integridade, aqui está minha tabela / mecanismo

Name                               Engine
QRTZ_BLOB_TRIGGERS                 MyISAM
QRTZ_CALENDARS                     MyISAM
QRTZ_CRON_TRIGGERS                 MyISAM
QRTZ_FIRED_TRIGGERS                MyISAM
QRTZ_JOB_DETAILS                   MyISAM
QRTZ_JOB_LISTENERS                 MyISAM
QRTZ_LOCKS                         MyISAM
QRTZ_PAUSED_TRIGGER_GRPS           MyISAM
QRTZ_SCHEDULER_STATE               MyISAM
QRTZ_SIMPLE_TRIGGERS               MyISAM
QRTZ_TRIGGERS                      MyISAM
QRTZ_TRIGGER_LISTENERS             MyISAM
activities                         InnoDB
browsers                           MyISAM
browsers_nodes                     MyISAM
combinations                       MyISAM
combinations_requirements          MyISAM
commands                           InnoDB
configs                            MyISAM
echelons                           InnoDB
groups                             MyISAM
jobs                               InnoDB
myacos                             MyISAM
myaros                             MyISAM
myaros_myacos                      MyISAM
nodes                              MyISAM
operatingsystems                   MyISAM
plugins                            MyISAM
projects                           MyISAM
projects_reports                   MyISAM
projects_users                     MyISAM
reports                            MyISAM
requirements                       MyISAM
requirements_testcases             MyISAM
seleniumservers                    InnoDB
sites                              MyISAM
suites                             InnoDB
testcases                          MyISAM
testcasesteps                      MyISAM
tests                              InnoDB
types                              MyISAM
users                              MyISAM
    
por J. M. Becker 29.09.2011 / 18:00

2 respostas

1

Eu obtive estatísticas por meio de cacti , com o plug-in mysqlstats .

Se alguém fizer isso através da linha de comando, com um script de algum tipo, agradeço a informação.

    
por 12.03.2012 / 20:52
0

Você não pode olhar para as tabelas uma vez e determinar quais delas são mais pesadas, e isso é especialmente verdade se o banco de dados estiver em funcionamento por um tempo considerável. Devido à alteração dos padrões de uso, uma tabela que parece ter recebido um grande número de gravações pode não estar mais recebendo nenhuma.

Você precisa tirar um instantâneo de todas as tabelas no momento t e, em seguida, em outro instantâneo no tempo t + 1 (em que o intervalo pode ser uma hora, um dia ou mais provavelmente uma semana, possivelmente um mês). Depois de tê-los, você pode medir a diferença entre os dois e calcular a atividade a partir disso.

Você deseja observar a proporção de leituras de tabela comparada às gravações de tabela. Uma proporção de 1 significa que uma tabela nunca é gravada, apenas lida. E uma proporção de 0 significa que uma tabela é escrita apenas para, nunca lida. A maior parte da mesa, naturalmente, fica em algum lugar no meio.

SELECT t.table_name, s.rows_read/ (s.rows_read * 1.0 + s.rows_changed) as read_ratio, s.rows_read, s.rows_changed
FROM information_schema.tables t
LEFT JOIN information_schema.table_statistics s USING (table_schema, table_name)
ORDER BY 2, 3, 4, 1;

A variável global userstat deve ser definida como on para registrar a atividade nessas tabelas de estatísticas.

Coloque a consulta acima em um arquivo e, a partir da linha de comando, você pode executar:

mysql -BNe < tablestats.sql
    
por 10.09.2018 / 15:13