Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Database Cleanup Script [OpenSim 0.9.x]
#1
Hallo zusammen.

Ich denke hier ist der richtige Platz um ein Script anzukündigen, welches die OpenSim-Datenbank bereinigt und wie es / wann es genutzt werden kann.

Zur technischen Seite. Das Script basiert auf folgender Annahme:
  • OpenSim (official) 0.9.x
  • MySQL 5.7
  • Datenbank auf utf8_general_ci
  • Alle Daten werden in einer Datenbank abgelegt (außer z.B: Suchdatenbank)
  • Linux System
  • PHP 7.3

WARNUNG DIREKT VORWEG: Das Script MUSS im gestoppten Zustand des Grids ausgeführt werden, da Änderungen während des Vorgangs nicht berücksichtigt werden. Ebenso muss ein Backup der Datenbank VOR der Aktion erstellt werden. Ich übernehme KEINERLEI Haftung bei Schäden, die durch das Script entstehen.

Nun zur Arbeit des Scripts. Was macht das Script / wann sollte ich es einsetzen / was genau ist ein Asset !?:

Also erstens was ein Asset ist sollte den meisten bekannt sein. Für die, die es nicht wissen:

Ein Asset ist ein Eintrag in der Datenbank was in OpenSim (oder auch Second Life) als Textur, Script, Notecard, Hose, Schuhe oder was auch immer, angezeigt wird. Wenn ihr zum Beispiel eine Textur hochladet seht ihr ein Bild und habt den Namen der Textur. In der Datenbank wird ein Asset angelegt. Wenn Ihr ein Würfelprim auf dem Boden einer Region erstellt ist das in der Datenbank ein Asset. ALLES sichtbare inklusive der Kleidung, die ihr tragt ist in der Datenbank ein Asset.

Warum brauche ich so ein Bereinigungsscript ?

Ganz einfach. Jedes Asset, welches erstellt wurde, bleibt in der Datenbank auch wenn ihr hingeht und z.B. die Textur in den Papierkorb legt und den Papierkorb leert. Das Asset bleibt in der Datenbank auch wenn theoretisch niemand mehr drauf Zugriff hat. Wenn eine Region gelöscht wird bleiben alle Assets in der Datenbank enthalten auch wenn die Prims z.B. schon gar nicht mehr verwendet werden (weil die Region nicht mehr existiert).

Das heißt wenn Ihr 50 Regionen habt mit einer täglichen Besucherzahl von rund 40 Avataren, die regelmäßig etwas neues bauen oder ein Objekt mehrmals rezzn und es danach wieder löschen bleibt das Asset trotzdem in der Datenbank. Ihr könnt euch also vorstellen, dass eine Datenbank ganz schnell mal auf mehrere 100 GB anwachsen kann.

DESHALB BRAUCHT MAN EIN BEREINIGUNGSSCRIPT.

Ich gebe zu ein solches Script ist immer eine heikle Sache aber mit gesundem Menschenverstand und entsprechender Erfahrung kann man ein solches Script erstellen. Genau das habe ich vor / bin ich aktuell dran.

Wie geht das Script vor?

Das ist im Prinzip sehr einfach erklärt.

Das Script scannt die gesamte asset-Datenbank (Tabelle assets) und prüft ob das angegebene Asset IRGENDWO enthalten ist. Das schließt folgendes mit ein:
  • Inventare
  • Regionen
  • Scripts
  • Prims
  • uvm.

Ich denke, dass ich eine detailierte Liste erstellen kann, sobald das Script weiter fortgeschritten ist. Im Moment teste ich das Script noch an meinem Testgrid. Wenn das abgeschlossen ist und absolut keine Fehler mehr existieren wird das Script an VirtuLife getestet (mit vorherigem Backup natürlich) Big Grin

Viele Grüße

Christian Nill
Wann was schief läuft -> Ich war's nicht

VirtuLife - Start your virtual life NOW
Zitieren
#2
Hallo,

