AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Konzept zur Datenbanktrennung.
Thema durchsuchen
Ansicht
Themen-Optionen

Konzept zur Datenbanktrennung.

Ein Thema von Pro_RJ · begonnen am 5. Sep 2008 · letzter Beitrag vom 6. Sep 2008
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#31

Re: Konzept zur Datenbanktrennung.

  Alt 5. Sep 2008, 18:18
Das B/R wir zur zeit so gemacht:
Datenbank Shutdown --> Datenbank in einem Neuen Verzeichniss sichern --> Backup auf die Datenbank --> Restore auf die Datenbank.
  Mit Zitat antworten Zitat
pixfreak

Registriert seit: 6. Jul 2007
112 Beiträge
 
Delphi XE3 Professional
 
#32

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 08:26
Moin zusammen,

nur mal eine Frage: Wenn die Datenbank nach 100.000 Einträgen langsamer wird, könnte es vielleicht an einer großen Summe offener Transaktionen liegen?

Versuch doch mal die Statistik der Datenbank abzurufen und vergleiche mal die Werte von Next Transaction und Oldesd active Transaction. Wie groß ist dort der Unterschied, nachdem die Datenbank langsamer geworden ist? Ein sehr großes Delta würde auf eine Menge offener, nicht beendeter Transaktionen liegen. Kannst Du die Werte mal posten?

VG Pixfreak
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#33

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 09:07
Zitat von pixfreak:
Moin zusammen,

nur mal eine Frage: Wenn die Datenbank nach 100.000 Einträgen langsamer wird, könnte es vielleicht an einer großen Summe offener Transaktionen liegen?

Versuch doch mal die Statistik der Datenbank abzurufen und vergleiche mal die Werte von Next Transaction und Oldesd active Transaction. Wie groß ist dort der Unterschied, nachdem die Datenbank langsamer geworden ist? Ein sehr großes Delta würde auf eine Menge offener, nicht beendeter Transaktionen liegen. Kannst Du die Werte mal posten?

VG Pixfreak
Genau, lange laufende Transaktionen sind die wahrscheinlichste Ursache für solche zunehmenden Performanceprobleme, die sich statt durch Backup & Restore genausogut durch einen Neustart (aber nur vorübergehend) beheben lassen.

Backup & Restore braucht man vielleicht alle paar Monate mal. In der Regel sichert man nur (wenn die Datenbank sehr gross ist, z.B. jede Nacht). 'Fragmentierungsprobleme' der Datenbank kann man eigentlich ausschliessen.

Man kann durch Abfragen der Performancetabellen auch anzeigen lassen, welche Connections die lang laufenden Transaktionen verursachen. Die dahinterstehenden Programme bei Performanceproblemen neu zu starten kann dann eine 'erste Hilfe'-Massnahme sein.
Michael Justin
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#34

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 14:00
Kann ich die Anzahl der "offenen" Transactionen auslesen? bzw. einen vergleich erzeugen, wieviele geöffnet sind und viele wieder geschlossen worden sind?

Zum einlesen:
Es sind ca 840 Textdateien empfangen und eingelesen.Das ganze läuft in 5 Seperaten Threads ab die Paralel arbeiten.
Jede Datei wird dabei von einem Eigenen Thread bearbeitet.
Diese Thread haben eine eigene Datenbankverbindung und eine Transaction.Der FBServer ist als Classicserver installiert (ein Prozess pro DBVerbindung)

Rein ProgrammTechnisch kann ich die Transactionen rellativ einfach überwachen.
Das Gurndkonzept sieht volgendermaßen aus
Delphi-Quellcode:
....
Ok := False;
Try
  StartTransaction;
  ArbeiteWasZuTunIst;
  ok := True
except
  ok := False
