Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL InnoDB SELECT...LIMIT 1 FOR UPDATE Vs UPDATE... LIMIT 1

Comme je n'ai pas eu de réponse, j'ai commencé à faire du benchmarking. Mes critères sont les suivants :

  • 20 000 codes pré-générés
  • Utilisation d'Apache ab commande avec 20 000 requêtes, 100 simultanées :ab -n 20000 -c 100
  • Servlet -> EJB (JPA 2.0 EclipseLink, JTA) pour effectuer la mise à jour dans la BD (comme cela se fera via une action JSF en situation réelle)
  • 2 versions du servlet, une avec l'option 1 (SELECT ... FOR UPDATE ) et une avec l'option 2 (UPDATE ... LIMIT 1)
  • Arrêté Glassfish, appuyez sur le servlet testé manuellement 5 fois pour le réchauffer, réinitialisez tout à NULL sur user_id
  • Les tests sont exécutés 3 fois chacun et une moyenne est fournie

Résultats :

SÉLECTIONNEZ ... POUR LA MISE À JOUR ; MISE À JOUR ... :

Concurrency Level:      100
Time taken for tests:   758.116 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Row updated:            20000

MISE À JOUR.... LIMITE 1 :

Concurrency Level:      100
Time taken for tests:   773.659 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Row updated:            20000

Donc, au moins sur mon système, l'option avec 2 requêtes semble plus efficace que la seule requête. Je ne m'attendais pas à ça :)