[JAVA] Benchmark durch Ändern der Eigenschaften mit MySQL Connector / J Teil 2: Stoppen Sie unnötige Gespräche

Der gestrige MySQL Casual Advent Calendar 2017 war @ tikamotos Einführung in Fensterfunktionen für MySQL / tikamoto / items / a9298442ba0ef45112fe).

Dieser Artikel ist eine Fortsetzung von Advent Calender Day 10 Benchen durch Ändern der Eigenschaften mit MySQL Connector / J Teil 1: Batch Edition.

Beim letzten Mal habe ich nur eine Änderung vorgenommen, während ich "Eigenschaften ändern" sagte. Dies ist also die eigentliche "Produktion".

Zusätzlich zu den vom Benutzer gesendeten Abfragebefehlen spricht MySQL Connector / J häufig wie ein Hausmeister wie "SELECT @@ ..." und "SET ...", versucht jedoch, so viel Verschwendung wie möglich zu vermeiden. Ist das Thema dieser Überprüfung.

Für den Bestätigungscode und die DB-Definition werden diejenigen aus Letztes Mal verwendet.

1. Zu überprüfende Eigenschaften

Von

Untersuchen der Leistungsänderung beim Ändern von der Standardeinstellung.

Es ist jedoch schwierig, alle Kombinationen auszuprobieren

Wir werden mit 4 Mustern überprüfen.

2. Überprüfungsergebnis

Das Ergebnis der Überprüfung der erforderlichen Zeit und der Anzahl der Abfragen / Befehle wird angezeigt.

2-1. Erforderliche Zeit

Überprüfungsmuster Stapelzeit erforderlich(ms) Dauer ohne Charge(ms)
rewriteBatchedStatements=truenur 11,691 50,299
rewriteBatchedStatements=true+ Kodierung 12,173 51,042
rewriteBatchedStatements=trueSET autocommitGleiche Unterdrückung 11,334 31,277
rewriteBatchedStatements=true+ Servereinstellungscache 11,911 52,384

Nur die Nicht-Batch-Dauer des dritten Musters ** "Alle Autocommit-Transaktionselemente zusätzlich zu" rewriteBatchedStatements = true "ändern" ** hatte einen deutlichen Effekt. Andere liegen im Fehlerbereich.

2-2. Anzahl der Abfragen / Befehle

Ich habe versucht, das "0 Sekunden langsame Abfrageprotokoll" zu aggregieren.

rewriteBatchedStatements=nur wahr


