WooCommerce站点MariaDB CPU占用过高问题排查求助
WooCommerce百万产品站点CPU占用异常排查问题
站点基本信息
- 运营WooCommerce站点,包含约100万个simple类型产品(疑问:该数量对WooCommerce是否过多?)
- 服务器配置:16核CPU、62GB内存,代码与数据库部署在同一服务器
- MariaDB版本:10.5.23-MariaDB(debian-linux-gnu x86_64)
CPU占用异常表现
服务器CPU时常被占满,导致站点无法响应,通过htop工具观察到MariaDB占用全部CPU资源。
AmazonBot访问与Woo API疑问
站点已配置Cloudflare,访问日志显示AmazonBot频繁访问/wp-json/wp/v2/product/ID-HERE类端点,示例日志:
162.158.87.126 - - [03/Feb/2024:15:52:35 +0100] "GET /wp-json/wp/v2/product_tag/766 HTTP/2.0" 504 164 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)" "3.224.220.101,3.224.220.101"
疑问:
- 这类访问是否会导致CPU占用过高?
- 由于未使用Woo API,是否应该直接禁用?
慢查询情况
执行SHOW PROCESSLIST命令发现以下两类查询已挂起超过2000秒:
第一类慢查询
SELECT post_modified_gmt FROM wp_posts WHERE post_status = 'publish' AND post_type IN ( 'post', 'page', 'attachment', 'e-landing-page', 'elementor_library', 'product' ) ORDER BY post_modified_gmt DESC LIMIT 1
第二类慢查询
SELECT wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id ) WHERE 1 = 1 AND ( wp_term_relationships.term_taxonomy_id IN ( 2, 3, 4, 5 ) ) AND wp_posts.post_type = 'product' AND (( wp_posts.post_status = 'publish' )) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 1
数据库表索引情况
- wp_posts:

- wp_postmeta:

- wp_term_relationships:

补充排查信息
数据库与系统统计数据
SELECT COUNT(*) FROM information_schema.tables;查询结果:
+----------+ | COUNT(*) | +----------+ | 602 | +----------+ 1 row in set (0.004 sec)
SHOW GLOBAL STATUS全局状态统计STATUS会话状态信息SHOW ENGINE INNODB STATUSInnoDB引擎状态top -b -n 1系统进程统计top -b -n 1 -H线程级进程统计ulimit -a系统资源限制配置iostat -xm 5 3磁盘IO统计数据df -h磁盘空间使用情况df -iinode使用情况free -h内存使用情况cat /proc/meminfo内存详细信息lsb_release -a操作系统版本信息SHOW GLOBAL VARIABLES数据库全局变量配置lsblk磁盘分区信息SELECT COUNT(*), sum(data_length), sum(index_length), sum(data_free) FROM information_schema.tables LIMIT 100000;数据库表空间统计- 存储介质为SSD
wp-config.php配置内容findfragtables.sql输出的表碎片信息
注:收集以上信息期间,CPU使用率未超过80%,平均负载约为60%。
额外疑问
向wp_posts和wp_postmeta表执行INSERT操作时,插入操作瞬间完成,但之后CPU使用率会飙升至100%,怀疑是MySQL在后台执行重建索引操作导致?
内容的提问来源于stack exchange,提问作者Umair Ayub
相关产品推荐
相关产品推荐

