Когда я запускаю верхнюю часть своего сервера базы данных, я получаю, что 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}
Попробуйте !!!