布大侠的来信:
Dear Mark,
我是布大侠,近来在调整系统,发现plog在运行一阵子之后会在我的mysql中留下许多不会关闭的thread,一个晚上就多了三十几条死在那边,请问有么办法查出是哪里的问题?
我装的外挂都是你这边干来的,我想应该有很多人也有相同问题只是没注意到而已,但因为背包客栈流量不小,我的mysql跑一天就会挂了....请帮忙.
pLog 其实对于 DB 是没有怎么在调整的,所以当量一大很容易出现 performance 的瓶颈。有下面几个方式可以来调整 pLog 的 performance。
1. DB 效能不彰:为 DB 加上 Index。
ALTER TABLE plog_articles ADD INDEX (num_reads), ADD INDEX (category_id), ADD INDEX (blog_id), ADD INDEX (user_id);
ALTER TABLE plog_articles_categories ADD INDEX (blog_id);
ALTER TABLE plog_articles_comments ADD INDEX (parent_id), ADD INDEX (article_id);
ALTER TABLE plog_articles_notifications ADD INDEX (article_id), ADD INDEX (user_id), ADD INDEX (blog_id);
ALTER TABLE plog_bayesian_filter_info ADD INDEX (blog_id); ALTER TABLE plog_bayesian_tokens ADD INDEX (blog_id);
ALTER TABLE plog_blogs ADD INDEX (owner_id);
ALTER TABLE plog_filtered_content ADD INDEX (blog_id);
ALTER TABLE plog_gallery_albums ADD INDEX (parent_id), ADD INDEX (owner_id);
ALTER TABLE plog_gallery_resources ADD INDEX (album_id), ADD INDEX (owner_id);
ALTER TABLE plog_host_blocking_rules ADD INDEX (blog_id);
ALTER TABLE plog_mylinks ADD INDEX (blog_id), ADD INDEX (category_id);
ALTER TABLE plog_mylinks_categories ADD INDEX (blog_id);
ALTER TABLE plog_myrecent ADD INDEX (blog_id), ADD INDEX (category_id), ADD INDEX (user_id);
ALTER TABLE plog_myrecent_categories ADD INDEX (blog_id);
ALTER TABLE plog_referers ADD INDEX (blog_id), ADD INDEX (article_id);
ALTER TABLE plog_trackbacks ADD INDEX (article_id);
ALTER TABLE plog_users_permissions ADD INDEX (blog_id), ADD INDEX (user_id), ADD INDEX (permission_id);
2. 常发生 Too many connection:加大 Mysql 的 max_connection。预设值为 50。请自行视情况加大,例如
set-variable = max_connections = 500
3. 常发生 mysql thread 没被使用,佔据 connection:缩短 Mysql 的 interactive_timeout。预设值为 28800(八小时)。请自行视情况缩短,例如
set-variable = interactive_timeout= 600
4. 虚拟主机商不准我用 pconnect:改为 non persistent connection。把
define( "ADODB_NEVER_PERSIST", true );
加到 index.php 与 admin.php 的最前面
还有没有人有其他建议呢?