Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于插入查询而导致MySQL过载_Mysql_Query Optimization - Fatal编程技术网

由于插入查询而导致MySQL过载

由于插入查询而导致MySQL过载,mysql,query-optimization,Mysql,Query Optimization,由于Insert查询过载,我最近开始遇到一些严重的服务器问题。我们服务器上的所有查询都经过了优化,但由于插入查询量很大,流量再次增加,CPU的使用量也在增加 我们进行了一次插入。。对每个访问我们网站的访问者进行重复更新查询,以跟踪在线访问者以及在线用户及其所在页面 我不知道还有什么其他的方法可以完成,也不知道该怎么做才能减少服务器负载 有什么想法吗?我最喜欢的处理方法是在服务器内存中缓冲访问者数据,然后每隔一段时间进行批量插入 例如,仅当X个访问者日志在内存中排队时才写入数据库,其中X可能在10

由于Insert查询过载,我最近开始遇到一些严重的服务器问题。我们服务器上的所有查询都经过了优化,但由于插入查询量很大,流量再次增加,CPU的使用量也在增加

我们进行了一次插入。。对每个访问我们网站的访问者进行重复更新查询,以跟踪在线访问者以及在线用户及其所在页面

我不知道还有什么其他的方法可以完成,也不知道该怎么做才能减少服务器负载


有什么想法吗?

我最喜欢的处理方法是在服务器内存中缓冲访问者数据,然后每隔一段时间进行批量插入

例如,仅当X个访问者日志在内存中排队时才写入数据库,其中X可能在10到1000之间,具体取决于您的应用程序

即使发送到数据库服务器的命令仍然包含1000个insert命令,应用程序服务器和数据库服务器之间也只有一次往返。因此,您将消除管理许多不同连接的开销


此外,还可以考虑NoSQL混合文件,例如对这些数据进行弹性搜索,以消除MySQL服务器的负载。它的伸缩性非常好,可以针对索引(插入)、查询或两者进行优化

你好。这是一个非常有趣的技巧。从未想过:)。非常聪明。因此,您只需构建一个包含insert查询的文本文件,然后每隔大约200个查询运行一次?我将使用内存缓存(如memcachedb)而不是文本文件。我会使用队列数据结构将对象写入缓存。我还缓存队列大小,这样我就可以问memcachedb“我的队列有多大?”。您还可以选择同步或异步刷新队列。每次有人访问时,您都可以检查队列是否已满,并将其刷新到DB。或者,您可以拥有一个特殊的“heartbeat.php”,并拥有一个cron作业访问权限,每30秒访问一次,以查看是否需要刷新它。这样你就不会减慢任何访问者的速度。没问题,听起来这是一个必须解决的好问题,因为你的网站表现良好。玩得高兴