布大俠的來信:
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 的最前面
還有沒有人有其他建議呢?