1 Milliarde MySQL-Anfragen in 24 Tagen? Kann etwas falsch sein?

7

Ich habe eine datenintensive Website geschrieben, aber phpmyadmin teilt mir mit, dass innerhalb von 24 Tagen 1 Milliarde Anfragen eingegangen sind. Das scheint ein bisschen hoch.

Ich weiß, dass es nicht so viele Leute gibt, die die Site nutzen, da es während der Live-Zeit keine wirklichen Daten gibt. Ich hätte Hunderttausende von den Abfragen erwartet, die ich zum Testen durchgeführt habe.

Ist etwas falsch?

Bearbeiten: Die Anzahl der Abfragen scheint mit einer Geschwindigkeit von 500 / Sekunde zu wachsen. Das ist alles sehr neu für mich, daher weiß ich nicht, ob etwas nicht stimmt.

Roviuser
quelle
1
"stimmt etwas nicht" - nur du kannst das beantworten! Hat dies Auswirkungen auf die Leistung, geht Ihnen der Speicherplatz aus, werden die Tabellen gesperrt? Es hört sich so an, als ob Ihre Frage lauten sollte: "Wie analysiere ich all diese Abfragen?". In diesem Fall würde ich eine mögliche Technik vorschlagen, um MySQL-Bin-Protokolle zu aktivieren und sie über mk-query-Digest auszuführen.
Coops
@Coops Du hast recht, da kann nur ich nicht sicher sein. Ich denke, was ich suche, sind Indikatoren dafür, dass so etwas wie Roboter oder Bots es oft treffen. Ich bin brandneu in all dem. Ich werde versuchen, mehr Informationen darüber zu finden, was Sie vorgeschlagen haben, da mir derzeit alles griechisch ist.
Roviuser
1
hast du dir nur die phpmyadmin stats angesehen? Was ist mit Ihren Webserver-Zugriffsprotokollen?
Coops
@Coops phpmyadmin Statistiken sind, wo ich die Nummer an erster Stelle bekam. Ich schaue gerade in Zugriffsprotokolle und versuche, alles herauszufinden.
Roviuser
1
Diese Frage verdient eine +1, weil dies eine dieser Fragen ist: "OMG stimmt mit MySQL nicht ... Oh, ist das alles?" Fragen, die viele im Laufe der Jahre gestellt haben und die eine klare Antwort verdient haben.
RolandoMySQLDBA

Antworten:

11

MySQL fordert intern Abfragen an. Tatsächlich ist fast alles, was Sie in MySQL tun, eine Abfrage.

Wenn Sie das allgemeine Protokoll oder das langsame Abfrageprotokoll aktivieren, wird alles aufgezeichnet, was mysqld tut.

Wenn Sie --log-queries-not-using-indexes aktiviert haben, wird alles, was keine Indizes enthält, im langsamen Protokoll gespeichert .

Angenommen, Sie führen diese Abfrage aus:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.06 sec)

Ja, DATENBANKEN ANZEIGEN; ist eine Abfrage. In der Tat, was ist das information_schema Äquivalent?

mysql> select schema_name "Database" from information_schema.schemata;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.08 sec)

Hat die Tabelle information_schema.schemata einen Index ???

mysql> show create table information_schema.schemata\G
*************************** 1. row ***************************
       Table: SCHEMATA
Create Table: CREATE TEMPORARY TABLE `SCHEMATA` (
  `CATALOG_NAME` varchar(512) NOT NULL DEFAULT '',
  `SCHEMA_NAME` varchar(64) NOT NULL DEFAULT '',
  `DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
  `DEFAULT_COLLATION_NAME` varchar(32) NOT NULL DEFAULT '',
  `SQL_PATH` varchar(512) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

Nein, tut es nicht. Also, zeigen Sie Datenbanken; würde in einem allgemeinen Protokoll und dem langsamen Protokoll landen (mit aktivierten --log-Abfragen, die keine Indizes verwenden)

Daher sind viele Operationen, von denen wir nicht glauben, dass sie eine Abfrage darstellen, möglicherweise nur eine Abfrage, aber intern in mysqld.

Wenn Sie Überwachungstools verwenden, die mit mysqld verbunden sind, wird dadurch auch die Anzahl der Abfragen erhöht.

Beispiel:

mysql> show global status like 'uptime'; select * from information_schema.global_status where variable_name='uptime';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 613   |
+---------------+-------+
1 row in set (0.00 sec)

+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| UPTIME        | 613            |
+---------------+----------------+
1 row in set (0.00 sec)

Nur die Verfügbarkeit von mysqld abzurufen, ist eine Abfrage. Wie zählt MySQL intern die ausgeführten Abfragen? Hier sind zwei Statusvariablen, die Aufschluss geben können:

  • Abfragen : Die Anzahl der vom Server ausgeführten Anweisungen. Diese Variable enthält Anweisungen, die im Gegensatz zur Variablen Questions in gespeicherten Programmen ausgeführt werden. COM_PING- oder COM_STATISTICS-Befehle werden nicht gezählt.

  • Fragen : Die Anzahl der vom Server ausgeführten Anweisungen. Dies umfasst im Gegensatz zur Variablen "Abfragen" nur Anweisungen, die von Clients an den Server gesendet werden, und keine Anweisungen, die in gespeicherten Programmen ausgeführt werden. Diese Variable zählt nicht die Befehle COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE oder COM_STMT_RESET.

Seien Sie bitte nicht so besorgt, wenn Ihr MySQL Server überwacht wird, da bei der Überwachung, die Statusvariablen aufruft, intern Abfragen ausgeführt werden, um angeforderte Daten abzurufen.

1 Milliarde in 24 Tagen ist

  • 41,7 Millionen Anfragen pro Tag
  • 1,736 Millionen Anfragen pro Stunde
  • 28.935 Anfragen pro Minute
  • 482 Abfragen pro Sekunde

Für eine MySQL-Instanz, die überwacht wird, werden diese Nummern überhaupt nicht weit hergeholt.

Wenn Sie MySQL Workbench, MySQL Administrator oder phpMyAdmin verwenden, ruft jede Seite, die diese Produkte generieren oder aktualisieren, diese kleinen Statusabfragen auf und führt schnell Zahlen aus.

RolandoMySQLDBA
quelle