易截截图软件、单文件、免安装、纯绿色、仅160KB

MySQL为什么会有一大堆在Sleep的进程?

关于php应该在何时调用mysql_close()以及pconnect方式和传统方式有何种区别收藏
以前我一直认为,当php的页面执行结束时,会自动释放掉一切。相信很多人都跟我想的一样。但事实证明并不是这样。比如session就不会随着页面执行完毕而释放。
php的垃圾回收机制,其实只针对于php本身。对于mysql,php没权利去自动去释放它的东西。如果你在页面执行完毕前不调用mysql_close(),那么mysql那边是不会关闭这个连接的。如果你是用的是pconnect方式,即使你在页面执行完毕前调用mysql_close(),也无法另mysql关闭这个连接。
也许在负载低的情况下,你感受不到有何不妥。下面我就来解释这两天我观察出的现象:
在php中使用pconnect方式建立连接,然后到mysql客户端下执行show processlist;如果你的负载到一定程度的话,你可以看到很多sleep的进程,这些进程就是人们常说的死连接,它们会一直保持sleep,直到my.cnf里面设置的wait_timeout这个参数值的时间到了,mysql才会自己杀死它。在杀死它的时候,mysql还会在error-log里面记录一条Aborted connection xxx to db: 'xxx' user: 'xxx' host: 'xxx'的日志,用google翻译一下,会得到一个相当强悍的解释"胎死腹中的连接"!
那么造成sleep的原因,有三个,下面是mysql手册给出的解释:
1.客户端程序在退出之前没有调用mysql_close().
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器.
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了.
  
上面是我根据google的翻译改了下,可能有某些地方翻译的不准确。原文请见下面:
1 The client program did not call mysql_close() before exiting.
2 The client had been sleeping more than wait_timeout or interactive_timeout seconds without issuing any requests to the server.
3 The client program ended abruptly in the middle of a data transfer
如果你的sleep进程数在同一时间内过多,再加上其他状态的连接,总数超过了max_connection的值,那mysql除了root用户外,就无法再继续处理任何请求无法与任何请求建立连接或者直接down了。所以,这个问题在大负载的情况下还是相当严重的。如果发现你的mysql有很多死连接存在,首先要先检查你的程序是否使用的是pconnect的方式,其次,检查在页面执行完毕前是否及时调用了mysql_close(),
还有一个办法,你可以在my.


相关文档:

MYSQl left join联合查询效率分析

user表:
id | name
———
1 | libk
2 | zyfon
3 | daodao
user_action表:
user_id | action
—————
1 | jump
1 | kick
1 | jump
2 | run
4 | swim
sql:
select id, name, action from user as u
left join user_action a on u.id = a.user_id
result:
id | ......

实例讲解MySQL联合查询

 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问,国内关于MySQL联结查询的资料十分少,相信大家在看了本文后会对MySQL联结语法有相当清晰的了解,也不会被Oracle的外联结的(“+”号)弄得糊涂了。
在SQL标准中规划的( ......

简单Mysql命令

MySql 基本操作
一、基础
1: 登陆:mysql –u  username –p <回车》 然后输入密码
2:查看数据库:show databases;
3:使用数据库use databasename;
4:  常看数据库表 show tables; 但是前提是你已经使用了use 命令,如果没有 的话可以使用 show tables from databasename ;
5: 查看数 ......

我的Mysql重装失败,解决办法

重新安装,出现/etc/init.d/mysql: line 115: /etc/mysql/debian-start: 没有该文件或目录
invoke-rc.d: initscript mysql, action "start" failed.
使用命令:sudo aptitude purge mysql-server mysql-server-5.0
然后在重新安装....
apt-get install mysql-server-5.0 ......

查看mysql当前连接数

 1、查看当前所有连接的详细资料:
mysqladmin -uroot -proot processlist
D:\MySQL\bin>mysqladmin -uroot -proot processlist
+-----+------+----------------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+---------- ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号