在MySQL表中,INSERT性能始终如一的可能原因是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在MySQL表中,INSERT性能始终如一的可能原因是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1582字,纯文字阅读大概需要3分钟。
内容图文
我有一个在VM上运行的Java程序,它通过单个连接顺序地将单行INSERT队列提供给同一VM上的MySQL服务器.队列执行不是人为限制的 – 一旦查询完成执行,下一个执行就会立即执行.队列也永远不会是空的.
数据将插入到四个不同的MyISAM表中.其中两个具有UNIQUE列,另外两个具有跨两列的UNIQUE CONSTRAINT.程序生成的大多数数据已经存在于db中,但是不是检查重复项,程序只会将数据抛出到db并忽略重复的错误.
现在我用java程序记录每个查询的执行时间.显然执行时间略有偏差,因为它是由Java而不是MySQL定时的,但我能够通过将较长的时间帧除以该时间帧中执行的查询总数来验证平均执行时间的准确性.所以我假设我的Java应用程序的时间是准确的.
在实际问题上:我观察到每个INSERT的平均时间每隔几小时或几分钟就相当一致(但不是逐渐地)上升和下降两倍.这种增加或减少在不同类型的INSERTS中是一致的,因此它应该独立于所使用的表.
MySQL正在稳定地使用VM的22%RAM,Java使用大约7%.
VM有四个CPU核心.两个从未使用过,Java使用10-30%的一个而MySQL使用30-60%(从不多)的另一个.
VM上没有其他任何东西在运行.
如果我启动第二个应用程序,为另一组表排队INSERT,每个内核的CPU使用率上升50-100%,平均执行时间会有所增加(我不确定这是因为执行时间是这样的反正不一致).
一旦平均执行时间达到最小值约20小时,通常是每天几小时的最小值或最大值,然后在一天中的大部分时间内上下移动一点.
我对这种看似随机性能波动的可能原因一无所知,所以我们非常感谢任何想法.
编辑:我应该补充一点,当我在InnoDB表中进行100行到1000行的批量INSERT时,我遇到了同样的现象.
解决方法:
简单的答案是:无法猜出争用的来源是什么.
更详细:MySQL 5.6可以检测查询执行时间的细分,以便您可以查看性能是否等待IO,锁等等.
诊断功能称为performance_schema.开始使用它的最简单方法是下载MySQL Workbench 6.1并选择“Performance Reports”(在Performance下).
内容总结
以上是互联网集市为您收集整理的在MySQL表中,INSERT性能始终如一的可能原因是什么?全部内容,希望文章能够帮你解决在MySQL表中,INSERT性能始终如一的可能原因是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。