[Delphi] Database-performance

Pagina: 1
Acties:

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Hoi, ik zit met een zeer apart probleem.

Op m'n werk maken we software die zowel op een DB2-database als op een Oracle-database moet kunnen werken. Dit doen wij via de BDE.

Als wij een schermpje tonen waarmee je wijzigingen in de database kunt doorvoeren dan duurt het op DB2 heel erg lang voordat je kunt gaan editten, terwijl je in Oracle meteen aan de slag kunt.

Via de SQL-monitor ben ik er achter gekomen wat het verschil is: Wanneer je een dataset van dsBrowse naar dsEdit verandert, dan gebeurt er niets in Oracle. Maar wanneer je verbonden bent met DB2, dan wordt het complete record opgevraagd dat je wilt gaan editten. Dit gaat via de hele leuke query in de vorm van: select * from tabel where kolom1=waarde1 and kolom2=waarde2 and kolom3=waarde3, etc. Die specifieke tabel heeft enkele tientallen kolommen, en de query wordt daardoor ook heel erg lang. En *alle* kolommen zitten in de where-clause.

Dit is het enige verschil wat ik heb ontdekt tussen editten in Oracle en editten in DB2. En die lange selectie-query genereren wij zelf niet, maar blijkbaar vindt de DB2-driver van de BDE dat een goed idee...

Weet iemand een manier om dit te omzeilen? Of heeft iemand andere ideeen?
En kom aljeblieft niet aankakken met "dan moet je een andere manier van editten gebruiken", dat weet ik zelf ook wel. Dat is helaas nu even geen optie..

Siditamentis astuentis pactum.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik denk dat de BDE denkt dat de tabel geen unieke key bevat en vind het daarom nodig alle velden die in de tabel staan maar als key te gebruiken. Misschien een foutje in de BDE driver, misschien in de DB2 driver of misschien is er ook gewoon geen primary key op die tabel?

De BDE is depricated en wordt niet meer verder intwikkeld. Het is een beetje een dood spoor. Je zou kunnen kijken naar dbExpress of ADO ipv de BDE. Deze kunnen ook koppelen met beide RDMSsen die je opnoemd en schakelen tussen beide zonder dat je een regel code hoeft aan te passen.

We adore chaos because we like to restore order - M.C. Escher


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
LordLarry schreef op 13 februari 2004 @ 10:49:
Ik denk dat de BDE denkt dat de tabel geen unieke key bevat en vind het daarom nodig alle velden die in de tabel staan maar als key te gebruiken. Misschien een foutje in de BDE driver, misschien in de DB2 driver of misschien is er ook gewoon geen primary key op die tabel?
Primary keys staan er wel, maar je hebt gelijk dat de BDE die niet ziet. In de DB-Explorer zie je ze namelijk niet. Ook DB2-views worden gewoon onder het kopje 'Tables' getoond, terwijl dat allemaal bij Oracle wel goed gaat.

Het probleem wordt hierdoor wel wat verklaarbaarder, maar de oplossing (behalve redesign) komt nog niet dichterbij, vrees ik.

Siditamentis astuentis pactum.


  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
Zijn er misschien geen opties die je aan kan geven bij je alias in de BDE ? Misschien dat je nog iets hebt aan 'MAX ROWS' of 'ROWSET SIZE' ?

Verder denk ik dat je niet veel controle hebt over het ophalen van de records door de driver. Het beste is natuurlijk als de gelegenheid komt overschakelen op ADO :/

  • Tomatoman
  • Registratie: November 2000
  • Nu online

Tomatoman

Fulltime prutser

Het klinkt alsof de DB2-driver voor de BDE behoorlijk brak is. Daar kun je helemaal niets aan veranderen. De kans is erg klein dat er ooit nog een betere driver zal worden uitgebracht, omdat zoals LordLarry al aangaf de BDE niet meer wordt doorontwikkeld.

De beste oplossing op de lange termijn lijkt mij een omschakeling naar DBExpress of ADO. Misschien vind je nog wel een korte-termijnoplossing om je huidige problemen op te lossen, maar vroeg of laat loop je tegen het volgende probleem aan. Uiteindelijk gaat je dat meer tijd kosten dan overschakelen naar een andere connection layer. Bovendien leveren allerlei workarounds voor DB2 in de code uiteindelijk een resultaat op dat moeilijk valt te onderhouden.

Een goede grap mag vrienden kosten.