Application Spring lisant environ 200 événements par minute à partir d'un sujet kafka et mettant à jour une seule table avec une clause where sur une combinaison de deux colonnes. Des index appropriés sont mis en place sur la clé composite.
Le temps de traitement pour l'insertion d'un enregistrement est presque constant (<30ms), mais pendant certaines heures, le temps de traitement atteint même 30 secondes pour une seule instruction d'insertion ou de mise à jour. Il n'y a aucune corrélation entre ces temps de traitement élevés et les pics de charge.
Jusqu'à présent, nous avons vérifié l'utilisation du processeur, la mémoire, le nombre de threads et les temps d'attente pour le verrouillage des lignes, mais il ne semble pas y avoir de problème. Veuillez nous suggérer d'autres éléments pour analyser ce problème.
Pile technologique utilisée pour les opérations de la base de données. Spring 4.3.0 Modèle Spring Jdbc. C3P0 Connection pool
Extrait de code
String stmt= //construct query;
jdbcTemplate.update(stmt);
logger.info("Insert event is successful");
Mise à jour de l'échantillon:-
UPDATE tablename
SET
column1 = 'string1',
column2 = 'string2',
column3 = 0.1,
column4 = 'string3',
column5 = 0.1,
column6 = 'string4',
column7 = to_timestamp('2020-10-21_08.00.02_861', 'YYYY-MM-DD HH24:MI:SS_FF')
WHERE
compositeKeyA = 210
AND compositeKeyB = '123';