Назад | Перейти на главную страницу

MySQL: просмотр соотношения чтения / записи для каждой конкретной таблицы

Я оптимизирую конфигурацию сервера MySQL, работаю только с Bromine. Это не относится к приложению и было отмечено только для полноты. Я пытаюсь определить, является ли переключение с MyISAM на InnoDB лучшим вариантом на нескольких доминирующих таблицах записи. эти таблицы берут на себя большую часть операций записи для сервера, но также и самый высокий процент всех запросов. Я не хочу делать все таблицы InnoDB, хотя на этот раз это меня спасло бы. Я предпочитаю MyISAM всему; InnoDB имеет свои сильные стороны, которые имеют смысл для написания тяжелых конкретных таблиц.

Я знаю, как посмотреть статистику чтения / записи для экземпляра MySQL и запустить все рекомендуемые сценарии анализа. Я просто хотел бы знать, как мне посмотреть статистику чтения / записи для конкретной таблицы?

Если у кого-то с соответствующим опытом есть рекомендуемые статистические данные. Буду признателен за вклад.

ОБНОВЛЕНИЕ: я писал об этой проблеме на форумах Bromine, и они сообщали мне, какие таблицы являются тяжелыми. Это не совсем ответ на вопрос, как я бы все равно хотел знать.

Просто для полноты картины вот моя таблица / движок

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

Я получил статистику через cacti, с mysqlstats плагин.

Если кто-то сделает это через командную строку, с каким-то скриптом, я буду признателен за информацию.

Вы не можете один раз взглянуть на таблицы и определить, какие из них являются тяжелыми для записи, особенно если база данных была запущена и работала в течение длительного времени. Из-за изменения шаблонов использования таблица, которая, по-видимому, получила большое количество операций записи, может больше не получать их.

Вам нужно сделать снимок всех таблиц в момент времени t, а затем еще один моментальный снимок в момент времени t + 1 (где интервал может составлять час, день или, что более вероятно, неделя, возможно, месяц). Когда они у вас есть, вы можете измерить разницу между ними и рассчитать по ней активность.

Вы хотите посмотреть на соотношение чтения таблицы и записи таблицы. Отношение 1 означает, что таблица никогда не записывается, а только читается. А коэффициент 0 означает, что таблица только записывается, но не читается. Большинство таблиц, конечно же, находятся где-то посередине.

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;

Глобальная переменная userstat должен быть установлен на on для записи активности в этих таблицах статистики.

Поместите вышеуказанный запрос в файл, а затем из командной строки вы можете запустить:

mysql -BNe < tablestats.sql