ich hatte mir auch schon mal Gedanken zu einer Asset-Bereinigung gemacht, da sich mit ca. 10 Jahren Opensim Praxis auch einiges an Assets angesammelt hat.
Auch bin ich schon mal irgendwo im Web auf Bereinigungsscripts gestoßen.

Hier meine eigenen Gedanken zu einem Assetcleaner Script:
Um Inkonsistenzen zu vermeiden, müssten bei einem Bereinigungsscript für die Tabelle "assets"
folgende Tabellen auf Verweise überprüft werden.
Anmerkung nebenbei:
Bei großen Grids könnte es sein, dass die Tabelle "assets" sich in einer eigenen Datenbank oder wegen Spiegelung in mehreren Datenbanken befindet.
Oder es wird das "FS Asset" Konzept verwendet ( "http://opensimulator.org/wiki/FSAssets_Service" ).

DB oder DBen für GridServices:
- DB mit Tabelle "assets" (key: id)

Folgenden Tabellen haben verweise auf die Tabelle "assets" (key id):
- DB mit Tabelle "regions" (key: regionMapTexture, parcelMaptexture)
- DB mit Tabelle "userProfile" (key: profileImage, profileFirstImage)
- DB mit Tabelle "os_groups_groups" (key: InsigniaID)
? - DB mit Tabelle "opensim_search" (key: snapshotuuid ?)
- DB mit Tabelle "inventoryitems" (key: assetID)

Simulator DBen auf gleichem oder verschiedenen Servern:

Region (1) DB
- Tabelle "primitems" (key: assetID)
- Tabelle "land" (key: MediaTextureUUID, SnapshotUUID)
- Tabelle "regionsettings" (key: terrain_texture_1, terrain_texture_2, terrain_texture_3,
terrain_texture_4, map_tile_ID, parcel_tile_ID)
- Tabelle "regionwindlight" (key: normalmaptexture)
...
Region (x) DB (gleiche Tabellen wie oben)

Bei einer einfachen Konfiguration mit einem Simulator können sich natürlich alle Tabellen in einer DB befinden.
Hoffentlich habe ich nichts vergessen.
Mir schien es zunächst zu riskant und weil ich kein SQL-Profi bin, habe ich deshalb das Thema bisher zurückgestellt.
Und die Asset-Tabelle wächst und wächst ...
Sorry, wegen der Textformatierung.

Schöne Grüße
Data
Zitieren
#3
Kein Problem Data.

Ich gehe natürlich davon aus, dass alle Dienste auf eine DB zeigen (ausgenommen die search db). Die Search DB sollte sich eigentlich von alleine aktualisieren (theoretisch). Daran arbeite ich aber noch wie genau sich das verhält.

Ich stimme dir voll und ganz zu. Es ist sehr riskant. Aus dem Grund IMMER ein Backup vorher machen. Wenn etwas schief geht kann man wenigstens die DB noch retten ohne das etwas passiert ist.

Was man nicht vergessen darf ist der Asset cache der einzelnen Regionen / Simulatoren. Die haben eigene Asset Caches. Der muss auch entsprechend geleert werden damit die Assets neu aus der DB gezogen werden.

Es ist ein schwieriges Unterfangen. Aber irgendjemand muss es mal machen. Ich habe zum Glück sehr viel Erfahrung mit MySQL und PHP. Mir sind 99 % der Begriffe geläufig und ich denke ich kann Erfolg haben.

Viele Grüße

Christian Nill
Wann was schief läuft -> Ich war's nicht

VirtuLife - Start your virtual life NOW
Zitieren
#4
Natürlich finde ich ein Bereinigungsscript nützlich. Nur bevor ich dran glaube, werde ich auf eine Berechnung (oder ersatzweise empirische Messung) warten, wie das bei großen Datenbanken skaliert. Ganz einfach, weil schon viele sich dran versucht haben und bisher immer beim Skalieren irgendein exponentieller Faktor den Algorithmen das Genick gebrochen hat.

