进入dedecms2007后台的时候,通过phpmyadmin查看,会出现很多Sleep进程,开始怀疑是mysql的问题,不过修改了wait_timeout值有些效果,不过无法根本上解决问题。于是就到官方询问。原来是官方链接数据库采用的是pconnect()函数,而没有采用常规的connect()链接方式。

pconnect()的链接方式会检查是否有已经存在的链接,如果有的话就是用旧的链接,没有才会开启新链接。mysql_close无法关闭。这种连接方式会占用部分资源,如果不及时关闭,性能不佳的服务器甚至会导致瘫痪。

解决办法是:打开include/pub_db_mysql.php大概第73行,把下面的一段代码:

  //连接数据库
  if($pconnect == -100){ $this->linkID = @mysql_connect($this->dbHost,$this->dbUser,$this->dbPwd); }
  else{ $this->linkID = @mysql_pconnect($this->dbHost,$this->dbUser,$this->dbPwd); }

替换成如下代码:

  //连接数据库
// if($pconnect == -100){ $this->linkID = @mysql_connect($this->dbHost,$this->dbUser,$this->dbPwd); }
// else{ $this->linkID = @mysql_pconnect($this->dbHost,$this->dbUser,$this->dbPwd); }

//直接使用connect
  $this->linkID = @mysql_connect($this->dbHost,$this->dbUser,$this->dbPwd);
保存,再看mysql的进程。是不是OK了?
官方放弃connect()而采用pconnect()的链接方式未必是最好的选择。

Published in 开源代码

One Response to “Dedecms2007 Mysql数据库出现大量Sleep进程的解决办法”

  1. 07月 20th, 2008 at 11:12 #dsf

    thank you

Leave a Reply