我正在优化 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
答案1
我通过插件获得了统计cacti
数据mysqlstats
。
如果有人通过命令行使用某种脚本来完成此操作,我将非常感激这些信息。
答案2
您无法只看一次表就确定哪些表写入量大,如果数据库已经启动并运行了相当长一段时间,情况尤其如此。由于使用模式的变化,看似收到大量写入的表可能不再收到任何写入。
您需要在时间 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