如果我理解正确,您的 Perl 进程在查询 MySQL 时挂起,而 MySQL 本身仍然可以运行。MySQL 服务器为此具有嵌入式故障排除功能,即log_slow_queries选项。将以下几行放入您my.cnf
的技巧中:
[mysqld]
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 10
之后,重新启动或重新加载 MySQL 守护程序。让服务器运行一段时间以收集统计数据并分析发生了什么:
mysqldumpslow -s at /var/log/mysql/mysql-slow.log | less
在我的一台服务器上,最高记录(-s at
按平均查询时间排序,顺便说一句)是:
Count: 286 Time=101.26s (28960s) Lock=14.74s (4214s) Rows=0.0 (0), iwatcher[iwatcher]@localhost
INSERT INTO `wp_posts` (`post_author`,`post_date`,`post_date_gmt`,`post_content`,`post_content_filtered`,`post_title`,`post_excerpt`,`post_status`,`post_type`,`comment_status`,`ping_status`,`post_password`,`post_name`,`to_ping`,`pinged`,`post_modified`,`post_modified_gmt`,`post_parent`,`menu_order`,`guid`) VALUES ('S','S','S','S','S','S','S','S','S','S','S','S','S','S','S','S','S','S','S','S')
FWIW,它是一个拥有超过 30K 帖子的 WordPress。