繁体   English   中英

通常冷静的网络服务器具有CPU峰值,对MySQL有一定的查询

[英]Usually calm webserver has CPU spikes with certain query on MySQL

我已将网站从Windows 2008R2移动到Windows 1012R2。 在新服务器上,当某个脚本启动时,我的CPU性能会出现高峰。运行此查询的一个连接占用55%,这不是一个真正的大问题,但是2分钟之后会出现第二个具有相同查询的连接。 而且它出错了。 现在MySQL吞噬了100%的CPU,服务器没有时间服务 - 甚至是缓存 - 网站。

这是,我认为脚本的和平是罪魁祸首:

if(isset($_GET['q'])){
global $wpdb;

$table_suggest = $wpdb->prefix . "suggest";
$word = $_GET['q'];
$getwords = "SELECT words from $table_suggest WHERE words LIKE '{$word}%' ORDER BY words ASC LIMIT 0, 10";
// echo $getwords;
$wpdb->show_errors();
$wpdb->get_results($getwords);
// header('Content-Type: text/html',true);
foreach ($wpdb->last_result as $row){
echo $row->words."\n";
}
flush();
}
else {echo "need search query";}

在我的日志中有很多这些:

SELECT words FROM wp_suggest WHERE words = '(sub)distributieovereenkomsten';
# User@Host: User[User] @ localhost [127.0.0.1]
# Query_time: 0.109377  Lock_time: 0.000000 Rows_sent: 2  Rows_examined: 64298
SET timestamp=1497086405;
SELECT words FROM wp_suggest WHERE words = 'Misbruik';
# Time: 170610 11:20:06
# User@Host: User[User] @ localhost [127.0.0.1]
# Query_time: 0.109375  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 64298

我认为这个脚本可以为搜索引擎收集单词。 考虑到这个站点在我的旧服务器上运行完全正常,我想这应该在我更新更好的服务器上运行完美。

所以也许对MySQL有更好了解的人可以扫描我的my.ini给我看,如果有性能空间的话。

我目前的情况:

  • 英特尔至强L5640
  • 6GB内存
  • Windows 2012R2 IIS8.5 x64
  • PHP7.1.1 x64
  • MySQL 5.5 x64

我现在的my.ini:

[client]
port=3306

[mysql]
default-character-set=UTF8

[mysqld]
max-allowed_packet = 64M
wait-timeout = 6000
slow_query_log_file = d:/mysql/slow-queries.log
long_query_time=10
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="D:/mysql/"
character-set-server=UTF8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=150
query_cache_size=0
table_cache=256
tmp_table_size=16M
max_heap_table_size=16M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=69M
key_buffer_size=55M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_additional_mem_pool_size=3M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=2M
innodb_buffer_pool_size=3076M
innodb_log_file_size=768M
innodb_thread_concurrency=8

MySQL本身计算它需要9GB作为innodb_buffer_pool_size,但我的服务器现在只有6个,而mysqld.exe只使用850MB。 并且大多数时候CPU不超过40%,所以这不是真正的问题,我想。

在此先感谢您的帮助。

我去Percona并根据我的配置生成了一个ini,看起来现在一切都很顺利。 我必须监控服务器几天,但我相信我的问题已经解决了。

谢谢大家和我一起思考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM