Univention Bugzilla – Bug 21873
pkgdb: lange Laufzeiten von pkgdb-scan
Last modified: 2012-12-12 21:09:03 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.
(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.
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.
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
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
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.
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.
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
(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
Auch bei > 30.000 Pakete ist der sync in unter 30 Sekunden durch.
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".