Quand j'exécuter:lors de l'utilisation Hibernate, Postgres et Guice Fournisseur
select * from pg_stat_activity where state ~ 'idle in transact'
Je reçois nombre inapproprié de lignes avec l'état "inactif dans la transaction. Certains d'entre eux tournent au ralenti pendant quelques jours. La plupart d'entre eux, sont les mêmes requête simple select
qui sont exécutés d'une classe de service (Mise en veille prolongée 5.1.0.Final, Guice 4.1.0):
public class FirebaseServiceImpl implements FirebaseService {
@Inject
private Provider<FirebaseKeyDAO> firebaseKeyDAO;
@Override
public void sendNotification(User recipient) {
List<FirebaseKey> firebaseKeys = firebaseKeyDAO.get().findByUserId(recipient.getId());
final ExecutorService notificationsPool = Executors.newFixedThreadPool(3);
for (FirebaseKey firebaseKey : firebaseKeys)
notificationsPool.execute(new Runnable() {
@Override
public void run() {
sendNotification(new FirebaseNotification(firebaseKey.getFirebaseKey(), "example");
}
});
notificationsPool.shutdown();
}
}
méthode DAO:
@Override
@SuppressWarnings("unchecked")
public List<FirebaseKey> findByUserId(Long userId) {
Criteria criteria = getSession().createCriteria(type);
criteria.add(Restrictions.eq("userId", userId));
return criteria.list();
}
Pourquoi est-ce ça arrive? Comment éviter cela?
MISE À JOUR
transactions ne sont pas commited lorsque j'utilise Guice fournisseur exampleDAO.get()
dans un thread séparé:
@Inject
Provider<ExampleDAO> exampleDAO;
Parfois, j'ai beaucoup de requêtes longues 'COMMIT' avec l'état 'idle'. Pourquoi cela arrive-t-il? Cela vaut-il la peine d'exécuter 'echo never>/sys/kernel/mm/redhat_transparent_hugepage/enabled' comme il est mentionné sur https://dba.stackexchange.com/questions/32890/postgresql-pg-stat-activity-shows-commit? – Justas
inactif signifie que la connexion persiste à ne rien faire après validation. colonne de requête change lorsque la requête change - la dernière requête exécutée est affichée ... –
Si l'application atteint la limite de hibernate.c3p0.max_size avec des validations d'inactivité, elle cesse de fonctionner avec DB. – Justas