Ich arbeite an einer Anwendung, die viele Datenbankschreibvorgänge, ungefähr 70% Einfügungen und 30% Lesevorgänge umfasst. Dieses Verhältnis würde auch Aktualisierungen einschließen, die ich als ein Lese- und ein Schreibvorgang betrachte. Durch Einfügeanweisungen fügen mehrere Clients Daten über die folgende Einfügeanweisung in die Datenbank ein:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Die Frage ist, ob ich entweder insert_delay oder mysqli_multi_query verwenden soll , da die insert-Anweisung auf dem Server ~ 100% CPU verwendet. Ich verwende die InnoDB-Engine in meiner Datenbank, sodass ein verzögertes Einfügen nicht möglich ist. Das Einfügen auf dem Server ist ~ 36k / h und 99,89% gelesen. Außerdem verwende ich die select-Anweisung, um dort sieben Mal Daten in einer einzelnen Abfrage abzurufen . Die Ausführung dieser Abfrage auf dem Server dauert 150 Sekunden. Welche Technik oder welchen Mechanismus kann ich für diese Aufgabe verwenden? Mein Serverspeicher ist 2 GB, sollte ich Speicher erweitern?. Schauen Sie sich dieses Problem an, jeder Vorschlag wird mir dankbar sein.
Tabellenstruktur:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(200) | NO | | NULL | |
| ad_name | varchar(200) | NO | | NULL | |
| ad_delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------------+--------------+------+-----+-------------------+----------------+
Mein Datenbank-Status zeigt 41.000 Einfügungen (Schreibvorgänge) an, was für meine Datenbank sehr langsam ist.
SHOW FULL PROCESSLIST
wenn es 100% CPU nimmt? Wie viele Verbindungen erlauben Sie und wie viele werden in dieser Zeit genommen?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
und SELECT VERSION();
und zeigen Sie ihre Ausgabe an.