Что означает (таймаут) в strace -output? (анализ mysql/php)

У меня проблема с SQL-запросом, который по причинам (которых я не понимаю) согласно "strace" a (тайм-аут) встанет и будет запускаться Х-раз?

poll([{fd=6, events=POLLIN|POLLPRI}], 1, 0) = 0 (время ожидания)

PHP-скрипт, который выполняет запрос, сначала просматривает базу данных, если соответствующий адрес электронной почты уже есть в базе данных, если нет, он будет добавлен, и если не произошло ошибки, будет отправлено электронное письмо.

Сервер: Ubuntu 14.04.3 LTS

БД: mysql Ver 14.14 Distrib 5.5.44, для debian-linux-gnu (x86_64) с использованием readline 6.3

Таблица: InnoDB

SQL: (Пример | Продолжительность 1 запроса: 0,031 сек.)

SELECT SQL_NO_CACHE user_email FROM mail_logging
WHERE mail_id_fk IN (142)
AND user_email = '[email protected]'

SQL: (ОБЪЯСНЕНИЕ)

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  mail_logging    ref id_mail,mail_id_fk,user_email   id_mail 775 const,const 1   Using where; Using index

strace: http://pastebin.com/FbYUZ1a3

lsof: http://pastebin.com/RyQcbWmj

edit: Спасибо @VolkerK, теперь я вижу проблему: P


person Lars Moelleken    schedule 25.09.2015    source источник
comment
а) уникальный индекс в поле электронной почты решает проблему без возможных условий гонки, используя комбинацию SELECT-if-nothing-found-INSERT. Просто проверьте errno 1022 ER_DUP_KEY б) Не могли бы вы добавить результат EXPLAIN SELECT SQL_NO_CACHE user_email FROM mail_logging WHERE mail_id_fk IN (142) AND user_email = '[email protected]' к тексту вашего вопроса?   -  person VolkerK    schedule 25.09.2015
comment
То, что сказал @VolkerK, является реальным решением вашей проблемы. Если вы можете избежать проверки целостности в PHP, у вас вообще не будет проблем с тайм-аутом.   -  person Mjh    schedule 25.09.2015
comment
Согласно логу poll(..., ..., int timeout) был вызван с таймаутом 0, т.е. он должен немедленно вернуться, сообщив о статусе, а timeout (если не ошибаюсь) в данном случае просто означает, что сообщать не о чем. Так что в настоящее время я даже не вижу здесь timeout problem ;-)   -  person VolkerK    schedule 25.09.2015


Ответы (1)


Я думаю, это сигнализирует о том, что опрос закончился с тайм-аутом. На справочной странице опроса:

Аргумент timeout указывает минимальное количество миллисекунд, которое будет заблокировано poll(). (Этот интервал будет округлен до степени детализации системных часов, а задержки планирования ядра означают, что интервал блокировки может быть превышен на небольшую величину.) Отрицательное значение тайм-аута означает бесконечный тайм-аут. Указание тайм-аута, равного нулю, вызывает немедленный возврат poll(), даже если ни один файловый дескриптор не готов.

person rkachach    schedule 25.09.2015