Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Hast du Probleme Admidio einzurichten? Hier kannst du Fragen rund um die Einrichtung stellen.
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Hallo Fasse,

wir setzen Admidio zur Verwaltung unserer Mitglieder schon einige Jahre ein. Da wir nun alles auf responsive Umstellen war auch ein Upgrade auf die aktuelle Version mal fällig.

Wir nutzen Admidio zur Stammdaten Erfassung für die Mitglieder unseres Vereins. Auf die DB haben nur 3 Leute Zugriff. Das Verzeichnis selbst schützen wir noch mit htaccess. Bei unserem Mitglieder Modell kann die Mitgliedschaft auch pausieren. In diesem Fall werden die Mitglieder in eine andere Rolle verschoben. Bedeutet aber das wir nun mit den inaktiven auf ca. 3000 Datensätze kommen.

In der Version 2 war alles superschnell, im Gegensatz zu Version 3 dauert der Seitenaufbau bis zu 30 sec. (auch mit Zugriff mittels mobilen Gerät) Wenn die Seite jedoch geladen ist kann man sich in der Anwendung gewohnt schnell bewegen. (Suchen, Editieren, Speichern)

Kann man an der Server / php Konfiguration etwas machen damit es nahezu gleich schnell arbeitet wie vor dem Upgrade? Gern stell ich Dir einen Zugang zur Verfügung wenn Du es selbst testen möchtest.
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

bei welchen seitenaufrufen ist es so langsam? Nur bei "adm_program/modules/members/members.php" oder wo anders auch?
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Nur die Benutzerverwaltung ist langsam
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

Pass das mal an:
https://github.com/Admidio/admidio/blob ... s.php#L117

Code: Alles auswählen

$startTime = microtime(true);
$mglStatement = $gDb->query($sql);
$endTime = microtime(true);
var_dump($endTime - $startTime);
Und ruf dann die seite auf und schau was er ausgibt und schick mir die zeit
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Hab mal Suchergebnisse auf 10 statt 25 runtergestellt, ohne erkennbaren Erfolg. Beim Aufruf scheint er alle Datensätze zu laden um sie dann in 10er Seiten aufzuteilen. Bei aktuell 2618 Datensätzen dauert das fast 20 Sekunden bis die Seite aufgebaut ist.
Wir haben für die Mitglieder 2 Rollen, aktiv und ausgetreten. Es würde schon helfen, sollte es möglich sein, das ich in den Einstellungen hinterlegen kann, das bei Öffnen der Benutzerverwaltung nur Mitglieder der Rollen 1,2 oder 3 angezeigt werden.

Oder gibt es einen Dreh wie ich mit den ruhenden Mitgliedern umgehe?
Wie administriert man eine inaktive Rolle? Bisher haben wir das so gehandhabt das die Mitglieder die ihren Jahresbeitrag nicht bezahlt haben ihr Mitgliedschaft ruhen lassen und von uns die Rolle ausgetreten bekommen haben. Wenn die Mitglieder sich wieder entschlossen haben ihren Beitrag für das neue Jahr zu bezahlen haben wir sie aus der Rolle ausgetreten in die Mitglieder verschoben.
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

float(0.0012638568878174)

float(0.0018429756164551)
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

sorry mein fehler. falsche stelle.

https://github.com/Admidio/admidio/blob ... #L205-L208
https://github.com/Admidio/admidio/blob ... #L332-L336

Code: Alles auswählen

$irow = 1;  // Zahler fuer die jeweilige Zeile

$startTime = microtime(true);
while($row = $mglStatement->fetch())
{
    $endTime = microtime(true);
    var_dump($endTime - $startTime);

Code: Alles auswählen

    $membersTable->addRowByArray($columnValues);

    ++$irow;
    $startTime = microtime(true);
}
var_dump($irow);
Kann sein das da viele ausgaben kommen
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

weiße Seite nach Einbau
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

also bei mir funktionierts. Kannst bitte nochmal genau schauen ob der code wirklich richtig ist.
bzw es könnte sein das er weil es so viele einträge sind mit dem code probleme hat. Hier noch eine verbesserte variante:

Code: Alles auswählen

$irow = 1;  // Zahler fuer die jeweilige Zeile
$arrayTime = array();
$startTime = microtime(true);
while($row = $mglStatement->fetch())
{
    $endTime = microtime(true);
    $arrayTime[] = $endTime - $startTime;

Code: Alles auswählen

    $membersTable->addRowByArray($columnValues);

    ++$irow;
    $startTime = microtime(true);
}
var_dump($arrayTime);
var_dump($irow - 1);
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Danke für deine Mühe, kann ich jedoch erst heute abend machen.
Vom Büro aus kein Zugriff auf meinen Server :-)

Ich melde mich
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

ich glaub ich hab auch schon eine möglichkeit gefunden einiges an speed rauszuholen. aber ich warte mal auf deine daten
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Hab die Ausgabe mal angehangen. Ging wohl gestern auch schon aba nur nicht lang genug gewartet.
Dateianhänge
ausgabe.txt.zip
(8.33 KiB) 709-mal heruntergeladen
XimeX
Developer
Beiträge: 1148
Registriert: 12. Jul 2015, 13:21
Wohnort: Austria

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von XimeX »

Versuch mal ob das zumindest etwas an performance bringt:
https://github.com/Admidio/admidio/blob ... p#L50-L116

Code: Alles auswählen

if($getMembers)
{
    $memberCondition = ' AND EXISTS
        (SELECT 1
           FROM '.TBL_MEMBERS.'
     INNER JOIN '.TBL_ROLES.'
             ON rol_id = mem_rol_id
     INNER JOIN '.TBL_CATEGORIES.'
             ON cat_id = rol_cat_id
          WHERE mem_usr_id = usr_id
            AND mem_begin <= \''.DATE_NOW.'\'
            AND mem_end    > \''.DATE_NOW.'\'
            AND rol_valid  = 1
            AND cat_name_intern <> \'CONFIRMATION_OF_PARTICIPATION\'
            AND (  cat_org_id = '. $gCurrentOrganization->getValue('org_id'). '
                OR cat_org_id IS NULL )
          LIMIT 1) ';
}
// alle Mitglieder zur Auswahl selektieren
// unbestaetigte User werden dabei nicht angezeigt
$sql = 'SELECT usr_id, last_name.usd_value as last_name, first_name.usd_value as first_name,
               email.usd_value as email, gender.usd_value as gender, birthday.usd_value as birthday,
               usr_login_name, COALESCE(usr_timestamp_change, usr_timestamp_create) as timestamp,
               EXISTS (SELECT 1
                  FROM '.TBL_MEMBERS.'
            INNER JOIN '.TBL_ROLES.'
                    ON rol_id = mem_rol_id
            INNER JOIN '.TBL_CATEGORIES.'
                    ON cat_id = rol_cat_id
                 WHERE rol_valid   = 1
                   AND cat_name_intern <> \'CONFIRMATION_OF_PARTICIPATION\'
                   AND (  cat_org_id = '. $gCurrentOrganization->getValue('org_id'). '
                       OR cat_org_id IS NULL )
                   AND mem_begin  <= \''.DATE_NOW.'\'
                   AND mem_end     > \''.DATE_NOW.'\'
                   AND mem_usr_id  = usr_id
                 LIMIT 1) as member_this_orga,
               EXISTS (SELECT 1
                  FROM '.TBL_MEMBERS.'
            INNER JOIN '.TBL_ROLES.'
                    ON rol_id = mem_rol_id
            INNER JOIN '.TBL_CATEGORIES.'
                    ON cat_id = rol_cat_id
                 WHERE rol_valid   = 1
                   AND cat_name_intern <> \'CONFIRMATION_OF_PARTICIPATION\'
                   AND cat_org_id <> '. $gCurrentOrganization->getValue('org_id'). '
                   AND mem_begin  <= \''.DATE_NOW.'\'
                   AND mem_end     > \''.DATE_NOW.'\'
                   AND mem_usr_id  = usr_id
                 LIMIT 1) as member_other_orga
          FROM '.TBL_USERS.'
    INNER JOIN '.TBL_USER_DATA.' as last_name
            ON last_name.usd_usr_id = usr_id
           AND last_name.usd_usf_id = '. $gProfileFields->getProperty('LAST_NAME', 'usf_id'). '
    INNER JOIN '.TBL_USER_DATA.' as first_name
            ON first_name.usd_usr_id = usr_id
           AND first_name.usd_usf_id = '. $gProfileFields->getProperty('FIRST_NAME', 'usf_id'). '
     LEFT JOIN '.TBL_USER_DATA.' as email
            ON email.usd_usr_id = usr_id
           AND email.usd_usf_id = '. $gProfileFields->getProperty('EMAIL', 'usf_id'). '
     LEFT JOIN '.TBL_USER_DATA.' as gender
            ON gender.usd_usr_id = usr_id
           AND gender.usd_usf_id = '. $gProfileFields->getProperty('GENDER', 'usf_id'). '
     LEFT JOIN '.TBL_USER_DATA.' as birthday
            ON birthday.usd_usr_id = usr_id
           AND birthday.usd_usf_id = '. $gProfileFields->getProperty('BIRTHDAY', 'usf_id'). '
         WHERE usr_valid = 1
               '.$memberCondition.'
      ORDER BY last_name.usd_value, first_name.usd_value';
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

nicht wirklich. Schade

Wenn Du es mal sehen willst, richt ich Dir gern einen Zugriff ein. Gäbe es einen anderen Weg um bei ersten Aufruf die inaktiven Mitglieder (Rolle 2) nicht mit ausgeben zu lassen?

Das wären über die Hälfte der 2618 Datensätze weniger
magix
Beiträge: 28
Registriert: 25. Apr 2016, 14:09

Re: Nach Upgrade von 2.x nach 3.1 Mitgliederliste sehr langsamer Seitenaufbau

Beitrag von magix »

Könnte man die Demo DB hier mal füllen so das sie 2500 Datensätze hat?
Antworten