Bug 21873 - pkgdb: lange Laufzeiten von pkgdb-scan
pkgdb: lange Laufzeiten von pkgdb-scan
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: pkgdb
UCS 2.4
Other Linux
: P5 enhancement (vote)
: UCS 3.1
Assigned To: Janek Walkenhorst
Stefan Gohmann
: interim-2
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2011-03-17 14:31 CET by Ingo Steuwer
Modified: 2012-12-12 21:09 CET (History)
6 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional): Release Goal, UCS Performance
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ingo Steuwer univentionstaff 2011-03-17 14:31:06 CET
pkgdb-scan übergibt aktuell immer alle Paketstati als einzelne INSERTs. Besser wäre eine Übergabe aller Stati in einem INSERT.

In Umgebungen mit geringer Bandbreite/hohen Latenzen kann ein pkgdb-scan schnell 20 Minuten oder länger dauern; hier stellt man das automatische Aktualisieren daher im Moment meist aus.
Comment 1 Janis Meybohm univentionstaff 2011-03-17 14:49:56 CET
(In reply to comment #0)
> pkgdb-scan übergibt aktuell immer alle Paketstati als einzelne INSERTs. Besser
> wäre eine Übergabe aller Stati in einem INSERT.
Ich glaube das ist mittlerweile nicht mehr so. Ich habe bei einem Kunden gesehen dass dort per psql ein "copy into <irgendeine tabelle> from `<eine temp-datei>`" ausgeführt wird.
Comment 2 Ingo Steuwer univentionstaff 2011-03-17 14:52:44 CET
Auf dem "erstbesten" Testsystem hier dauert der Scan gut 4 Minuten:

# time univention-pkgdb-scan 
Reading package lists... Done
Building dependency tree       
Reading state information... Done


real    4m23.828s
user    0m0.432s
sys     0m0.200s


Er scheint laut strace die meiste Zeit mit Übertragungen an den Datenbankserver beschäftigt zu sein. Wenn der zu allen ihm bekannten Paketen etwas überträgt sind das (unkomprimiert) auch 0,5-1 MB; evtl. ist der DSL-Upload hier der Flaschenhals?

Ideal wäre, wenn anstelle eines vollständige Replace eine korrekte Differenz ermittelt werden würde.
Comment 3 Janek Walkenhorst univentionstaff 2011-11-10 12:17:15 CET
Dieses "NOT IN subselect" Konstrukt kostet afaik viel Zeit:

 where sysname not in(select distinct sysname from systems)

 where(pkgname,vername)not in(select distinct pkgname,vername from packages_on_systems)

 where(pkgname,vername)not in(select pkgname,vername from packages)order by pkgname,vername,inststatus
Comment 4 Felix Botner univentionstaff 2012-02-29 11:42:46 CET
Mit 3.0 ist das nochmal schlimmer geworden, zumindest wenn man unmaintained einbindet. Die Anzahl der Pakete hat sich hier drastisch erhöht und pkgdb ist damit fast unbenutzbar 


-> time univention-pkgdb-scan 
Reading package lists... Done
Building dependency tree       
Reading state information... Done

real    7m16.139s
user    0m0.624s
sys     0m0.144s
Comment 5 Stefan Gohmann univentionstaff 2012-08-15 11:43:15 CEST
In der QA sollte nochmal geprüft werden, ob die Performance OK ist, wenn Systeme in der Domäne sind, die TCS, UCD, 2.0 bis 2.4 eingebunden haben.
Comment 6 Janek Walkenhorst univentionstaff 2012-10-09 18:55:16 CEST
Das Datenbankschema und der Code wurde überarbeitet.
Nicht mehr genutzte Tabellen (packages) und Felder (systems.{update,upgrade,install,remove}{date,message}) wurden entfernt.
Die Datentypen wurden verbessert.
Die bestehende Datenbank wird beim Update migriert.

(Weitere Geschwindigkeitsgewinne könnte es durch das entfernen überflüssiger Indexe geben)
(Auch ist das Datenbankschema noch nicht ganz optimal)

36666 Pakete werden jetzt ausreichend zügig gespeichert:

# time univention-pkgdb-scan
Reading package lists... Done
Building dependency tree
Reading state information... Done

real    0m8.104s
user    0m1.796s
sys     0m0.128s

auch wenn dies über eine Verbindung mit 1000ms Latenz geschieht:

# time univention-pkgdb-scan
Reading package lists... Done
Building dependency tree
Reading state information... Done

real    0m32.964s
user    0m1.856s
sys     0m0.108s


univention-pkgdb (6.0.7-1)

Changelog angepasst.
Comment 7 Stefan Gohmann univentionstaff 2012-10-16 07:24:01 CEST
Ich habe einen Master mit PKGDB installiert und bekomme diese Meldung in der join.log:

Configure 50univention-pkgdb.inst
Adding SRV record "pkgdb tcp 0 0 5432 master571.deadlock57.local." to zone deadlock57.local...
done
Traceback (most recent call last):
  File "/usr/sbin/univention-pkgdb-scan", line 37, in <module>
    univention.pkgdb.main()
  File "/usr/lib/pymodules/python2.6/univention/pkgdb.py", line 457, in main
    connection = open_database_connection(config_registry, pkgdbu=True)
  File "/usr/lib/pymodules/python2.6/univention/pkgdb.py", line 442, in open_database_connection
    connection = pgdb.connect(host=db_server, database='pkgdb', user=user, password=password)
  File "/usr/lib/python2.6/dist-packages/pgdb.py", line 482, in connect
    dbtty, dbuser, dbpasswd)
pg.InternalError: FATAL:  Datenbank >>pkgdb<< existiert nicht

Das System läuft: 10.201.57.1
Comment 8 Janek Walkenhorst univentionstaff 2012-10-16 11:09:24 CEST
(In reply to comment #7)
> pg.InternalError: FATAL:  Datenbank >>pkgdb<< existiert nicht
Aus der installation.log:
psql:/usr/share/univention-pkgdb/sql/create-database.sql:36: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
TIP:  Use the same encoding as in the template database, or use template0 as template.

→ Die Datenbank wird jetzt (wieder) von template0 erstellt.

univention-pkgdb (6.0.11-1) unstable; urgency=low
Comment 9 Stefan Gohmann univentionstaff 2012-10-17 10:21:23 CEST
Auch bei > 30.000 Pakete ist der sync in unter 30 Sekunden durch.
Comment 10 Stefan Gohmann univentionstaff 2012-12-12 21:09:03 CET
UCS 3.1-0 has been released: 
 http://forum.univention.de/viewtopic.php?f=54&t=2125

If this error occurs again, please use "Clone This Bug".