Heim Datenbank MySQL-Tutorial MySQL连接hang住问题分析

MySQL连接hang住问题分析

Jun 07, 2016 pm 05:28 PM
mysql连接

Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象,挂住超时mysql

【问题现象】:
 
1. Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象
 
2. 挂住超时mysql_real_connect返回后报错如下:Lostconnection to MySQL server at 'reading initial communication packet', systemerror: 104,返错后线程号没变,会继续往下运行
 
【初步原因分析】:
 
1.      mysql_real_connect连接数据库, 没有显式调用超时时间,重连什么的,,使用的默认值:
 
2.      昨天拿c  mysqlclient的源码进行了分析测试,发现以下几个配置项的默认值(如果调mysql_real_connect之前没有设置任何属性,mysql client端的机器上/etc/my.cnf也没有配置)如下:
 
connect_timeout = 0
 
read_timeout = 0
 
write_timeout = 0
 
reconnect = 0  //1表示自动重连
 
所以这些参数是需要显式设置的。

{net = {vio = 0x7b8f150, options = {connect_timeout = 0, read_timeout = 0, write_timeout = 0,}
 
3.      Mysqlclient中报错的代码如下(与服务端连接建立后,读解析包的时候失败了):

 

  /*
 
    Part 1: Connection established, read and parse first packet
 
  */
 
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
 
  {
 
    if (mysql->net.last_errno == CR_SERVER_LOST)
 
      set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
 
                              ER(CR_SERVER_LOST_EXTENDED),
 
                              "reading initial communication packet",
 
                              errno);
 
        fprintf(myfp,"%s after cli_safe_read packet_error \n",cur_time());
 
    goto error;
 
  }
 

线程阻塞时抓到的堆栈如下:


#0  0x0000003ebe0c5f3b in read () from /lib64/libc.so.6
 
#1  0x00007f240dd91430 in vio_read () from /usr/lib/libmysql.so.16.0.0
 
#2  0x00007f240dcf9b05 in my_real_read () from /usr/lib/libmysql.so.16.0.0
 
#3  0x00007f240dcf9e38 in my_net_read () from /usr/lib/libmysql.so.16.0.0
 
#4  0x00007f240dcec396 in cli_safe_read () from /usr/lib/libmysql.so.16.0.0
 
#5  0x00007f240dceea17 in mysql_real_connect () from /usr/lib/libmysql.so.16.0.0

linux

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)

So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank - So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank - So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank Mar 04, 2024 pm 07:30 PM

Der Artikel in diesem Kapitel befasst sich mit der NavicatforMySQL-Software. Wissen Sie, wie NavicatforMySQL eine Verbindung zur lokalen MySQL-Datenbank herstellt? Schau mal. Öffnen Sie den Computer, auf dem Navicatformysql installiert wurde, und klicken Sie dann auf die Option „Verbinden“ in der oberen rechten Ecke. Im Popup-Fenster für neue Verbindungen können Sie den Verbindungsnamen eingeben und den Hostnamen auf die lokale Datenbank festlegen Verwenden Sie „localhost“. Lassen Sie das Passwort einfach leer. Wenn dann die Verbindung zur praktischen Datenbank erfolgreich ist,

So lösen Sie das Problem der langsamen MySQL-Verbindung in Docker So lösen Sie das Problem der langsamen MySQL-Verbindung in Docker Feb 19, 2024 pm 03:09 PM

Nachdem ich Docker zum Bereitstellen von MySQL verwendet habe, ist die Verbindungsgeschwindigkeit langsam. Durch Online-Suchen habe ich herausgefunden, dass das Problem möglicherweise durch das Fehlen von Modulen wie der DNS-Auflösung während der minimalen Containerinstallation verursacht wird. Daher tritt beim Herstellen einer Verbindung ein Problem mit einer sehr langsamen Verbindung auf. Wir fügen diesen Satz „skip-name-resolve“ direkt hinzu und ändern die Konfiguration von „docker-compose.yml“ wie folgt: Version: „3“ -Dienste: mysql: image : mysql: Latestcontainer_name: mysql_composerestart: Alwaysports:-3306:3306command:--default-a

Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Mar 16, 2024 am 10:09 AM

Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Mit der kontinuierlichen Entwicklung von Internetanwendungen sind Datenbanken zu einem wichtigen Datenspeicher- und Verwaltungstool zur Unterstützung von Anwendungssystemen geworden. Im Datenbanksystem ist die Anzahl der Verbindungen ein wichtiges Konzept, das in direktem Zusammenhang mit der Leistung und Stabilität des Datenbanksystems steht. Dieser Artikel beginnt aus der Perspektive der MySQL-Datenbank, untersucht die Auswirkungen der Anzahl von Verbindungen auf die Datenbankleistung und analysiert sie anhand spezifischer Codebeispiele. 1. Wie viele Verbindungen gibt es? Die Anzahl der Verbindungen bezieht sich auf die Anzahl der Client-Verbindungen, die das Datenbanksystem gleichzeitig unterstützt. Es kann auch verwaltet werden