Du schreibst, das Grid muss während des Script-Laufs heruntergefahren sein. Wie lange wird das bei Datenbanken mit Assets im Bereich von 100 GB bis ein paar TB dauern, da wo es anfängt weh zu tun und Asset-Bereinigung interessant wird? (Mir ist klar, dass du da jetzt nicht drauf antworten kannst, das werden die Tests zeigen.)
Zitieren
#5
Hallo zusammen ;D

Ich weiss nicht, ob jemand an der Umfrage teilgenommen hat, aber diese scheint hier in der Forumsoftware ein klein wenig verbuggt zu sein.

@bimbam, kannst du die Umfrage bitte rausnehmen. Ich werde mich am WE mal um ein Fix kümmern ;D
Signatur
Have a nice Day ;D

>> BogusMusikRausch jeweils Donnerstag um 20 Uhr in Uwes KeulenBar

Tschöö

Bogus | PinguinsReisen.de | M: @gse@norden.social
Zitieren
#6
Nachstehendes Zitat habe ich einem anderen Thread entnommen, weil meine Antwort hier besser passt.
(16.01.2019, 22:46)Mareta Dagostino schrieb:
(16.01.2019, 14:47)bimbam2103 schrieb: ... geprüft ob das Asset irgendwo auf einer Region ...

Den Schritt kannst du vermutlich sparen. Ein Asset, das nur auf einer Region existiert und in keinem Inventar (mehr), das kennt ein Grid normalerweise nicht. Nur weil du alle Regionen selber hostest, hast du überhaupt die Chance zu erfahren, was auf den Regionen los ist. Klar, wenn niemand mehr das Asset im Inventar hat, dann kann auf der Region nach einer Asset-Bereinigung mal was grau werden. Dann sollte sich der Regionen-Owner aber meiner Meinung nach selber helfen, ein OAR-Backup einspielen und sein Zeug diesmal ins Inventar nehmen.
Das Problem mit den OAR's ist, dass der Regionen Owner in dem Fall regelmässig OAR's mitsamt Asset erstellen muss. Dies erzeugt Server- und Netzwerklast und braucht Platz auf den Regionen Servern.

Ich mache z.B. täglich Sicherungen meiner Simulator Datenbanken. Das nützt mir dann aber nichts, wenn die Assets auf den Grid-Servern gelöscht werden. Ich verlasse mich da voll und ganz auf den Grid-Betreiber.

Nun, da ich beim OSGrid Crash selber erlebt habe, was es bedeuten kann, erstelle ich periodisch OAR's aller Regionen. Das mache ich aber nur alle paar Monate oder wenn begründete Zweifel am Fortbestand des Grids aufkommen. Gleichzeitig erstelle ich dann jeweils auch meine persönlichen IAR's (mit Asset).
Zitieren
#7
Hallo zusammen.
Das Thema scheint ja richtigen Diskussionsbedarf zu produzieren Smile Finde ich gut. So kann man Pro's und Kontra's abwägen.

Zu deiner Frage Mareta. Ich weiß aus eigener Erfahrung, dass Datenbanken durchaus sehr schnell sein können.

Ich habe zum Beispiel einen Online-Shop laufen (ich weiß das ist kein Vergleich was die Menge der Daten angeht). Der Onlineshop wird mit rund 60k Produkten stündlich aktualisiert. Die Aktualisierung dauert in der Regel 5 - 10 Minuten.

Was man allerdings nicht vergessen darf. In den 5 - 10 Minuten sind auch Web-Abfragen bei externen Dienstleistern mit bei die z.B. Bilder, Produktbeschreibungen etc liefern. Das heißt die tatsächliche Datenbankzeit (ich habs vorhin mal getestet) leigt bei 60k Einträgen bei 1 - 2 Minuten. Auch hier muss ich natürlich der fairnes halber zugeben, dass es sich hier lediglich um 3 - 4 Tabellen handelt die aktualisiert werden müssen.

Bei OpenSim ist das natürlich eine ganz andere Hausnummer. Jedes Asset muss in den Cache geladen werden und mit einigen Tabellen abgeglichen werden, mal von den Blob-Daten abgesehen.