root@localhost [(none)] > SELECT LEFT(sql_text, 80) sqltext, COUNT(*) cnt FROM mysql.slow_log GROUP BY sql_text ORDER BY cnt DESC;
+----------------------------------------------------------------------------------+-------+
| sqltext                                                                          | cnt   |
+----------------------------------------------------------------------------------+-------+
| select @@session.tx_read_only                                                    | 59232 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       | 20151 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       |   400 |
| commit                                                                           |   120 |
| /* mysql-connector-java-5.1.44 ( Revision: b3cda4f864902ffdde495b9df93937c3e2000 |     3 |
| SET autocommit=1                                                                 |     1 |
| SET autocommit=0                                                                 |     1 |
| rollback                                                                         |     1 |
+----------------------------------------------------------------------------------+-------+
8 rows in set (18.27 sec)

rewriteBatchedStatements=true + Kodierung


root@localhost [(none)] > SELECT LEFT(sql_text, 80) sqltext, COUNT(*) cnt FROM mysql.slow_log GROUP BY sql_text ORDER BY cnt DESC;
+----------------------------------------------------------------------------------+-------+
| sqltext                                                                          | cnt   |
+----------------------------------------------------------------------------------+-------+
| select @@session.tx_read_only                                                    | 60793 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       | 20680 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       |   400 |
| commit                                                                           |   120 |
| SET autocommit=0                                                                 |     3 |
| /* mysql-connector-java-5.1.44 ( Revision: b3cda4f864902ffdde495b9df93937c3e2000 |     2 |
| Quit                                                                             |     2 |
| SET NAMES utf8                                                                   |     1 |
| SET autocommit=1                                                                 |     1 |
| select @@version_comment limit 1                                                 |     1 |
+----------------------------------------------------------------------------------+-------+
10 rows in set (18.85 sec)

rewriteBatchedStatements=true+SET_Unterdrückung wie Auto Commit


root@localhost [(none)] > SELECT LEFT(sql_text, 80) sqltext, COUNT(*) cnt FROM mysql.slow_log GROUP BY sql_text ORDER BY cnt DESC;
+----------------------------------------------------------------------------------+-------+
| sqltext                                                                          | cnt   |
+----------------------------------------------------------------------------------+-------+
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       | 21179 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       |   400 |
| commit                                                                           |   120 |
| /* mysql-connector-java-5.1.44 ( Revision: b3cda4f864902ffdde495b9df93937c3e2000 |     3 |
| SET character_set_results = NULL                                                 |     1 |
| rollback                                                                         |     1 |
| select @@version_comment limit 1                                                 |     1 |
| select USER()                                                                    |     1 |
+----------------------------------------------------------------------------------+-------+
8 rows in set (3.00 sec)

rewriteBatchedStatements=true + Servereinstellungscache


root@localhost [(none)] > SELECT LEFT(sql_text, 80) sqltext, COUNT(*) cnt FROM mysql.slow_log GROUP BY sql_text ORDER BY cnt DESC;
+----------------------------------------------------------------------------------+-------+
| sqltext                                                                          | cnt   |
+----------------------------------------------------------------------------------+-------+
| select @@session.tx_read_only                                                    | 60414 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       | 20353 |
| INSERT INTO insert_test.insert_test (memo) VALUES ('1234567890123456       |   400 |
| commit                                                                           |   120 |
| SET autocommit=0                                                                 |     1 |
| SET character_set_results = NULL                                                 |     1 |
| Quit                                                                             |     1 |
| rollback                                                                         |     1 |
+----------------------------------------------------------------------------------+-------+
8 rows in set (18.50 sec)

Es gibt zwei "INSERT INTO", die obere ist "INSERT" (nicht chargenweise) mit jeweils einer Zeile und die untere ist "INSERT" (chargenweise) mit mehreren Zeilen. Die Anzahl der Ausführungen des ersteren betrug nicht genau 20.000, aber die Anzahl der Zeilen, die "EINFÜGEN" waren, war normal (insgesamt 1,2 Millionen Zeilen).

Jedes Ergebnis scheint etwas Rauschen zu enthalten, und das Ergebnis ändert sich, wenn es sich um eine Überprüfung handelt, bei der SQL über einen längeren Zeitraum ausgeführt wird. Der Effekt ist jedoch im dritten Muster deutlich zu erkennen. Andererseits hat das 4. Muster nicht die erwarteten Ergebnisse erbracht, aber die Anzahl der Anfragen nach Informationen zu Servereinstellungen (/ * mysql-connector-java-5.1.44…) in anderen Mustern ist in erster Linie gering. Vor diesem Hintergrund ist es möglich, dass der Test nicht effektiv war, da es sich um einen Test handelte, bei dem SQL in kurzer Zeit gelöscht wurde.

3. Zusammenfassung

Die Ergebnisse waren für den Server-Cache überraschend, aber ansonsten scheint das Versiegeln des "Gesprächs" erwartungsgemäß einige Auswirkungen auf die Leistung zu haben. Wenn Sie jedoch das Verbindungspooling verwenden, kann sich das Ergebnis ändern. Wenn Sie sich in einem Cluster befinden, kann je nach angegebenem Inhalt zum Zeitpunkt des Failovers ein Problem auftreten.

Das habe ich dir gerade gesagt, und diesmal ist es vorbei.

Im nächsten Artikel (21.12.) (Https://qiita.com/hmatsu47/items/d3ce39577fb383ec21d2) werden wir die Caching-Funktion vorbereiteter Anweisungen untersuchen.

Der [MySQL Casual Adventskalender 2017] von morgen (https://qiita.com/advent-calendar/2017/mysql-casual) wird @ bringer1092s [Einfacher Zugriff auf NDB-Cluster mit Memcached](https: // qiita) sein. Es ist com / bringer1092 / items / dc16da138826134a0ff9).

Recommended Posts

Benchmark durch Ändern der Eigenschaften mit MySQL Connector / J Teil 2: Stoppen Sie unnötige Gespräche
Benchen durch Ändern der Eigenschaften mit MySQL Connector / J Teil 1: Batch
Benchen durch Ändern der Eigenschaften mit MySQL Connector / J Teil 3: Vorbereiteter Anweisungscache
Versuchen Sie, die Dokumentendatenbank mit X DevAPI mit MySQL Connector / J 8.0.15 zu betreiben