[JAVA] Benchmark en modifiant les propriétés avec MySQL Connector / J Partie 2: Arrêtez les conversations inutiles

Le [MySQL Casual Advent Calendar 2017] d'hier (https://qiita.com/advent-calendar/2017/mysql-casual) était [Introduction to Window Functions for MySQL] de @ tikamoto (https://qiita.com) / tikamoto / items / a9298442ba0ef45112fe).

Cet article est une continuation de Advent Calender Day 10 Benching en changeant les propriétés avec MySQL Connector / J Partie 1: Batch Edition.

La dernière fois, j'ai dit "changer les propriétés ici et là" mais n'en ai changé qu'une, c'est donc la "production" réelle.

En plus des commandes de requête envoyées par l'utilisateur, MySQL Connector / J parle souvent comme «SELECT @@…» et «SET…», mais il essaie d'éviter de gaspiller autant que possible. Est le thème de cette vérification.

Pour le code de vérification et la définition de la base de données, ceux de Précédent seront utilisés.

1. Propriétés à vérifier

De

Pour examiner la modification des performances lors de la modification de la valeur par défaut

Cependant, il est difficile d'essayer toutes les combinaisons, donc

Nous vérifierons avec 4 modèles.

2. Résultat de la vérification

Le résultat de la vérification du temps requis et du nombre de requêtes / commandes est affiché.

2-1. Temps requis

Modèle de vérification Temps de lot requis(ms) Durée hors lot(ms)
rewriteBatchedStatements=trueseulement 11,691 50,299
rewriteBatchedStatements=true+ Encodage 12,173 51,042
rewriteBatchedStatements=trueSET autocommitSuppression égale 11,334 31,277
rewriteBatchedStatements=true+ Cache des paramètres du serveur 11,911 52,384

Seule la durée non par lots du troisième modèle ** "Modifier tous les éléments de transaction autocommit en plus de rewriteBatchedStatements = true" ** a eu un effet clair. D'autres sont dans la plage d'erreur.

2-2. Nombre de requêtes / commandes

J'ai essayé d'agréger le "journal des requêtes lentes de 0 seconde".

rewriteBatchedStatements=vrai seulement


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=vrai + encodage


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_Suppression telle que la validation automatique


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=vrai + cache des paramètres du serveur


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)

Il y a deux ʻINSERT INTO, le haut est ʻINSERT (non-batch) avec une ligne chacun, et le bas est ʻINSERT (batch) avec plusieurs lignes. Le nombre d'exécutions du premier n'était pas exactement de 20 000, mais le nombre de lignes ʻINSERT était normal (1,2 million de lignes au total).

Il semble y avoir du bruit dans chaque résultat, et le résultat changera s'il s'agit d'une vérification qui exécute SQL pendant une longue période, mais l'effet peut être clairement vu dans le troisième modèle. D'un autre côté, le 4ème modèle n'a pas produit les résultats escomptés, mais le nombre de demandes d'informations sur les paramètres du serveur (/ * mysql-connector-java-5.1.44…) dans les autres modèles est petit en premier lieu. Dans cet esprit, il est possible que le test n'ait pas été efficace car il s'agissait d'un test qui a vidé SQL en peu de temps.

3. Résumé

Les résultats étaient surprenants pour le cache du serveur, mais sinon, comme prévu, sceller le «discours» semble avoir un impact sur les performances. Toutefois, l'utilisation du regroupement de connexions peut modifier les résultats et si vous êtes dans un cluster, des problèmes peuvent survenir pendant le basculement en fonction du contenu spécifié.

Je viens de te dire ça, et cette fois c'est fini.

Dans le prochain article (21/12) (https://qiita.com/hmatsu47/items/d3ce39577fb383ec21d2), nous examinerons la fonction de mise en cache des instructions préparées.

Le [MySQL Casual Advent Calendar 2017] de demain (https://qiita.com/advent-calendar/2017/mysql-casual) sera le [Easy Access to NDB Cluster with Memcached] de @ bringer1092 (https: // qiita. C'est com / bringer1092 / items / dc16da138826134a0ff9).

Recommended Posts

Benchmark en modifiant les propriétés avec MySQL Connector / J Partie 2: Arrêtez les conversations inutiles
Benching en modifiant les propriétés avec MySQL Connector / J Partie 1: Batch
Benching en modifiant les propriétés avec MySQL Connector / J Partie 3: Cache d'instructions préparé
Essayez de faire fonctionner la base de données de documents en utilisant X DevAPI avec MySQL Connector / J 8.0.15