DasBackup von OAR / IAR ist natürlich eine sinnvolle Variante. Ich selbst führe zum Beispiel tägliche Backups der Regionen an sich durch. Das heißt es wird ein Backup in Form von OAR durchgeführt und auf einem externen Server abgelegt, der mit 4x 2 TB Festplatten ausgestattet ist. Das ist natürlich ein entsprechender Netzwerktraffic aber nicht anders machbar. Die Backups der Datenbank werden ebenfalls täglich durchgeführt (meistens mitten in der Nacht).

@Bogus. Sach mal. Wie kann ich die Umfrage denn wieder raus nehmen Big Grin

Viele Grüße

Christian Nill
Wann was schief läuft -> Ich war's nicht

VirtuLife - Start your virtual life NOW
Zitieren
#8
@BimBam ;D Sehr gute frage junge Padawan ;D Ich keinen Schimmer .. lol Wir haben so wenig UmfrageOption benutzt, daher wurde der Fehler auch nie akut.

Aber lass mal so stehen, falls jemand an der Umfrage teilnimmt, verhaue ich ihm / Ihr persönlich den Hintern ... *gg
Signatur
Have a nice Day ;D

>> BogusMusikRausch jeweils Donnerstag um 20 Uhr in Uwes KeulenBar

Tschöö

Bogus | PinguinsReisen.de | M: @gse@norden.social
Zitieren
#9
Ich denke mal das man ein Datenbank Backup machen kann und dieses Backup bereinigen kann.
So kann man die Datenbank bei gelingen austauschen und das Grid läuft solange weiter.
Oder liege ich damit verkehrt?

Die meisten hier haben Arriba Regionen oder Grid´s die hier antworten deshalb folgende frage:
Gibt es immer noch Unterschiede zwischen Arriba und OpenSim was die Datenbank angeht?

@Bogus: Ich klicke jetzt alles an Wink
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren
#10
(17.01.2019, 18:37)Manfred Aabye schrieb: Ich denke mal das man ein Datenbank Backup machen kann und dieses Backup bereinigen kann.
So kann man die Datenbank bei gelingen austauschen und das Grid läuft solange weiter.
Oder liege ich damit verkehrt?

Die meisten hier haben Arriba Regionen oder Grid´s die hier antworten deshalb folgende frage:
Gibt es immer noch Unterschiede zwischen Arriba und OpenSim was die Datenbank angeht?

@Bogus: Ich klicke jetzt alles an Wink

Hallo Manfred.

Diese Idee ist mir auch schon gekommen. Allerdings gibt es einen entscheidenden Haken an dem Thema. Wenn das Grid läuft während die Bereinigung durchgeführt wird. Wer speichert dann die gemachten Änderungen im Grid während das Script auf dem Backup arbeitet Smile Die Änderungen nach der Bereinigung dann auch noch zu integrieren in das bereinigte Datenbanklayout würde wohl mehr Offlinezeit in Anspruch nehmen als wenn man das Grid direkt offline lässt und direkt mit der Datenbank arbeitet.

Viele Grüße

Christian Nill
Wann was schief läuft -> Ich war's nicht

VirtuLife - Start your virtual life NOW
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  OpenSim Problem mit Raspberry Pi 4 Pius Noel 1 467 12.08.2024, 19:25
Letzter Beitrag: Pius Noel
  Automatische Einstellung einer IP beim Start von OpenSim royalgrid 6 881 26.03.2024, 14:31
Letzter Beitrag: Manfred Aabye
Brick Neues Grid aka Aufbau OpenSim mit Robust und Co... brenner23 31 47.031 16.08.2020, 19:53
Letzter Beitrag: Manfred Aabye
  Upgrade Erfahrungen OpenSim 0.9.1, Mono 5.x unter Linux: Data Rossini 12 16.503 12.02.2019, 13:16
Letzter Beitrag: Pius Noel
  OpenSim Compile brenner23 7 9.028 17.11.2018, 20:54
Letzter Beitrag: Pius Noel

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste