我的 LAMP 应用程序在 MySQL 中有大约 90 万行,但我遇到了一些性能问题。
背景 - 除了 LAMP 堆栈之外,还有一个在其自己的 JVM 中运行的 Java 进程(多线程)。因此,它们与 LAMP 和 java 一起构成了完整的解决方案。 java 进程负责插入/更新和少数选择。这些插入/更新通常是成批的,在 5-150 行之间的任何地方。 PHP 前端代码仅执行 SELECT。
问题 - 当 java 进程运行时,PHP/SELECT 查询变得非常慢。当 java 进程停止时,SELECT 的执行正常。我的意思是性能差异很大。当 java 进程运行时,在 php 前端执行的任何操作都会导致 mysqld 进程占用 80% 甚至更多的 CPU。
如有任何帮助,我们将不胜感激。
MySQL 使用默认参数和设置运行。
软件堆栈-
最佳答案
你使用什么引擎来运行 MySQL?这里要注意的是,如果您使用的是 MyISAM,那么由于引擎使用的表锁定,您将遇到锁定问题。
Table locking is also disadvantageous under the following scenario:
* A session issues a SELECT that takes a long time to run. * Another session then issues an UPDATE on the same table. This session waits until the SELECT is finished. * Another session issues another SELECT statement on the same table. Because UPDATE has higher priority than SELECT, this SELECT waits for the UPDATE to finish, after waiting for the first SELECT to finish.
我不会在这里重复它们,但是该页面有一些关于在 MySQL 中增加表并发性的技巧。显然,一种选择是改用像 InnoDB 这样的引擎,它具有更复杂的行锁定机制,对于高并发表可以在性能上产生巨大差异。有关 InnoDB 的更多信息,请转到 here . 在更改引擎之前,尽管可能值得查看其他提示,例如确保您的表正确索引等,因为无论存储引擎如何,这都会提高选择和更新性能。
根据用户评论编辑:
根据您描述的症状,我会说这是一种可能的解决方案,但也可能不是 一个能带你去你想去的地方的人。没有更多信息就不可能说。 由于缺少索引,您可能正在执行全表扫描。这可能会导致 I/O 争用 在你的磁盘上,这只会进一步加剧 MyISAM 使用的表锁。如果是这样的话 原因的根源是不正确的索引和纠正,这将是您最好的行动方案 在更改存储引擎之前。
此外,请确保您的表格已规范化。这会对性能产生深远影响 特别是更新。规范化表可以让您更新单行而不是数百行或 数以千计的非规范化表格。这是由于不重复的值。它还可以节省大量资金 选择上的 I/O,因为数据库可以更有效地缓存数据 block 。在不知道结构的情况下 您正在使用的表或您提供的索引很难为您提供 更详细的回复。
在用户尝试使用 InnoDB 后编辑:
您提到您的 Java 进程是多线程的。您是否尝试过使用单线程运行该进程?我想知道是否可能您发送相同的行以更新到多个线程和/或您跨线程更新的方式导致锁定问题。
除此之外,我会检查以下内容:
关于java - MySQL性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732715/
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
Java的Collections.unmodifiableList和Collections.unmodifiableMap在Ruby标准API中是否有等价物? 最佳答案 使用freeze应用程序接口(interface):Preventsfurthermodificationstoobj.ARuntimeErrorwillberaisedifmodificationisattempted.Thereisnowaytounfreezeafrozenobject.SeealsoObject#frozen?.Thismethodretur