coluna TIME no comando TOP para o mysql

1

Quando eu corro no topo do meu servidor de banco de dados, percebo que o mysqld está rodando por 4: 00.51 e continua aumentando.

Eu suponho que isso significa que um processo com o mysql tem rodado esse tempo de outras postagens aqui. Ele não está configurado para o modo cumulativo, da melhor forma que posso dizer, já que o título parece que mudaria para CTIME, se esse for o caso.

O que eu estou querendo saber é se isso é normal para um site que faz muitas conexões individuais usando PHP. Eu não deveria ter nenhum processo de execução longa que pudesse manter uma conexão mysql por tanto tempo, apenas alguns segundos.

Estou incorreto ao assumir que esse tempo está relacionado a uma conexão / processo em execução? Eu acho que normalmente eu vejo isso brilhando no TOP, não apenas ficando lá com esse número aumentando.

    
por michael 19.12.2012 / 17:23

1 resposta

1

Quando você olha para top e vê mysqld , deve haver somente um mysqld por instância . Versões antigas de mysqld compiladas pelo servidor geram muitos threads. Eu suponho que você não está usando isso.

Para ver as conexões individuais, você pode fazer uma das duas coisas

No cliente mysql, execute SHOW PROCESSLIST; (origem da conexão de entrada na terceira coluna Host )

No sistema operacional, execute

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

Para ênfase, você deve ver apenas um mysqld process por instância .

Se você quiser checar novamente o valor de tempo como visto no topo, pergunte ao mysqld

Se você tem o MySQL 5.1+, execute isto:

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;

Se você tem o MySQL 5.0, execute este

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}

Isto lhe dará o número de segundos que o mysqld está rodando.

Se você quiser ver a data e hora em que o mysqld iniciou

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}

Experimente!

    
por 19.12.2012 / 17:40