Fix slow deletion on deleteClientSessionsByRealm
and deleteClientSessionsByUser
when using mysql and mariadb by converting sub-query to join
This commit is contained in:
parent
9fb9780f02
commit
43a3677cc7
4 changed files with 26 additions and 2 deletions
|
@ -30,11 +30,15 @@ import java.io.Serializable;
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
*/
|
*/
|
||||||
@NamedQueries({
|
@NamedQueries({
|
||||||
@NamedQuery(name="deleteClientSessionsByRealm", query="delete from PersistentClientSessionEntity sess where sess.userSessionId IN (select u.userSessionId from PersistentUserSessionEntity u where u.realmId = :realmId)"),
|
// sub-query with deletion performs very slow in MySQL/MariaDB databases
|
||||||
|
// It is removed from here and added manually in JpaUtils to give a native implementation if needed
|
||||||
|
// @NamedQuery(name="deleteClientSessionsByRealm", query="delete from PersistentClientSessionEntity sess where sess.userSessionId IN (select u.userSessionId from PersistentUserSessionEntity u where u.realmId = :realmId)"),
|
||||||
@NamedQuery(name="deleteClientSessionsByClient", query="delete from PersistentClientSessionEntity sess where sess.clientId = :clientId"),
|
@NamedQuery(name="deleteClientSessionsByClient", query="delete from PersistentClientSessionEntity sess where sess.clientId = :clientId"),
|
||||||
@NamedQuery(name="deleteClientSessionsByExternalClient", query="delete from PersistentClientSessionEntity sess where sess.clientStorageProvider = :clientStorageProvider and sess.externalClientId = :externalClientId"),
|
@NamedQuery(name="deleteClientSessionsByExternalClient", query="delete from PersistentClientSessionEntity sess where sess.clientStorageProvider = :clientStorageProvider and sess.externalClientId = :externalClientId"),
|
||||||
@NamedQuery(name="deleteClientSessionsByClientStorageProvider", query="delete from PersistentClientSessionEntity sess where sess.clientStorageProvider = :clientStorageProvider"),
|
@NamedQuery(name="deleteClientSessionsByClientStorageProvider", query="delete from PersistentClientSessionEntity sess where sess.clientStorageProvider = :clientStorageProvider"),
|
||||||
@NamedQuery(name="deleteClientSessionsByUser", query="delete from PersistentClientSessionEntity sess where sess.userSessionId IN (select u.userSessionId from PersistentUserSessionEntity u where u.userId = :userId)"),
|
// sub-query with deletion performs very slow in MySQL/MariaDB databases
|
||||||
|
// It is removed from here and added manually in JpaUtils to give a native implementation if needed
|
||||||
|
// @NamedQuery(name="deleteClientSessionsByUser", query="delete from PersistentClientSessionEntity sess where sess.userSessionId IN (select u.userSessionId from PersistentUserSessionEntity u where u.userId = :userId)"),
|
||||||
@NamedQuery(name="deleteClientSessionsByUserSession", query="delete from PersistentClientSessionEntity sess where sess.userSessionId = :userSessionId and sess.offline = :offline"),
|
@NamedQuery(name="deleteClientSessionsByUserSession", query="delete from PersistentClientSessionEntity sess where sess.userSessionId = :userSessionId and sess.offline = :offline"),
|
||||||
// KEYCLOAK-18842: The deleteExpiredClientSessions performs very slow in MySQL/MariaDB databases
|
// KEYCLOAK-18842: The deleteExpiredClientSessions performs very slow in MySQL/MariaDB databases
|
||||||
// It is removed from here and added manually in JpaUtils to give a native implementation if needed
|
// It is removed from here and added manually in JpaUtils to give a native implementation if needed
|
||||||
|
|
|
@ -8,3 +8,11 @@
|
||||||
deleteExpiredClientSessions=delete from PersistentClientSessionEntity sess where sess.userSessionId IN (\
|
deleteExpiredClientSessions=delete from PersistentClientSessionEntity sess where sess.userSessionId IN (\
|
||||||
select u.userSessionId from PersistentUserSessionEntity u \
|
select u.userSessionId from PersistentUserSessionEntity u \
|
||||||
where u.realmId = :realmId AND u.offline = :offline AND u.lastSessionRefresh < :lastSessionRefresh)
|
where u.realmId = :realmId AND u.offline = :offline AND u.lastSessionRefresh < :lastSessionRefresh)
|
||||||
|
|
||||||
|
deleteClientSessionsByRealm=delete from PersistentClientSessionEntity sess where sess.userSessionId IN (\
|
||||||
|
select u.userSessionId from PersistentUserSessionEntity u \
|
||||||
|
where u.realmId = :realmId)
|
||||||
|
|
||||||
|
deleteClientSessionsByUser=delete from PersistentClientSessionEntity sess where sess.userSessionId IN (\
|
||||||
|
select u.userSessionId from PersistentUserSessionEntity u \
|
||||||
|
where u.userId = :userId)
|
||||||
|
|
|
@ -7,3 +7,9 @@
|
||||||
deleteExpiredClientSessions[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
deleteExpiredClientSessions[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId and u.OFFLINE_FLAG = :offline \
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId and u.OFFLINE_FLAG = :offline \
|
||||||
and u.LAST_SESSION_REFRESH < :lastSessionRefresh
|
and u.LAST_SESSION_REFRESH < :lastSessionRefresh
|
||||||
|
|
||||||
|
deleteClientSessionsByRealm[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId
|
||||||
|
|
||||||
|
deleteClientSessionsByUser[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.USER_ID = :userId
|
||||||
|
|
|
@ -7,3 +7,9 @@
|
||||||
deleteExpiredClientSessions[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
deleteExpiredClientSessions[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId and u.OFFLINE_FLAG = :offline \
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId and u.OFFLINE_FLAG = :offline \
|
||||||
and u.LAST_SESSION_REFRESH < :lastSessionRefresh
|
and u.LAST_SESSION_REFRESH < :lastSessionRefresh
|
||||||
|
|
||||||
|
deleteClientSessionsByRealm[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.REALM_ID = :realmId
|
||||||
|
|
||||||
|
deleteClientSessionsByUser[native]=delete c from OFFLINE_CLIENT_SESSION c join OFFLINE_USER_SESSION u \
|
||||||
|
where c.USER_SESSION_ID = u.USER_SESSION_ID and u.USER_ID = :userId
|
||||||
|
|
Loading…
Reference in a new issue