用于mysql的TOP命令中的TIME列

当我在我的数据库服务器上运行顶部时,我得到的mysqld已经运行了4:00.51,并继续上升。

我认为这意味着一个MySQL的进程已经从这里的其他职位运行了很长时间。 它没有设置为累积模式,因为如果情况如此,标题看起来会变成CTIME。

我想知道的是,如果这是正常的网站,使大量的个人连接使用PHP。 我不应该有任何长时间运行的进程,这将持续到这么长的一个MySQL连接,最多只有几秒钟。

我错误地认为这次涉及到一个连接/进程运行? 我想通常我会看到它在顶部闪现,而不是随着这个数字的增长而停留在那里。

当您查看top并查看mysqld每个实例只应该有一个mysqld 。 老版本的服务器编译的mysqld产生了许multithreading。 我会假设你没有使用这样的。

要看到个人关系,你可以做两件事情之一

在mysql客户端运行SHOW PROCESSLIST; (第三列Host的传入连接的来源)

在操作系统中运行

  • netstat | grep -i mysql
  • netstat | grep 3306

为了强调, 每个实例只能看到一个mysqld进程

如果你想重复检查顶部的时间值,请询问mysqld

如果你有MySQL 5.1+,运行这个:

 SELECT TRIM(REPLACE(CONCAT( IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days '))), IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs '))), IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins '))), IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' ')) TimeDisplay FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa FROM ( SELECT variable_value sec_a FROM information_schema.global_status WHERE variable_name = 'Uptime' ) A) AA) AAA) AAAA) B; 

如果你有MySQL 5.0,运行这个

 MYSQL_CONN="-uroot -ppassword" UPTIME_SEC=`mysql ${MYSQL_CONN} -A -N -e"SHOW GLOBAL STATUS LIKE 'Uptime'" | awk '{print $2}'` SQLTIME="SELECT TRIM(REPLACE(CONCAT(" SQLTIME="${SQLTIME} IF(dy=0,'',IF(dy=1,'1 day ',CONCAT(dy,' days ')))," SQLTIME="${SQLTIME} IF(hr=0,'',IF(hr=1,'1 hr ', CONCAT(hr,' hrs ')))," SQLTIME="${SQLTIME} IF(mn=0,'',IF(mn=1,'1 min ',CONCAT(mn,' mins ')))," SQLTIME="${SQLTIME} IF(sc=0,'',IF(sc=1,'1 sec ',CONCAT(sc,' secs ')))),' ',' ')) TimeDisplay" SQLTIME="${SQLTIME} FROM (SELECT dy,hr,mn,MOD(sec_aaaa,60) sc" SQLTIME="${SQLTIME} FROM (SELECT dy,hr,FLOOR((sec_aaa - dy*86400 - hr*3600)/60) mn,sec_aaa sec_aaaa" SQLTIME="${SQLTIME} FROM (SELECT dy,FLOOR((sec_aa - (dy*86400))/3600) hr,sec_aa sec_aaa" SQLTIME="${SQLTIME} FROM (SELECT FLOOR(sec_a/86400) dy,sec_a sec_aa" SQLTIME="${SQLTIME} FROM (SELECT ${UPTIME_SEC} sec_a ) A) AA) AAA) AAAA) B" MYSQL_START_TIME=`mysql ${MYSQL_CONN} -A -N -e"${SQLTIME}"` echo ${MYSQL_START_TIME} 

这会给你mysqld已经运行的秒数。

如果你想看到mysqld开始的date和时间

MySQL 5.1+

 select (now() - interval variable_value second) MySQLStartTime from information_schema.global_status where variable_name='uptime'; 

MySQL 5.0

 MYSQL_CONN="-uroot -ppassword" UPTIME_SEC=`mysql ${MYSQL_CONN} -A -N -e"SHOW GLOBAL STATUS LIKE 'Uptime'" | awk '{print $2}'` MYSQL_START_TIME=`mysql ${MYSQL_CONN} -A -N -e"SELECT (NOW() - INTERVAL ${UPTIME_SEC} SECOND) MySQLStartTime"` echo ${MYSQL_START_TIME} 

试一试 !!!