Optimierung der hohen Parallelitätsleistung von MySQL-Verbindungen in Python-Programmen Optimierung der hohen Parallelitätsleistung von MySQL-Verbindungen in Python-Programmen Jun 30, 2023 pm 12:27 PM

Wie kann die hohe Parallelitätsleistung von MySQL-Verbindungen in einem Python-Programm optimiert werden? Zusammenfassung: MySQL ist eine relationale Datenbank mit hoher Leistung. Bei hoher Parallelität können jedoch die Verbindungs- und Abfragevorgänge von Python-Programmen die Leistung des Systems beeinträchtigen. In diesem Artikel werden einige Optimierungstechniken vorgestellt, um die Leistung von Python-Programmen und MySQL-Datenbanken zu verbessern. Verbindungspool verwenden: In Situationen mit hoher Parallelität verbraucht das häufige Erstellen und Schließen von Datenbankverbindungen viele Systemressourcen. Daher kann die Verwendung von Verbindungspooling effektiv reduziert werden

Wie teste ich die hohe Parallelitätsleistung von MySQL-Verbindungen in der Befehlszeile? Wie teste ich die hohe Parallelitätsleistung von MySQL-Verbindungen in der Befehlszeile? Jun 30, 2023 pm 07:25 PM

Wie teste ich die hohe Parallelitätsleistung von MySQL-Verbindungen über die Befehlszeile? Mit der kontinuierlichen Popularisierung von Internetanwendungen ist die hohe Parallelitätsleistung von Datenbanken zu einem Schwerpunkt vieler Anforderungen geworden. Als beliebte Open-Source-Datenbank hat MySQL auch aufgrund seiner hohen Parallelitätsleistung große Aufmerksamkeit erhalten. Bevor wir die hohe Parallelitätsleistung von MySQL-Verbindungen testen, müssen wir einige Konzepte und Vorbereitungen klären: Gleichzeitige Verbindungen: bezieht sich darauf, dass mehrere Clients gleichzeitig Verbindungen mit der Datenbank herstellen und diese Verbindungen gleichzeitig Datenbankoperationen ausführen. Verbindungslimit: MySQ

Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Jun 29, 2023 am 11:36 AM

Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Bei Verwendung der MySQL-Datenbank kommt es manchmal aus verschiedenen Gründen zu einem abnormalen Abbruch der Datenbankverbindung. Dies führt nicht nur zu einer Unterbrechung des aktuellen Vorgangs, sondern kann auch zum Verlust der übermittelten Daten führen. Um dieses Problem zu lösen, müssen wir einige Maßnahmen ergreifen, um den Datenverlust zu bewältigen, nachdem die MySQL-Verbindung abnormal beendet wurde. Zunächst müssen wir klarstellen: MySQL ist eine Datenbank mit Transaktionsunterstützung. Eine Transaktion ist eine Reihe von Vorgängen, die entweder alle übermittelt werden.

Die MySQL-Verbindung wurde zurückgesetzt. Wie gehe ich damit um? Die MySQL-Verbindung wurde zurückgesetzt. Wie gehe ich damit um? Jul 01, 2023 pm 12:13 PM

Die MySQL-Verbindung wurde zurückgesetzt. Wie gehe ich damit um? MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem, das häufig in Projekten unterschiedlicher Größe eingesetzt wird. Bei der Verwendung von MySQL kommt es jedoch manchmal vor, dass die Verbindung zurückgesetzt wird, was zu Problemen für unser Projekt führen kann. In diesem Artikel erfahren Sie, warum die MySQL-Verbindung zurückgesetzt wird und wie Sie mit diesem Problem umgehen können. Das Zurücksetzen der Verbindung wird normalerweise durch folgende Gründe verursacht: 1. Netzwerkproblem: Wenn die Netzwerkverbindung zwischen dem Client und dem mit MySQL verbundenen Server instabil ist,

Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Jun 29, 2023 am 11:26 AM

Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Bei der Verwendung der MySQL-Datenbank kommt es häufig zu Situationen, in denen die Verbindung zurückgesetzt wird, was zu einer Unterbrechung der Datenbankverbindung führt, was für die Anwendung sehr unzuverlässig ist. Um dieses Problem zu lösen, können Sie den Zustand des Verbindungspools sicherstellen, indem Sie die Verbindung am Leben halten. Unter Verbindungs-Keep-Alive versteht man das Senden einer bestimmten Abfrageanweisung, wenn die Verbindung inaktiv ist, um die Verbindung aktiv zu halten und zu verhindern, dass die Verbindung vom Server aktiv geschlossen wird. Diese spezifische Abfrageanweisung kann eine einfache SE sein

See all articles