Heim Datenbank MySQL-Tutorial PHP访问MySQL查询超时处理的方法_MySQL

PHP访问MySQL查询超时处理的方法_MySQL

Jun 01, 2016 pm 01:20 PM
客户端

bitsCN.com 目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli:

//创建对象
$mysqli = mysqli_init();
//设置超时选项
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
//连接
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'world');
//如果超时或者其他连接失败打印错误信息
if (mysqli_connect_errno()) {
printf("Connect failed: %s/n", mysqli_connect_error());
exit();
}
//成功输出连接信息
printf ("Connection: %s/n.", $mysqli->host_info);
$mysqli->close();
?>

这个是连接超时,但是有些时候我们需要查询读写超时,比如说我们一个数据库压力很大,或者连接很多,那么数据库查询就很缓慢,但是我希望某些不重要的数据,比如说文章点击数这种如果查询超时了就不显示,至少能够保证主体页面正确显示,但是查遍PHP手册没有发现这个操作选项或者函数。

 

手册里只有这么四个选项

跟踪 mysqli 的扩展源代码发现它底层调用的是 libmysqlclient 的 mysql_options:

php-5.2.8/ext/mysqli/mysqli_api.c

并且在mysqli的PHP扩展中就只导出了几个变量:

php-5.2.8/ext/mysqli/mysqli.c

大概看了一下 libmysqlclient 的代码,发现其实它自带是有读写超时设置的:

mysql-5.1.30/sql-common/client.c

因为它自己定义了很多操作选项,只是php扩展里没有:

mysql-5.1.30/include/mysql.h

看看mysql中的读写超时是如何实现的:

mysql-5.1.30/sql-common/client.c

读写超时真正操作的地方,超时处理这里重试了两次,还是写死了:

mysql-5.1.30/sql/net_serv.cc

现在基本得出了结论:

按照上面查看代码来看,目前PHP针对MySQL查询超时以下限制:

1. 超时设置单位为秒,最少配置1秒

2. 但mysql底层的read会重试两次,所以实际会是 3 秒

 

重试两次 + 自身一次 = 3倍超时时间。

 

那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
现在我们来看看如果我们自己要设置超时,我们自己压入 MYSQL_OPT_READ_TIMEOUT 也是可以达到读写超时效果的,写一段代码来测试一下:

//自己定义读写超时常量
if (!defined('MYSQL_OPT_READ_TIMEOUT')) {
define('MYSQL_OPT_READ_TIMEOUT', 11);
}
if (!defined('MYSQL_OPT_WRITE_TIMEOUT')) {
define('MYSQL_OPT_WRITE_TIMEOUT', 12);
}

//设置超时
$mysqli = mysqli_init();
$mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3);
$mysqli->options(MYSQL_OPT_WRITE_TIMEOUT, 1);

//连接数据库
$mysqli->real_connect("localhost", "root", "root", "test");
if (mysqli_connect_errno()) {
printf("Connect failed: %s/n", mysqli_connect_error());
exit();
}

//执行查询 sleep 1秒不超时
printf("Host information: %s/n", $mysqli->host_info);
if (!($res=$mysqli->query('select sleep(1)'))) {
echo "query1 error: ". $mysqli->error ."/n";
} else {
echo "Query1: query success/n";
}

//执行查询 sleep 9秒会超时
if (!($res=$mysqli->query('select sleep(9)'))) {
echo "query2 error: ". $mysqli->error ."/n";
} else {
echo "Query2: query success/n";
}

$mysqli->close();
echo "close mysql connection/n";
?>

查看上面代码的执行结果,验证了上面的观点,第一个查询成功了,第二个查询连接被断开了:

如果需要修改这个秒级别的超时,比如改成毫秒级别的超时,只能两个地方修改:

 

1.  修改客户端,比如 mysqli 的 query 代码,加入定时器,超时则返回

2.  修改 Mysql 中的vio代码,因为mysql的网络处理底层都是经过vio的操作

MySQL相关的vio代码:

poll 超时:

setsockopt 超时:

基本上到这里就基本能够解决PHP在针对MySQL读写查询操作超时的处理了,希望对你有帮助。
heiyeluren的blog

bitsCN.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

VMware Horizon Client kann nicht geöffnet werden [Fix] VMware Horizon Client kann nicht geöffnet werden [Fix] Feb 19, 2024 pm 11:21 PM

