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.
Von
characterEncoding
Spezifikation der Codierung * Nicht leistungsfähiges Element
characterSetResults
Codierungsspezifikation für die Ergebnismenge * Wie oben
alwaysSendSetIsolation
Sende immer die Transaktionsisolationsstufe (** true
**) / not (false
)
SET autocommit = n
nur, wenn sich der Status auf der Serverseite von elideSetAutoCommits
unterscheidet
Senden (true
) / Immer senden (** false
**)
useLocalSessionState
Beurteilen Sie die Isolationsstufe der Auto-Commit-Transaktion, ohne den Server zu fragen ( true
) / not (** false
**)
cacheServerConfiguration
Cache-Servereinstellungen ( true
) / not (** false
**)
** Fett
** ist die Standardeinstellung
Untersuchen der Leistungsänderung beim Ändern von der Standardeinstellung.
Die folgenden Artikel sind hilfreich.
** Diejenige, die mit den Einstellungen von mysql Connector / J zu funktionieren scheint (Die Handfläche ist auch ein Squeeze / Mozuon Herr.) **
Es ist jedoch schwierig, alle Kombinationen auszuprobieren
rewriteBatchedStatements = true
Wir werden mit 4 Mustern überprüfen.
Das Ergebnis der Überprüfung der erforderlichen Zeit und der Anzahl der Abfragen / Befehle wird angezeigt.
Überprüfungsmuster | Stapelzeit erforderlich(ms) | Dauer ohne Charge(ms) |
---|---|---|
rewriteBatchedStatements=true nur |
11,691 | 50,299 |
rewriteBatchedStatements=true + Kodierung |
12,173 | 51,042 |
rewriteBatchedStatements=true +SET autocommit Gleiche 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.
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.
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).