MySQL:查看每个特定表的读/写比例

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

答案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

相关内容