Hallo zusammen,
wir haben seit dem Update auf die Version 19.1 bei einigen Usern große Performanceprobleme beim Laden des Kalenders (besonders nach dem ersten Login am Tag). Folgender Select ist nach dem Neustart der MariaDB reproduzierbar langsam (Berechnung dauert > 25s), von der Festplatte wird nichts gelesen, alles ist im Filesystemcache (Erlärungen siehe weiter unten):
(SELECT egw_cal_repeats.recur_type,egw_cal_repeats.recur_interval,egw_cal_repeats.recur_data,range_end - 1 AS recur_enddate,egw_cal.cal_id,cal_uid,cal_owner,cal_category,cal_modified,cal_priority,cal_public,cal_title,cal_description,cal_location,cal_reference,cal_modifier,cal_non_blocking,cal_special,cal_etag,cal_creator,cal_created,cal_recurrence,tz_id,cal_deleted,caldav_name,range_start,range_end,cal_start,cal_end,egw_cal_user.cal_recur_date,NULL AS participants,NULL AS icons FROM (SELECT * FROM egw_cal WHERE cal_deleted IS NULL AND (range_end IS NULL OR range_end>1582153200)) egw_cal JOIN egw_cal_dates ON egw_cal.cal_id=egw_cal_dates.cal_id JOIN egw_cal_user ON egw_cal.cal_id=egw_cal_user.cal_id LEFT JOIN egw_cal_repeats ON egw_cal.cal_id=egw_cal_repeats.cal_id LEFT JOIN egw_cal_user rejected_by_user ON egw_cal.cal_id=rejected_by_user.cal_id AND rejected_by_user.cal_user_type='u' AND rejected_by_user.cal_user_id='139' AND (recur_type IS NULL AND rejected_by_user.cal_recur_date=0 OR cal_start=rejected_by_user.cal_recur_date) WHERE cal_deleted IS NULL AND egw_cal_user.cal_status NOT IN ('R','X','E') AND 1582153200 < cal_end AND (rejected_by_user.cal_status IS NULL OR rejected_by_user.cal_status NOT IN ('R','X')) AND egw_cal_user.cal_user_type='u' AND egw_cal_user.cal_user_id IN ('139','-40','-24','-27','-34','-47','-73','-46','-82','-74','-42','-81','-41') AND recur_type IS NULL AND egw_cal_user.cal_recur_date=0)
UNION
(SELECT egw_cal_repeats.recur_type,egw_cal_repeats.recur_interval,egw_cal_repeats.recur_data,range_end - 1 AS recur_enddate,egw_cal.cal_id,cal_uid,cal_owner,cal_category,cal_modified,cal_priority,cal_public,cal_title,cal_description,cal_location,cal_reference,cal_modifier,cal_non_blocking,cal_special,cal_etag,cal_creator,cal_created,cal_recurrence,tz_id,cal_deleted,caldav_name,range_start,range_end,cal_start,cal_end,egw_cal_user.cal_recur_date,NULL AS participants,NULL AS icons
FROM (SELECT * FROM egw_cal WHERE cal_deleted IS NULL AND (range_end IS NULL OR range_end>1582153200)) egw_cal
JOIN egw_cal_dates
ON egw_cal.cal_id=egw_cal_dates.cal_id
JOIN egw_cal_user
ON egw_cal.cal_id=egw_cal_user.cal_id
LEFT JOIN egw_cal_repeats
ON egw_cal.cal_id=egw_cal_repeats.cal_id
LEFT JOIN egw_cal_user rejected_by_user ON
egw_cal.cal_id=rejected_by_user.cal_id
AND rejected_by_user.cal_user_type='u'
AND rejected_by_user.cal_user_id='139'
AND (recur_type IS NULL AND rejected_by_user.cal_recur_date=0 OR cal_start=rejected_by_user.cal_recur_date)
WHERE cal_deleted IS NULL
AND egw_cal_user.cal_status NOT IN ('R','X','E')
AND 1582153200 < cal_end
AND (rejected_by_user.cal_status IS NULL OR rejected_by_user.cal_status NOT IN ('R','X'))
AND egw_cal_user.cal_user_type='u'
AND egw_cal_user.cal_user_id IN ('139','-40','-24','-27','-34','-47','-73','-46','-82','-74','-42','-81','-41')
AND egw_cal_user.cal_recur_date=cal_start)
ORDER BY cal_start ASC, cal_non_blocking DESC
Kontext: Der Nutzer hatte zuletzt den Kalender geöffnet, der wird auch wieder als erstes geladen nach dem Login.
Filtereinstellung: ein Nutzer, Alle Kategorien, ‘Nicht abgesagt’.
vermutliche Ursache: Es wird nur nach cal_end eingeschränkt, d.h. es werden alle Termine in der Zukunft geladen. Bei dem betroffenen Benutzer sind das sehr viele Termine aufgrund vieler täglicher Terminwiederholungen.
Workaround: In dem Kalenderfilter einen weiteren Benutzer hinzufügen, dann wird im Select zusätzlich cal_start mit eingeschränkt --> damit wird nur ein Kalenderbereich von der Datenbank geladen -> Kalender wird schnell geladen.
Ich hoffe mein Anliegen ist verständlich dargestellt