AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird - update BLOB-Field - Datenbank wird immer größer
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird - update BLOB-Field - Datenbank wird immer größer

Ein Thema von lxo · begonnen am 21. Mär 2023 · letzter Beitrag vom 22. Mär 2023
Antwort Antwort
lxo

Registriert seit: 30. Nov 2017
293 Beiträge
 
Delphi 12 Athens
 
#1

AW: Firebird - update BLOB-Field - Datenbank wird immer größer

  Alt 22. Mär 2023, 09:07


Um die recordversionen dieses blobs aufzuräumen, die niemand mehr sehen kann, muss du Firebird einen Hinweis geben. Einfachster weg:
Mach nach deinem update/post und dem noch einzufügenden commit ein simples select count(*) from tabelle where .... mit genau dem
key, wo du gerade deine updates machst. wenn es da zum pk nämlich zB 5 Record versionen gibt, von denen nur 2 sichtbar
sind und keine zu alte transaktion das alles komplett blockiert, dann wird der garbagecollector asynchron beginnen, die nicht mehr benutzen blob pages
wieder freizugeben und diese werden dann bei späteren updates wieder benutzt.

Danke für die ausführliche Antwort. Jeder edit/Post also der Update Vorgang wird in einer eigenen Transaktion ausgeführt, habe das Beispiel nur klein gehalten um das wesentliche Problem zu verdeutlichen. Das gleiche Verhalten habe ich auch wenn ich direkt Update statements ausführe.

Verstehe ich das richtig, das ein einfaches select count(*) den garbage collector anstößt und ich bräuchte kein gfix sweep aufrufen damit die Datenbank wieder kleiner wird?
Oder würde das nur dafür sorgen, das alte Pages wiederverwendet werden?
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.898 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firebird - update BLOB-Field - Datenbank wird immer größer

  Alt 22. Mär 2023, 09:18
Verstehe ich das richtig, das ein einfaches select count(*) den garbage collector anstößt und ich bräuchte kein gfix sweep aufrufen damit die Datenbank wieder kleiner wird?
Oder würde das nur dafür sorgen, das alte Pages wiederverwendet werden?
Nein, die Datenbank wird nie kleiner, auch durch gfix nicht. Es wird lediglich Speicherplatz in den Pages zur erneuten Benutzung freigegeben.
Die Datenbankgröße kannst Du ausschließlich durch Backup/Restore verringern.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Firebird - update BLOB-Field - Datenbank wird immer größer

  Alt 22. Mär 2023, 21:39
Verstehe ich das richtig, das ein einfaches select count(*) den garbage collector anstößt und ich bräuchte kein gfix sweep aufrufen damit die Datenbank wieder kleiner wird?
Richtig verstanden, setzt aber voraus das nicht irgendeine andere alte Transaktion das noch lesen könnte, was da aufgeräumt werden könnte, egal ob die daten in dieser Transaktion überhaupt schon mal gelesen wurden oder überhaupt relevant sind.

Die Pages werden durch den Sweep bzw die garbagecollection in der Page Inventory page dann nicht mehr als belegt markiert,sondern als verfügbar (und nicht nur für andere Blobs, sondern für alles was fb damit dann machen kann). Und wie Thomas schon sagt, die DB Datei wird nicht verkleinert, weil Firebird bei Bedarf zwar neue Dateibereiche anfordert für Pages, auf den was gespeichert werden muss, diese werden an nie wieder zurück an das Betriebssystem gegeben.

Durch den Neuaufbau der Datenbankdatei beim Restore werden die unbenutzten pages, die auch schon gar nicht im Backup sind, auch nicht wieder aufgebaut, so das dabei die Datei so groß bleibt wie es erforderlich ist.

Die 80% Füllgrad Regel (use all space) lass ich mal in der Erklärung weg, die ist dabei erst mal unwichtig.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz