首页 / MYSQL / MySQL每个表读/写
MySQL每个表读/写
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL每个表读/写,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3751字,纯文字阅读大概需要6分钟。
内容图文
我正在优化我们的数据库.基本上我试图在我们的数据库中找到写得最多和最多的表.之后,我将通过sym将这些表链接到单独的驱动器中.
有没有办法跟踪每个表活动?
如下面的IOPS,写入,每个表读取?
解决方法:
方法1
如果您使用的是Percona Server,则可以简单地设置userstat/userstat_running变量以启用一组新的INFORMATION_SCHEMA表,其中包括一个名为TABLE_STATISTICS的表,它提供了这些信息.
例如:
mysql> SELECT TABLE_NAME, ROWS_READ, ROWS_CHANGED, ROWS_CHANGED_X_INDEXES FROM TABLE_STATISTICS ORDER BY ROWS_CHANGED DESC LIMIT 5;
+-------------------+------------+--------------+------------------------+
| TABLE_NAME | ROWS_READ | ROWS_CHANGED | ROWS_CHANGED_X_INDEXES |
+-------------------+------------+--------------+------------------------+
| user | 21122527 | 5989231 | 23956924 |
| audit | 1208 | 5020929 | 20083716 |
| sometemp | 13995426 | 3182150 | 9546450 |
| creditcards | 3566482 | 2998976 | 11995904 |
| order | 2147483647 | 2662606 | 53252120 |
+-------------------+------------+--------------+------------------------+
ROWS_CHANGED对应于最多写入表格,ROWS_READ将是最多的.您还应该查看INDEX_STATISTICS以查找最常用和最少使用的索引.
方法2
如果您不使用Percona Server,则可以使用pt-query-digest捕获查询示例,然后仅过滤掉INSERT / UPDATE / DELETE.这看起来像这样:
mysql> SELECT @@GLOBAL.slow_query_log_file;
+------------------------------------------+
| @@GLOBAL.slow_query_log_file |
+------------------------------------------+
| /var/logs/mysql/slowquery.log |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL slow_query_log_file='/tmp/allqueries.log';
mysql> SELECT @@GLOBAL.long_query_time;
+--------------------------+
| @@GLOBAL.long_query_time |
+--------------------------+
| 0.250000 |
+--------------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL long_query_time = 0;
mysql> FLUSH LOGS;
mysql> SLEEP 600; SET GLOBAL long_query_time = 0.25; SET GLOBAL slow_query_log_file='/var/logs/mysql/slowquery.log'; FLUSH LOGS;
现在你有一个文件/tmp/allqueries.log,它包含在服务器上执行的每个查询大约10分钟.
接下来,使用pt-query-digest对其进行分析,以便最频繁地写入表:
pt-query-digest /tmp/allqueries.log --group-by=distill --filter '$event->{arg} =~ m/^(update|delete|insert)/i' --limit 5 > /tmp/writes.txt
如果你检查/tmp/writes.txt,你会看到顶部附近的部分如下所示:
# Profile
# Rank Query ID Response time Calls R/Call Apdx V/M Item
# ==== ======== ============= ===== ====== ==== ===== ====================
# 1 0x 0.0558 26.8% 282 0.0002 1.00 0.00 INSERT UPDATE user
# 2 0x 0.0448 21.5% 246 0.0002 1.00 0.00 UPDATE audit
# 3 0x 0.0228 10.9% 11 0.0021 1.00 0.00 UPDATE sometemp
# 4 0x 0.0108 5.2% 16 0.0007 1.00 0.00 UPDATE creditcards
# 5 0x 0.0103 4.9% 43 0.0002 1.00 0.00 UPDATE order
粗略地说,在您选择的样本期间,这些是您写入表格最多的.为了从表中大致读取(大致),您可以将–filter参数更改为–filter’$event-> {arg} = ~m / ^ select / i’,您将看到类似的输出.
如果您只对写入感兴趣,可以将二进制日志传递给pt-query-digest并获得类似的结果:
mysqlbinlog mysql-bin.000511 | pt-query-digest --type=binlog --group-by=distill > /tmp/writes.txt
您还可以使用tcpdump和pt-query-digest –type = tcpdump获取相同的数据
所以,这就是说,假设您正在使用InnoDB表,我非常怀疑您会从这样做中看到很多性能优势.由于数据被缓冲到InnoDB日志然后写入磁盘的方式,我不希望像这样移动单个表来获得太多或任何性能提升.您可能会看到将InnoDB日志文件本身移动到单独的,更快的磁盘以将日志读/写与表空间读/写分开的一些好处,但即使这样也是有问题的.使用电池备份缓存(或更好的SSD)投资快速,高质量的RAID阵列将更好地利用您的资源.
内容总结
以上是互联网集市为您收集整理的MySQL每个表读/写全部内容,希望文章能够帮你解决MySQL每个表读/写所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。