SQL - PorcessList
This commit is contained in:
@@ -704,3 +704,128 @@ INSERT INTO isys_catg_sid_stid_list(custom_fields__data__id,isys_catg_sid_stid_l
|
||||
)ref1 offset 247 rows fetch
|
||||
next 100 rows only;
|
||||
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
# Kurze SQL-Queries in MariaDB erfassen
|
||||
|
||||
`SHOW PROCESSLIST` eignet sich **nicht**, um sehr kurze SQL-Statements zu erfassen. Diese sind häufig bereits beendet, bevor sie in der Prozessliste erscheinen.
|
||||
|
||||
## Aktuelle Konfiguration prüfen
|
||||
|
||||
### General Log
|
||||
|
||||
Prüfen, ob das General Log aktiviert ist:
|
||||
|
||||
```sql
|
||||
SHOW VARIABLES LIKE 'general_log';
|
||||
SHOW VARIABLES LIKE 'log_output';
|
||||
```
|
||||
|
||||
Oder beide Werte gemeinsam anzeigen:
|
||||
|
||||
```sql
|
||||
SHOW VARIABLES
|
||||
WHERE Variable_name IN ('general_log', 'log_output');
|
||||
```
|
||||
|
||||
Beispiel:
|
||||
|
||||
| Variable_name | Value |
|
||||
|----------------|-------|
|
||||
| general_log | ON |
|
||||
| log_output | TABLE |
|
||||
|
||||
---
|
||||
|
||||
### Performance Schema
|
||||
|
||||
Prüfen, ob das Performance Schema aktiviert ist:
|
||||
|
||||
```sql
|
||||
SHOW VARIABLES LIKE 'performance_schema';
|
||||
```
|
||||
|
||||
Zusätzlich prüfen, ob die Statement-Historie verfügbar ist:
|
||||
|
||||
```sql
|
||||
SHOW TABLES FROM performance_schema LIKE 'events_statements%';
|
||||
```
|
||||
|
||||
oder:
|
||||
|
||||
```sql
|
||||
SELECT COUNT(*)
|
||||
FROM performance_schema.events_statements_history;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## General Log aktivieren
|
||||
|
||||
> **Hinweis:** Das General Log erzeugt zusätzlichen Overhead und sollte nur für eine kurzfristige Analyse aktiviert werden.
|
||||
|
||||
```sql
|
||||
SET GLOBAL general_log = ON;
|
||||
SET GLOBAL log_output = 'TABLE';
|
||||
```
|
||||
|
||||
Abfragen anzeigen:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
event_time,
|
||||
user_host,
|
||||
argument
|
||||
FROM mysql.general_log
|
||||
WHERE command_type = 'Query'
|
||||
ORDER BY event_time DESC
|
||||
LIMIT 100;
|
||||
```
|
||||
|
||||
General Log wieder deaktivieren:
|
||||
|
||||
```sql
|
||||
SET GLOBAL general_log = OFF;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Performance Schema verwenden (empfohlen)
|
||||
|
||||
Falls das Performance Schema aktiviert ist, können ausgeführte Statements ohne das General Log analysiert werden:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
SQL_TEXT,
|
||||
TIMER_WAIT / 1000000000 AS duration_ms
|
||||
FROM performance_schema.events_statements_history
|
||||
ORDER BY EVENT_ID DESC;
|
||||
```
|
||||
|
||||
Je nach Konfiguration kann auch die Tabelle `events_statements_history_long` verwendet werden.
|
||||
|
||||
---
|
||||
|
||||
## Slow Query Log
|
||||
|
||||
Das Slow Query Log ist für sehr kurze Queries normalerweise ungeeignet. Es kann zwar so konfiguriert werden, dass alle Abfragen protokolliert werden:
|
||||
|
||||
```sql
|
||||
SET GLOBAL long_query_time = 0;
|
||||
```
|
||||
|
||||
Für eine kurzfristige Analyse ist jedoch das **General Log** meist die bessere Wahl.
|
||||
|
||||
---
|
||||
|
||||
## Empfehlung
|
||||
|
||||
| Ziel | Empfehlung |
|
||||
|------|------------|
|
||||
| Alle SQL-Statements für kurze Zeit mitschneiden | General Log |
|
||||
| Regelmäßige Analyse mit geringem Overhead | Performance Schema |
|
||||
| Aktive, aktuell laufende Queries anzeigen | `SHOW FULL PROCESSLIST` |
|
||||
|
||||
> **Fazit:** Für sehr kurze Queries ist `SHOW PROCESSLIST` ungeeignet. Verwende stattdessen das **General Log** oder – falls verfügbar – das **Performance Schema**.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user