end
if OK
then Commit
else Rollback;
....
in "ArbeiteWasZuTunIst" wird keinerleit Transsteuerung gemacht.
hier wird ausschließlich Insert,Update oder Select gemacht aber alles ohne die Trans zu bestätigen.
Alle Componenten haben zu 100,00% diese Transaktion drin.
Also rein Programmtechnisch kann da keine Trans offen bleiben


PS: es ist nicht so das die DB schon nach einer nacht deutlich langsamer wird.
Das ist ein schleichender Prozess der sich nach 2-3Wochen spührbare Auswirklungen zeigt.
Kann es eventuell auch sein, das diese Verlangsamung garnicht von dieser großen eingelesenen Datenmenge zusammen hängt?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#35

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 14:08
Zitat von Pro_RJ:
in "ArbeiteWasZuTunIst" wird keinerleit Transsteuerung gemacht.
hier wird ausschließlich Insert,Update oder Select gemacht aber alles ohne die Trans zu bestätigen.
Alle Componenten haben zu 100,00% diese Transaktion drin.
Also rein Programmtechnisch kann da keine Trans offen bleiben
Dadurch werden implizite Transaktionen gestartet.
Firebirds großer Vorteil ist nämclh gleichzeitig auch seine Achillesferse: Versionierung von Datensätzen und wirklich Snapshottransaktionen.
In den Moment, in dem du ein Select ohne eine Transaktion ausführst, wirst du implizit eine Snapshot-Transaktion der egsamten DB bekommen.
Solange du diese nicht beendet hast, muss der DB Server für JEDE Änderung ab dem Moment zusätzliche Versionen dieses Datensatzes und der Metadaten aller Tabellen, SProcs, ... erzeugen.
Bei den Firebird-Komponent für Delphi musst du IMMER eine explizite Transaktion mitschleifen und selbst im beeenden um das zu verhindern.

btw, Snapshots sind oft auch etwas sehr cooles, da du auf die Art konsitent auch mal 3 Statements hintereinander ausführen kannst. Egal ob mittendrin jemand eine Zeile geändert hat.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#36

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 15:10
Ich habe mir die drei Seiten nicht durchgelesen, aber ich glaube, Du solltest dich mit den Begriffen 'Datawarehouse' und 'Business intelligence' vertraut machen.

Es ist ein Märchen, das heute Datenbanksysteme, und seien sie noch so potent, immer sowohl transaktionale Datensammler als auch potente Statistikerzeuger sein können (bei entsprechendem Datenaufkommen, wohlgemerkt). In der einschlägigen Literatur wird als Standardvorgehensweise eine Trennung von operationalen Daten und sog. dispositiven Daten vorschlagen.

Operative Daten sind die Daten, die für die tägliche Arbeit benötigt werden. Bei einem Großhandel wären das z.B. Kundenstamm, Produkte, Aufträge, Lager, aktuelle Inventur.
Dispositive Daten sind die Daten, die aus den operativen Daten im Laufe der Zeit anfallen (History), oder speziell aufbereitete Daten (z.B. tägliche Zusammenfassungen oder eine Inventurhistory als periodischer Snapshot) und für Statistiken für das Managament herangezogen werden. Diese Daten werden aus dem laufenden Betrieb extrahiert, teilweise zusammengefasst, harmonisiert und fehlerbereinigt (über "ETL-Prozesse").

Gut, wir haben dann also zwei Datenbanken, das ODS (Operational Data Store), mit dem man täglich arbeitet, das aber Daten vergisst (wenn sie nicht mehr benötigt werden), und ein Datawarehouse (bestehend aus mehreren Datamarts) die bestimmte Daten in mehrdimensionalen Datenwürfeln bereithalten. aus diesen Würfeln (Datacubes) können dann geschäftsentscheidende Statistiken extrahiert werden.

Das ODS ist i.d.R. in der 3NF ('Snowflag-Design'), wohingehend ein DWH/DM hochgradig redundant und nur auf performance hin ausgelegt ist ('Star-Design').

Im ODS sollten laufend die ETL-Prozesse (transaktional oder periodisch) Daten in die einzelnen Datamarts überführen und das ODS schlank halten.