Mit VMware Horizon Client können Sie bequem auf virtuelle Desktops zugreifen. Manchmal kann es jedoch bei der virtuellen Desktop-Infrastruktur zu Startproblemen kommen. In diesem Artikel werden die Lösungen erläutert, die Sie ergreifen können, wenn der VMware Horizon-Client nicht erfolgreich gestartet werden kann. Warum wird mein VMware Horizon-Client nicht geöffnet? Wenn beim Konfigurieren von VDI der VMWareHorizon-Client nicht geöffnet ist, kann ein Fehler auftreten. Bitte bestätigen Sie, dass Ihr IT-Administrator die richtige URL und die richtigen Anmeldeinformationen angegeben hat. Wenn alles in Ordnung ist, befolgen Sie die in dieser Anleitung aufgeführten Lösungen, um das Problem zu beheben. Beheben Sie, dass sich der VMWareHorizon-Client nicht öffnet, wenn VMW auf Ihrem Windows-Computer nicht geöffnet wird

Der VMware Horizon-Client friert beim Herstellen einer Verbindung ein oder bleibt stehen [Fix] Der VMware Horizon-Client friert beim Herstellen einer Verbindung ein oder bleibt stehen [Fix] Mar 03, 2024 am 09:37 AM

Wenn wir über den VMWareHorizon-Client eine Verbindung zu einem VDI herstellen, kann es vorkommen, dass die Anwendung während des Authentifizierungsprozesses einfriert oder die Verbindung blockiert wird. In diesem Artikel wird dieses Problem untersucht und Möglichkeiten zur Lösung dieser Situation aufgezeigt. Wenn der VMWareHorizon-Client einfriert oder Verbindungsprobleme auftreten, können Sie einige Maßnahmen ergreifen, um das Problem zu beheben. Beheben Sie, dass der VMWareHorizon-Client beim Herstellen einer Verbindung einfriert oder hängen bleibt. Wenn der VMWareHorizon-Client unter Windows 11/10 einfriert oder keine Verbindung herstellen kann, führen Sie die unten aufgeführten Lösungen aus: Überprüfen Sie die Netzwerkverbindung. Starten Sie den Horizon-Client neu. Überprüfen Sie den Status des Horizon-Servers. Löschen Sie den Client-Cache. Beheben Sie Ho

PHP MQTT-Client-Entwicklungshandbuch PHP MQTT-Client-Entwicklungshandbuch Mar 27, 2024 am 09:21 AM

MQTT (MessageQueuingTelemetryTransport) ist ein leichtes Nachrichtenübertragungsprotokoll, das häufig für die Kommunikation zwischen IoT-Geräten verwendet wird. PHP ist eine häufig verwendete serverseitige Programmiersprache, die zur Entwicklung von MQTT-Clients verwendet werden kann. In diesem Artikel wird die Verwendung von PHP zum Entwickeln eines MQTT-Clients vorgestellt und der folgende Inhalt umfasst: Grundkonzepte des MQTT-Protokolls Auswahl und Verwendungsbeispiele der PHPMQTT-Clientbibliothek: Verwendung des PHPMQTT-Clients zum Veröffentlichen und

Wie kann das Problem gelöst werden, dass die Baidu Netdisk-Webseite den Client nicht starten kann? Wie kann das Problem gelöst werden, dass die Baidu Netdisk-Webseite den Client nicht starten kann? Mar 13, 2024 pm 05:00 PM

Wenn viele Freunde Dateien herunterladen, durchsuchen sie zuerst die Webseite und übertragen sie dann zum Herunterladen auf den Client. Manchmal stoßen Benutzer jedoch auf das Problem, dass die Baidu Netdisk-Webseite den Client nicht starten kann. Als Reaktion auf dieses Problem hat der Herausgeber eine Lösung für Sie vorbereitet, um das Problem zu lösen, dass der Client in Not nicht auf die Baidu Netdisk-Webseite verweisen kann. Lösung: 1. Möglicherweise ist Baidu Netdisk nicht die neueste Version. Öffnen Sie den Baidu Netdisk-Client manuell, klicken Sie auf die Schaltfläche „Einstellungen“ in der oberen rechten Ecke und dann auf Versionsaktualisierung. Wenn kein Update vorhanden ist, wird die folgende Aufforderung angezeigt. Wenn es ein Update gibt, befolgen Sie bitte die Anweisungen zum Aktualisieren. 2. Das Erkennungsdienstprogramm von Baidu Cloud Disk ist möglicherweise deaktiviert. Es ist möglich, dass wir das Erkennungsdienstprogramm von Baidu Cloud Disk manuell oder mithilfe von Sicherheitssoftware deaktivieren. Bitte schauen Sie es sich an

Was ist der mobile Client? Was ist der mobile Client? Aug 16, 2023 pm 01:40 PM

Unter einem mobilen Client versteht man eine Anwendung, die auf einem Smartphone läuft und Nutzern in Form eines Native Clients oder eines Web Clients verschiedene Funktionen und Dienste zur Verfügung stellt. Mobile Clients können in zwei Formen unterteilt werden: Original-Clients und Web-Clients beziehen sich auf Anwendungen, die für bestimmte Betriebssysteme unter Verwendung bestimmter Programmiersprachen und Entwicklungstools geschrieben wurden. Der Vorteil von Web-Clients besteht darin, dass sie über eine gute plattformübergreifende Kompatibilität verfügen. , kann auf verschiedenen Geräten ohne Betriebssystemeinschränkungen ausgeführt werden, im Vergleich zum nativen Client kann es jedoch zu Leistungs- und Benutzererfahrungseinbußen beim Webclient kommen.

So schreiben Sie einen FTP-Client in PHP So schreiben Sie einen FTP-Client in PHP Aug 01, 2023 pm 07:23 PM

So schreiben Sie einen FTP-Client in PHP 1. Einführung FTP (File Transfer Protocol) ist ein Protokoll, das für die Dateiübertragung im Netzwerk verwendet wird. Bei der Webentwicklung müssen wir häufig Dateien über FTP hoch- oder herunterladen. Als beliebte serverseitige Sprache bietet PHP leistungsstarke FTP-Funktionen, die uns das einfache Schreiben von FTP-Clients ermöglichen. In diesem Artikel wird erläutert, wie Sie mit PHP einen einfachen FTP-Client schreiben, und es werden Codebeispiele bereitgestellt. 2. Stellen Sie in PHP eine Verbindung zum FTP-Server her, wir können f verwenden

Wie entferne ich das Schildlogo über dem Win11-Client? Wie entferne ich das Schildlogo über dem Win11-Client? Jan 05, 2024 am 11:21 AM

Einige Win11-Benutzer haben bemerkt, dass das Schildlogo neben einigen Softwaresymbolen auf ihren PCs erscheint. Dies schützt Computersysteme und sogar die darin gespeicherten wichtigen Informationen und Daten vor Zugriffen. Wenn es Ihnen nicht gefällt, können Sie es mit der folgenden Methode lösen. So entfernen Sie das Schildlogo auf dem Win11-Client 1. Klicken Sie mit der rechten Maustaste auf die Taskleiste des Computers und wählen Sie „Task-Manager“. 2. Klicken Sie dann oben auf „Start“. 3. Suchen Sie hier nach „Windows Defender“, klicken Sie mit der rechten Maustaste und wählen Sie „Deaktivieren“. ", dann starten Sie einfach den Computer neu.

Win11-Client und -Server unterstützen das häufig verwendete SSL nicht Win11-Client und -Server unterstützen das häufig verwendete SSL nicht Dec 29, 2023 pm 02:09 PM

Wenn weder der Client noch der Server die SSL-Verschlüsselungstechnologie implementiert, ist es sehr leicht, dass Informationen während des Übertragungsprozesses von zwischengeschalteten Angreifern gestohlen werden, was zu ernsthaften Risiken für die Datensicherheit führt. Aus diesem Grund sollten dringend entsprechende Maßnahmen ergriffen werden, um die Sicherheit sensibler Daten wirksam zu gewährleisten. Zur Vorgehensweise können Sie auf die folgenden Methoden zurückgreifen. Der Win11-Client und -Server unterstützen das häufig verwendete SSL1 nicht. Bei der Aktualisierung und Umgestaltung des Serversystems können Sie der Aktualisierung und Optimierung des Serversystems oder der Ergänzung der erforderlichen erforderlichen Komponenten Vorrang einräumen, um sicherzustellen, dass es das neueste SSL-Protokoll reibungslos unterstützt . 2. Stellen Sie SSL-Zertifikate bereit, die von renommierten Zertifizierungszentren ausgestellt wurden, und installieren Sie sie auf dem Server, um diese Funktion zu erreichen. 3. Aktivieren Sie das SSL-Protokoll

See all articles