首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

MySQL性能
EN

Stack Overflow用户
提问于 2010-04-28 19:57:06
回答 2查看 1K关注 0票数 3

我在MySQL中有大约900 K行的LAMP应用程序,而且我有一些性能问题。

背景-除了LAMP堆栈,还有一个Java进程(多线程)在它自己的JVM中运行。因此,与LAMP & java一起,它们形成了完整的解决方案。java进程负责插入/更新,也很少有选择。这些插入/更新通常是批量/批处理,在5-150行之间。PHP前端代码只进行选择.

问题-当java进程运行时,PHP/SELECT查询变得非常慢。当java进程停止时,选择。我的意思是表演上的差别很大。当java进程运行时,在php前端执行的任何操作都会导致mysqld进程使用80%以上的CPU。

任何帮助都将不胜感激。

MySQL是使用默认参数和设置运行的。

软件栈-

  • Apache - 2.2.x
  • MySQL -5.1.37-1 ubuntu5
  • PHP-5.2.10
  • Java - 1.6.0_15
  • OS - Ubuntu 9.10 (业力)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-28 21:47:30

我们需要更多地了解系统,以说明这是否正常,或者如何解决问题。

在MySQL中有大约900 k行

我想说,这使得它非常小-所以,如果它的表现不好,那么你是严重错误的地方。

使查询日志能够准确地查看正在运行的查询,并根据频率和持续时间的乘积进行排序。看看解释计划,创建一些索引。考虑将数据库拆分到多个磁盘上。

HTH

结果表明,C.

票数 0
EN

Stack Overflow用户

发布于 2010-04-28 20:02:04

你用什么引擎做MySQL?这里要注意的是,如果您使用的是MyISAM,那么由于引擎使用的表锁定,您将遇到锁定问题。

来自:MySQL表锁

在下列情况下,表锁定也是不利的: *会话发出的选择需要很长时间才能运行。*另一届会议随后在同一表上发布最新情况。此会话等待选择完成。*另一个会话在同一表上发出另一个SELECT语句。因为UPDATE比SELECT具有更高的优先级,所以在等待第一个SELECT完成之后,此SELECT等待更新完成。

我不会在这里重复它们,但是这个页面有一些关于在MySQL中增加表上并发性的提示。显然,一种选择是改为像InnoDB这样的引擎,它具有更复杂的行锁定机制,对于高并发性表,这种机制在性能上会产生巨大的差异。有关InnoDB go 这里的更多信息。不过,在更改引擎之前,可能值得参考其他技巧,如确保您的表被正确索引等,因为这将提高select和更新性能,而不管存储引擎如何。

基于用户评论的编辑:

我会说,这是一个可能的解决方案,根据你描述的症状,但它可能不是一个能让你达到你想要的地方。没有更多的信息是不可能说出来的。由于缺少索引,您可能正在执行完整的表扫描。这可能会导致磁盘上的I/O争用,这将进一步破坏MyISAM使用的表锁。如果是这样,那么根本原因是不正确的索引和纠正,这将是您在更改存储引擎之前的最佳操作路线。

此外,确保您的表是标准化的。这会对性能产生深远的影响,尤其是对更新的影响。规范化表允许您更新单个行,而不是更新非规范化表中的数百或数千行。这是由于不重复的值。它还可以节省大量的I/O上的选择,因为数据库可以更有效地缓存数据块。如果不知道您正在使用的表的结构或所提供的索引,就很难为您提供更详细的响应。

用户尝试使用后的编辑

您提到您的Java进程是多线程的。您试过用单个线程运行进程吗?我想知道是否可能是您发送了相同的行来更新到多个线程和/或跨线程更新的方式导致了锁定问题。

除此之外,我还要检查以下几点:

  1. 您是否检查了您的解释计划,以验证您的成本是否合理,以及查询是否实际使用了您所拥有的索引?
  2. 你的桌子标准化了吗?更具体地说,如果表是规范化的,那么在更新单个记录时,是否正在更新100行?
  3. 当Java进程运行时,机器正在忙着交换进出的东西,您是否有可能耗尽物理内存?
  4. 您的磁盘(单个磁盘)是否已满?有比它能合理处理的更多的IOP?
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2732715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档