Назад | Перейти на главную страницу

Столбец TIME в команде TOP для mysql

Когда я запускаю верхнюю часть своего сервера базы данных, я получаю, что mysqld работает 4: 00.51 и продолжает расти.

Я предполагаю, что это означает, что один процесс с mysql работал так долго из других сообщений здесь. Насколько я могу судить, он не установлен в кумулятивный режим, поскольку заголовок выглядит так, как будто он изменится на CTIME, если это так.

Мне интересно, нормально ли это для сайта, который устанавливает множество индивидуальных подключений с помощью PHP. У меня не должно быть никаких длительных процессов, которые будут удерживать соединение mysql так долго, максимум секунды.

Я ошибаюсь, полагая, что это время относится к одному запущенному соединению / процессу? Я думаю, что обычно я вижу, как он вспыхивает и исчезает в ТОПе, а не просто остается там с увеличением этого числа.

Когда ты смотришь на top и увидеть mysqld, должен быть только один mysqld за экземпляр. Старые версии серверной компиляции mysqld порождает много потоков. Я предполагаю, что вы их не используете.

Чтобы увидеть отдельные связи, вы можете сделать одно из двух

В клиенте 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

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}

Попробуйте !!!