我有一個SQL查詢的問題,出於某些原因(我不明白),根據「strace」(超時),並將啓動運行X-times?什麼意思(超時)在「strace」 - 輸出? (mysql/php分析)
輪詢([{FD = 6,事件= POLLIN | POLLPRI}],1,0)= 0(超時)
PHP腳本,其首先執行查詢看起來在數據庫中,如果相應的電子郵件地址已存在於數據庫中,如果沒有,則會將其添加,如果沒有發生錯誤,則會發送一封電子郵件。
服務器: Ubuntu的14.04.3 LTS
DB: MySQL的版本14.14 DISTRIB 44年5月5日,對於使用的readline 6.3
表Debian的Linux-GNU(x86_64的): InnoDB的
SQL:(實施例| 1查詢的持續時間:0031秒)
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
編輯:謝謝@VolkerK,現在我看到這個問題:P
a)電子郵件字段上的唯一索引使用SELECT-NOT-nothing-found-INSERT組合來解決沒有可能的競爭條件的問題。只需檢查errno [1022 ER_DUP_KEY](https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_dup_key)b)您可以添加「EXPLAIN SELECT SQL_NO_CACHE」的結果user_email FROM mail_logging WHERE mail_id_fk IN(142) AND user_email ='tester @ foo.bar''到您的問題文本? – VolkerK
@VolkerK說的是真正解決您的問題的方法。如果您可以避免檢查PHP中的完整性,則根本不會有超時問題。 – Mjh
根據日誌'poll(...,...,int timeout)'調用了超時值0,即它應該立即返回狀態報告和超時值(如果我沒有弄錯)在這種情況下僅僅意味着「無需報告」。所以,目前,我甚至在這裏看不到「超時問題」;-) – VolkerK