In PHP ist Connect_errno eine Eigenschaft, die von der MySQLI -Erweiterung bereitgestellt wird, die die Anzahl der Fehler erhält, die bei der Verbindung zu einer MySQL -Datenbank auftreten. Wenn wir MySQLI_Connect () oder MySQLi :: __ Construct () nennen, um eine Datenbankverbindung herzustellen, weist Connect_errno den Wert automatisch zu. Wenn die Verbindung erfolgreich ist, beträgt der Wert von Connect_errno 0; Wenn ein Verbindungsfehler auftritt, gibt Connect_errno den entsprechenden Fehlercode zurück.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Stellen Sie erfolgreich eine Verbindung zur Datenbank her!"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Wenn die Datenbankverbindung im obigen Code erfolgreich ist, beträgt $ mysqli-> connect_errno 0. Wenn die Verbindung ausfällt, gibt $ mysqli-> connect_errno den spezifischen Fehlercode zurück.
Es ist zu beachten, dass Connect_errno nur Informationen liefert, wenn Probleme während des Datenbankverbindungsprozesses auftreten, beispielsweise:
Der Datenbankserver ist nicht erreichbar
Falscher Benutzername oder Passwort
Die Datenbank existiert nicht
Connect_errno hilft uns jedoch nicht direkt, zu bestimmen, ob die Datenbanklast zu hoch ist. Die Last einer Datenbank zeigt sich normalerweise als langsame Reaktionszeit, Erschöpfung von Verbindungspools oder übermäßige Serverressourcen (z. B. CPU, Speicher). Diese Fälle können nicht von Connect_errno erkannt werden.
Um die Last der Datenbank zu überwachen, müssen wir andere Mittel verwenden, z. B.:
MySQL bietet einige Systemvariablen und -befehle, mit denen wir den Laststatus der Datenbank überwachen können:
Status anzeigen : Dieser Befehl kann den laufenden Status von MySQL einschließlich der Anzahl der Verbindungen, Abfragezeiten, langsamer Abfrage usw. anzeigen.
Variablen anzeigen : Überprüfen Sie die Parameter der MySQL -Konfiguration, einschließlich der maximalen Anzahl von Verbindungen, Speicherverbrauch usw.
ProcessList anzeigen : Zeigt die aktuell ausführende Abfrage an, die uns helfen kann, festzustellen, ob es langlebige Abfragen gibt, die übermäßige Systemlast verursachen.
<span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Threads_connected'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Questions'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> PROCESSLIST;
</span></span>
Diese Befehle können uns helfen, die Anzahl der Datenbankverbindungen und Abfragebedingungen in Echtzeit zu überwachen und so zu bestimmen, ob die Datenbank überlastet ist.
Verwenden Sie professionelle Datenbanküberwachungstools wie Prometheus , Grafana , Percona Überwachung und Verwaltung (PMM) , um den Laststatus der Datenbank eingehender zu analysieren. Diese Tools können detaillierte Diagramme und Alarmfunktionen bereitstellen, sodass Sie wissen, wann die Datenbanklast zu hoch ist, und rechtzeitig Maßnahmen ergreifen.
Das Aktivieren von langsamen Abfrageprotokollen kann uns dabei helfen, zu ermitteln, welche Abfragen viel Zeit verbrauchen, was zu Überladung der Datenbank führen kann. Sie können langsame Abfrageprotokolle mit der folgenden MySQL -Konfiguration aktivieren:
<span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> slow_query_log </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">'ON'</span></span><span>;
</span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> long_query_time </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">-- Setzen Sie die Abfrage überschreiten 2 Die Abfrage in Sekunden ist eine langsame Frage</span></span><span>
</span></span>
Langsame Abfrageprotokolle können Ihnen dabei helfen, weniger effiziente Abfragen in der Datenbank zu ermitteln, wodurch diese Abfragen oder Datenbankstrukturen optimiert und die Datenbanklast reduziert werden.
Wenn die Überwachung feststellt, dass die Datenbanklast zu hoch ist, können die folgenden Methoden angenommen werden, um das Problem zu optimieren und zu lösen:
Stellen Sie die Effizienz von Abfrageanweisungen sicher, indem Sie langsame Abfrageprotokolle analysieren, komplexe und zeitaufwändige SQL-Abfragen optimieren. Verwenden Sie beispielsweise entsprechende Indizes, um die volle Tabelle zu scannen und Paging -Abfragen zu verwenden, um die Datenmenge pro Abfrage zu reduzieren.
Wenn die Anzahl der Datenbankverbindungen der Grund für die hohe Last ist, können Sie in Betracht ziehen, die Größe des Datenbankverbindungspools zu erhöhen, um den Verbindungsaufwand bei jedem Anfordern der Datenbank zu reduzieren.
Bei hoher Parallelität können Anfragen und Schreibanforderungen an verschiedene Datenbankserver durch Lese- und Schreibtrennung der Datenbank zugewiesen werden, wodurch die Last auf einem einzelnen Datenbankserver verringert wird.
Für sehr große Datenbanken können Sie die horizontale Aufteilung der Datenbank in Betracht ziehen, die Daten in mehrere Datenbankinstanzen verteilen und die Last weiter teilen.