mysql高cpu使用率减慢服务器速度,如何优化我的查询?

k5ifujac  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(377)

我有一个问题,当我在多个客户端上每秒从mysql数据库读取数据时,mysql的cpu使用率提高到26-27%,之后我的另一个服务(测量并记录实时数据到数据库)的速度减慢/崩溃。
所以我在同一台服务器上运行了两个不同的web应用程序:
应用程序1是一个网页,它每秒钟向数据库周期性地插入数据。仅此服务运行mysql时,cpu使用率约为1,8-2,0%,内存使用率约为275mb,所有这些都运行平稳,数据按其每秒应有的速度记录到数据库中。所以我认为日志部分不是问题所在。
应用程序2也是一个网页,它周期性地从数据库中读取数据并将其显示给用户(从数据中呈现图形),而且它也会在每秒钟进行一次(因此,此服务将实时数据显示给用户,这些数据由应用程序1存储在数据库中)。打开页面时,javascript使用xmlhttprequests调用php page,php page从mysql数据库获取数据。当我的页面中有6个不同的图形(每秒更新一次,这样一个客户机每秒执行6个查询(xmlhttprequest to php page))时,mysql的cpu使用率提高到11,0-12,0%,内存使用率保持不变。所以现在我已经运行了我的两个应用程序,所有的程序仍然按它应该的方式运行:其他应用程序每秒在mysql中存储数据,其他应用程序每秒获取数据并将其显示给客户端。
但是,当另一个客户端出现时(例如,在移动设备上用浏览器打开应用程序2,或者只是用同一浏览器窗口在两个选项卡中打开应用程序2),mysql的cpu使用率上升到24,0-26,0%的内存使用率与以前保持一致,并且我的应用程序1不再正常工作。。它仍然在每秒钟存储数据这不是问题所在,但是我要存储的数据是实时测量数据,并且这个测量部分由于高cpu使用率而超时,因此现在存储的值不是正确的值(最后一个测量值被反复存储)。
因此,我想要实现的是降低来自application2的mysql查询导致的cpu使用率,这样即使application2中有多个客户机,application1仍然可以工作。
下面是我的php代码,它每秒钟都用xmlhttprequests调用一次,从mysql获取数据:

<?php
 $link = mysqli_connect("localhost", "myuser", "mypassword", "mydatabase");

 // Check connection
 if($link === false){
     die("ERROR: Could not connect. " . mysqli_connect_error());
 }
 $taulu = $_POST["taulu"];
 $jaksominuuttia = $_POST["jaksominuuttia"];
 $muuttujat = json_decode($_POST["muuttujat"]);
 if(sizeof($muuttujat) == 1){
     $result = mysqli_query($link, "SELECT $muuttujat[0], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 }else if(sizeof($muuttujat) == 2){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 }else if(sizeof($muuttujat) == 3){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 }else if(sizeof($muuttujat) == 4){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], $muuttujat[3], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC"); 
 }else if(sizeof($muuttujat) == 5){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], $muuttujat[3], $muuttujat[4], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 }else if(sizeof($muuttujat) == 6){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], $muuttujat[3], $muuttujat[4], $muuttujat[5], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 } else if(sizeof($muuttujat) == 7){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], $muuttujat[3], $muuttujat[4], $muuttujat[5], $muuttujat[6], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 } else if(sizeof($muuttujat) == 8){
     $result = mysqli_query($link, "SELECT $muuttujat[0], $muuttujat[1], $muuttujat[2], $muuttujat[3], $muuttujat[4], $muuttujat[5], $muuttujat[6], $muuttujat[7], time FROM $taulu WHERE time >= NOW() - INTERVAL $jaksominuuttia MINUTE ORDER by time DESC");
 }        

 $json = mysqli_fetch_all ($result, MYSQLI_ASSOC);
 echo json_encode($json );

 // Close connection
 mysqli_close($link);
?>

这段代码中有没有什么东西导致mysql的cpu使用率很高?
用作服务器的计算机具有intel i7-6820hq 2.70ghz cpu和16,0 gb ram。操作系统是windows10pro,我正在使用它的iis。我的数据库是mysql community serverv.8.0.11,我在表中使用innodb引擎。php版本是v7.2.2。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题