Ich habe eine Paketprotokolldatenbank, die fast nie abgefragt wird. Es muss nur schnell auf Einsätzen sein. Ich verwende InnoDB, weil ich die ACID-Konformität beibehalten möchte, da selbst der Verlust eines einzelnen Pakets unseren Kunden schaden kann. In einem Leistungsoptimierungsszenario sende ich 1.000.000 Pakete über mehrere DB-Verbindungen an den Server. Unabhängig davon, welche Einstellungen ich in my.cnf verwende, kann der mysqld-Prozess auf einem System mit 12 Kernen nicht mehr als 900% CPU verwenden. (Auf der Box läuft nichts anderes.)
Ich habe folgendes eingestellt
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
Wenn ich MyISAM verwende, kann ich alle Pakete in ca. 6 Sekunden schreiben lassen. InnoDB benötigt jedoch ungefähr 25. Kann ich MySQL dazu bringen, den Rest der Systemressourcen zu nutzen und schneller einzufügen?
Bearbeiten: Hier ist das Schema für die Tabelle:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | int(10) unsigned | YES | | NULL | |
| sb | int(10) unsigned | YES | | NULL | |
| sc | int(10) unsigned | YES | | NULL | |
| sd | int(10) unsigned | YES | | NULL | |
| sp | smallint(5) unsigned | YES | | NULL | |
| da | int(10) unsigned | YES | | NULL | |
| db | int(10) unsigned | YES | | NULL | |
| dc | int(10) unsigned | YES | | NULL | |
| dd | int(10) unsigned | YES | | NULL | |
| dp | smallint(5) unsigned | YES | | NULL | |
+-------+----------------------+------+-----+---------+-------+
edit2: Ich habe mehr Einfügungen zusammengestellt, sodass eine einzelne Abfrage nahe der maximalen Länge liegt (ca. 16.000.000 Zeichen). Die Datenbank steigt jetzt für zwei Sekunden auf 1100% und für den Rest der Zeit auf 100%. Die Gesamtzeit beträgt jetzt 21 Sekunden oder ungefähr 16% schneller als zu Beginn.
Es gibt eine Reihe von Faktoren, die sich auf die Fähigkeit auswirken, die Verwendung mehrerer Kerne zu maximieren.
Mit Tools wie SAR können Sie feststellen, ob es Engpässe gibt, die Ihre Kapazität verringern. Seien Sie gewarnt, wenn Sie einen Engpass beseitigen, wird der Engpass nur verschoben.
quelle