So das mal als Überblick. Hoffe, das ich nicht am Thema vorbeigeredet habe.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#37

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 15:29
Zitat von alzaimar:
Ich habe mir die drei Seiten nicht durchgelesen, aber ich glaube, Du solltest dich mit den Begriffen 'Datawarehouse' und 'Business intelligence' vertraut machen.
Ich denke nur nicht, dass das hier wirklich notwendig ist. Eine Firebird DB kann durch die hunderte bis 10-Tausenden an Recordversionen, die durch offenstehende Transaktionen generiert werden, um Größenordnungen größer werden als sie wirkich ist.
Eine klassische DW-Lösung nicht-operativer Daten ist immer möglich. Aber sein Problem wäre damit nicht gelöst. Nur die Symptome für die Transaktionsbugs wären gemildert.

Da er keinen Middle-Tier einsetzt dürfte ein Union-Select aus 2 Firebird Datenbanken für seine bestehende Software ein wenig interessant werden.
IMO basieren die Delphi-Reporting tools doch alle auf Datasets, oder? (bin hier ganz schön lange raus...)
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
pixfreak

Registriert seit: 6. Jul 2007
112 Beiträge
 
Delphi XE3 Professional
 
#38

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 15:56
Zitat von Pro_RJ:
Kann ich die Anzahl der "offenen" Transactionen auslesen? bzw. einen vergleich erzeugen, wieviele geöffnet sind und viele wieder geschlossen worden sind?
Moin,

ja da gibt es mehrere Wege. Der einfachste ist, meld dich doch mit dem mitgeliefertem isql an deiner Datenbank an.
Danach kannst Du mit show database; eine einfache Statistik bekommen. (Vielleicht dann mal posten?)

Programme wie z.B. IBExpert in der personellen Version kann dir die Statisik auch bereits anzeigen.

VG Pixfreak
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#39

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 16:44
Zitat von Elvis:
Aber sein Problem wäre damit nicht gelöst. Nur die Symptome für die Transaktionsbugs wären gemildert.
Oh, Bugs.. Hätte vielleicht doch richtig lesen sollen
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#40

Re: Konzept zur Datenbanktrennung.

  Alt 6. Sep 2008, 16:52
Zitat von Pro_RJ:
Kann ich die Anzahl der "offenen" Transactionen auslesen? bzw. einen vergleich erzeugen, wieviele geöffnet sind und viele wieder geschlossen worden sind?
Monitoring in FireBird 2.1:

http://www.firebirdsql.org/rlsnotesh...ml#rnfb210-mon

Beispiele:

Select * from MON$DATABASE

Wichtige Daten zu den Transaktionen stehen in

MON$OLDEST_TRANSACTION (OIT number)
MON$NEXT_TRANSACTION (next transaction number)

Alle aktiven Transaktionen (ausser eigene)

SELECT MON$ISOLATION_MODE
FROM MON$TRANSACTIONS
WHERE MON$TRANSACTION_ID <> CURRENT_TRANSACTION

Abfrage der aktuell aktiven Statements

SELECT ATT.MON$USER,
ATT.MON$REMOTE_ADDRESS,
STMT.MON$SQL_TEXT,
STMT.MON$TIMESTAMP
FROM MON$ATTACHMENTS ATT
JOIN MON$STATEMENTS STMT
ON ATT.MON$ATTACHMENT_ID = STMT.MON$ATTACHMENT_ID
WHERE ATT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION
AND STMT.MON$STATE = 1


Eventuell ist es aber auch eine stetig steigende Anzahl der geöffneten Verbindungen? Wenn der Server im Classic Mode läuft, müsste man die Prozesse auf Systemebene sehen können. Oder über die MON$ATTACHMENTS (connected attachments) Tabelle, je Connection ist darin ein Datensatz.

Viele Grüße

Michael Justin
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 13:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz