InfraGuard

Service ▸ Datenbank

Verbindet sich direkt mit registrierten Datenbanken und überwacht mit SHOW GLOBAL STATUS + information_schema die Live-Last (Nebenläufigkeit, Durchsatz) sowie die Schemastruktur.

Überblick — was der Bildschirm leistet

Service ▸ Datenbank (/service/database) ist ein Live-Monitoring-Bildschirm, der sich direkt mit den registrierten Datenbank-Collectors (access=database) verbindet, um Lastmetriken zu sammeln und die Schemastruktur zu analysieren. Jede Datenbank wird als eine Karte dargestellt, und jede Karte zeigt auf einen Blick zwei Lastachsen.

Das Datenbank-Monitoring ist um zwei Lastachsen herum aufgebaut:

Achse Frage Wichtige Metriken
① Nebenläufigkeitslast Wie viel staut sich gerade auf? threads_running, Verbindungssättigung (conn_pct), wartende Abfragen (waiting)
② Durchsatz und Ineffizienz Wie viel Arbeit, und wie viel Verschwendung? QPS (Δquestions/Δt), Slow-Query-Rate (Δslow_queries/Δt)

Darüber hinaus bietet der Bildschirm eine Schemaanalyse (Gesamtgröße · größte Datenbanken · größte Tabellen · Engine-Verteilung), Effizienzwerte (Cache-Trefferquote des Buffer Pools · Indexnutzung) sowie einen Block zur InnoDB-Speicherverwaltung (Flush der Dirty Pages · Checkpoint).

Dieser Bildschirm installiert keinen Agenten auf der Ziel-Datenbank. Die InfraGuard-Anwendung verbindet sich lediglich mit den hinterlegten Zugangsdaten zur entfernten MySQL/MariaDB und setzt Abfragen mit SHOW GLOBAL STATUS / information_schema ab.

Wann Sie ihn verwenden

Aufbau

KPIs am oberen Rand

KPI Bedeutung
Anzahl DB Gesamtzahl der registrierten access=database-Collectors
Up / Degraded / Down Aggregat des Kartenstatus (up/degraded/down)
Gesamt-QPS Summe der QPS über alle Karten
Verbindungen Summe von threads_connected über alle Karten

Kartenkopf

① Nebenläufigkeitslast

② Durchsatz und Ineffizienz

Kartenfuß — Effizienz · Sperren

Metrik Formel Bewertung
Cache-Trefferquote 1 − Δinnodb_buffer_pool_reads / Δinnodb_buffer_pool_read_requests Ausgezeichnet ≥ 99,5 % · Gut ≥ 98 % · Ausreichend ≥ 90 %
Indexnutzung Δhandler_read_key / (Δhandler_read_key + Δhandler_read_rnd_next) Ausgezeichnet ≥ 90 % · Gut ≥ 70 % · Ausreichend ≥ 40 %
lock innodb_row_lock_time_avg (durchschnittliche Wartezeit auf Zeilensperren, ms) Je niedriger, desto besser

Jede Metrikbezeichnung (cache · index · lock · checkpoint) trägt ein Erklär-Popover, das Ursachen und Gegenmaßnahmen beschreibt (z. B. innodb_buffer_pool_size erhöhen, Covering-Indizes verwenden, Gap Locks vermeiden).

Schemaanalyse (einklappbar)

Standardmäßig eingeklappt; mit [Aufklappen] öffnen. Aggregiert aus information_schema.tables, zeigt sie Gesamtgröße · Anzahl der Tabellen · Anzahl der Schemas · die 8 größten Schemas nach Größe · die 14 größten Tabellen nach Größe · Engine-Verteilung.

Die Schemaanalyse ist auf dem Server von Natur aus eine langsame Abfrage (gemessen ca. 3,5 s) und wird deshalb mit einem 30-minütigen Langzeit-Cache umgangen. Der Scheduler (infr:collect-db) wärmt den Cache vor, sodass Web-Anfragen ihn immer treffen. Ist der Cache leer, bleibt der Abschnitt kurz verborgen und erscheint beim nächsten Polling.

InnoDB-Speicherverwaltung (Flush der Dirty Pages)

Anordnung der Karten

Das Kartenraster unterstützt Neuanordnung per Ziehen (SortableJS · Reihenfolge in localStorage gespeichert) mit Row-Span-Masonry. Der Bildschirm aktualisiert sich per 30-Sekunden-Polling.

Vorgehen

  1. Registrieren Sie zunächst unter Verwaltung ▸ Collectors einen Collector mit access=database. Geben Sie host/port/database/username samt Passwort ein (auf dem Collector Crypt-verschlüsselt gespeichert), oder setzen Sie cred_ref = env:PREFIX, um einen vorhandenen Zugangsdatensatz aus .env wiederzuverwenden.
  2. Öffnen Sie /service/database; die registrierten Datenbanken werden als Karten aufgelistet. Beim Aufruf wird, falls die letzte Messung älter als 60 Sekunden ist, sofort eine einmalige Messung (ensureFresh) durchgeführt.
  3. Erkennen Sie die problematische Datenbank am Status-Badge im Kopf und grenzen Sie die Ursache dann über die beiden Lastachsen (Nebenläufigkeit / Durchsatz) ein.
  4. Klappen Sie die Schemaanalyse auf, um die größten Schemas und Tabellen zu prüfen (das Masonry-Layout ordnet sich bei Höhenänderung automatisch neu an).
  5. Ziehen Sie Karten, um die für Sie wichtigen Datenbanken nach oben zu holen (die Reihenfolge wird im Browser gespeichert).

Zugangsdaten über cred_ref wiederverwenden

Mit cred_ref = env:PREFIX werden die folgenden Schlüssel aus .env gelesen, sodass kein Geheimnis in der Datenbank gespeichert wird:

Zum Beispiel: env:STATS_DB → Server blue, env:STATS_GLORY_DB → Server glory.

So sehen Sie serverweit wartende Abfragen

Um waiting serverweit zu aggregieren, benötigt das Monitoring-Konto das Recht PROCESS; andernfalls werden nur seine eigenen Verbindungen gezählt. Ein Monitoring-Konto mit minimalen Rechten:

CREATE USER 'infra_monitor'@'%' IDENTIFIED BY 'YOUR_DB_PASSWORD';
GRANT PROCESS, SELECT ON *.* TO 'infra_monitor'@'%';
FLUSH PRIVILEGES;

Die Entscheidung über den Geltungsbereich (ob PROCESS vorliegt) ist pro Konto fest und wird daher 1 Stunde lang zwischengespeichert. Wenn Sie das Recht später vergeben, wirkt es innerhalb einer Stunde (für sofortige Wirkung den Cache leeren).

Datenquellen

Ursprungsabfragen (auf der entfernten Datenbank ausgeführt)

Abfrage Zweck
SHOW GLOBAL STATUS Alle Zähler zu threads · questions · slow_queries · bytes · Buffer Pool · handler · InnoDB
SELECT @@GLOBAL.max_connections usw. max_connections, InnoDB-Flush-Einstellungen (1 h Cache)
information_schema.processlist Anzahl wartender Abfragen und Entscheidung über den Geltungsbereich
information_schema.tables Schemaanalyse (30-Minuten-Cache)
SHOW ENGINE INNODB STATUS Checkpoint-Alter (LSN − letzter Checkpoint · erfordert PROCESS)
SHOW GRANTS FOR CURRENT_USER() Erkennung des Rechts PROCESS (Geltungsbereich)

Speichertabelle

Die gemessenen Daten werden in die Zeitreihe infr_db_metric geschrieben (Migration 000681). Auch die kumulativen Zähler (questions/slow_queries/bytes_*) werden gespeichert, damit die nächste Messung QPS · Slow-Query-Rate · Effizienzwerte per Delta berechnen kann.

infr_db_metric
  collector_id  host  sampled_at  uptime_sec
  threads_connected/running/cached  max_connections  conn_pct
  waiting  waiting_scope
  questions  slow_queries  qps  slow_qps
  bytes_received/sent  recv_bps/sent_bps  innodb_row_lock_waits
  ok  message  raw(json: efficiency + InnoDB memory-management derivations)

Keine Verbindungslecks (die Lehre aus [1040]). Jede Messung baut eine Laufzeitverbindung auf und gibt sie im finally sofort mit DB::purge frei. Ein PDO-Timeout (standardmäßig 5 s) verhindert, dass Web-Anfragen und der Scheduler an einer langsamen Gegenstelle hängen bleiben. Bricht diese Disziplin, ist max_connections der gemeinsam genutzten MySQL erschöpft und selbst die Produktion ist betroffen.

Erfassungsplan · Gating

Die Zeitreihe wird vom Artisan-Befehl infr:collect-db gefüllt. Er läuft einmal und beendet sich (kein Daemon); der Scheduler ruft ihn jede Minute auf.

# Sofort eine einzelne Messung für einen Collector vornehmen (Gate umgehen)
php artisan infr:collect-db --key=db@blue --force

Die Betriebsrichtlinie (Verwaltung ▸ Betriebsrichtlinie · OpsPolicy) steuert die geplanten Läufe:

Einstellung Standard Bedeutung
db_collect_mode economy economy = nur erfassen, wenn ein Konsolenbenutzer (Presence) vorhanden ist · always = durchgehend erfassen
db_collect_interval_sec 60 Erfassungsintervall (s). Der Tick erfolgt jede Minute, maßgeblich ist aber dieser Wert

Schwellenwerte für degraded/down

DbCollectorService::statusOf entscheidet den Status über OpsPolicy::dbThresholds().

Grund Bedingung Standardschwelle
conn_saturation conn_pct ≥ 80 %
high_concurrency threads_running ≥ 40
query_backlog waiting ≥ 5
slow_query_rate slow_qps ≥ 1/s
down Keine Messung / ok=false, oder letzte Messung älter als 5 Minuten (stale) —

Liegt irgendein Grund vor → degraded; liegt keiner vor → up.

Zugriff

Fehlersuche und FAQ

Eine Karte zeigt „down“

QPS / Slow-Query-Rate / Effizienzwerte zeigen „—“

Abgeleitete Werte werden als Delta gegenüber der vorherigen erfolgreichen Messung berechnet. Bei der ersten Messung, nach einem Neustart der Datenbank (uptime verringert → Zähler zurückgesetzt) oder wenn ein Zähler zurückspringt, ist der Wert nicht vertrauenswürdig und bleibt null (—). Ab der zweiten Messung erscheint er normal.

Wartende Abfragen zeigen „nur eigene Verbindung“

Dem Monitoring-Konto fehlt das globale Recht PROCESS, daher sind in information_schema.processlist nur seine eigenen Verbindungen sichtbar. Vergeben Sie PROCESS mit dem SQL unter So sehen Sie serverweit wartende Abfragen (Wirkung innerhalb einer Stunde, sobald der Cache des Geltungsbereichs abläuft).

Der Abschnitt Speicherverwaltung / Checkpoint ist leer

Die Schemaanalyse blinkt kurz leer und erscheint dann

analysisCached ist eine reine Cache-Abfrage. Beim ersten Aufruf ist der Cache leer und der Abschnitt verborgen; nachdem der Scheduler ihn vorgewärmt hat, erscheint er beim nächsten 30-Sekunden-Polling. Fehlschläge werden nur 30 s zwischengespeichert (Erfolge 30 Minuten), damit ein vorübergehender Fehler nicht lange festgehalten wird.

Verwandt

데이터베이스 관제 — 연결 포화·QPS·슬로우 쿼리
데이터베이스 관제 — 연결 포화·QPS·슬로우 쿼리