SQL-Server

Luteijn Automatisering

(KvK: 60276037, BtwNr: NL062594862B01)

Artikelen over relationele databases

Query-Analyser

Home


 

 

 

 

De eerste kennismaking met SQL-Server had ik bij Exact. Hoewel ik mij van het bestaan van machtige relationele SQL-databases bewust was, waren de werkelijke formidabele prestaties van deze jongste ster aan het firmament toch een verrassing voor mij. Je kunt SQL-Server gewoon op je computer zetten, maar ook iedere instantie van SQL-Server op het netwerk kan direct gebruikt worden om data op te halen of op te slaan. De prestaties van de PC met de server blijven voortreffelijk, zodat je ook in gevallen, dat een kleinere database meer voor de hand ligt gerust van SQL-Server gebruik kunt maken. In tegenstelling tot veel concurrerende databases beschikt het zelf over een aantal uitstekende tools, zoals query-analyser, enterprise-manager, profiler, etc., die zich aldra volstrekt onmisbaar maken en aanmerkelijk beter en verder zijn uitgewerkt, dan b.v. het bekende programma TOAD, dat meestal bij Oracle e.d. gebruikt wordt voor beheertaken op de database. Terwijl Oracle probeert alles qua database, programma, designers binnen het systeem zelf op te lossen, is SQL-Server een echte database gebleven. Triggers, constraints, Stored-procedures zijn aanwezig, maar niet al te hinderlijk...

 

Exact bestaat al geruime tijd. Het is een systeem gerealiseerd door een aantal enthousiaste programmeurs, uitgegroeid tot het dominerende administratieve softwarepakket in Nederland. Voortdurend heeft het voortvarend geprobeerd nieuwe markten en nieuwe technieken binnen te halen. Het programma is vertaald om ook in het buitenland beschikbaar te komen. Inmiddels wordt het grootste deel van de omzet in het buitenland gerealiseerd. De hoeveelheid functionaliteit binnen het pakket is overweldigend. Zo nu en dan wordt er een project gedaan om technische oplossingen en daarmee samenhangende problemen uit het verleden kwijt te raken. Een daarvan was de overstap van een recordgeoriënteerde database naar SQL-Server. Aanvankelijk werd geprobeerd beide werelden binnen het pakket in leven te houden. Maar na enige tijd werd besloten om volledig over te stappen naar SQL-Server.

 

Zo'n transitie van het oude naar het nieuwe is een geweldige gelegenheid om kennis op te doen van de problematiek, die gepaard gaat met het invoeren van SQL in een bestaand pakket. Afgelopen jaren heb ik ook buiten Exact voortdurend gelegenheid gehad deze opgedane kennis in de praktijk te brengen. De overstap van Record georiënteerd naar SQL blijkt vrijwel overal een goor aantal hoogst opmerkelijke problemen op te roepen. Programmeurs moeten in feite hun vak volledig opnieuw leren. Technieken en automatismen uit het verleden leiden tot een ramp als ze gebruikt worden in SQL-omgeving. SQL kan je desgewenst record georiënteerd gebruiken. Maar dan komen de sterke punten ervan nauwelijks tot hun recht. Als je bestaande code 1 op 1 blijft gebruiken onder SQL zul je merken, dat de performance eerder slechter dan beter wordt. Eerst als je de database, technische ontwerp en gebruikte technieken aanpast aan de nieuwe omgeving, kan je de enorme kracht van SQL-Server ontsluiten. Moeiteloos kan je tienmaal zoveel data als vroeger hanteren en kun je mits gebruik wordt gemaakt van goed geschreven en massale queries, tot tienmaal zo snel over deze data beschikken.

 

 

Aanvankelijke probeerde Exact van twee walletjes te eten en zowel BTrieve als SQL-Server te ondersteunen. Er werd een schil geschreven, die volledig transparant records ophaalde uit beide databases en beschikbaar stelde aan de applicaties. Dezelfde broncode bleef gewoon werken. Dat had grote voordelen. Exact heeft immers drie platformen, t.w. Dos, 16 bits en 32 bits windows. De broncode in de drie platformen lijkt sterk op elkaar, zodat een wijziging op enige niveau gemakkelijk doorgevoerd kan worden over alle platformen. Vooral als je bedenkt, dat er meerdere releases tegelijk openstaan en elk platform uit een 1000 applicaties bestaat, dan is enige standaardisering niet onwenselijk. Voor ons programmeurs was kennis van SQL aanvankelijk nauwelijks noodzakelijk. Alles werd geregeld in de schil en niets leek te hoeven veranderen tot de eigen boekhouding, die als eerste met elk nieuw programma werkt, begon te klagen over performance en dat nog wel tegen de hoofddirectie. 

 

Vrij abrupt werd besloten de ondersteuning voor BTrieve in het 32 bits platform te beëindigen en alle energie te richten op SQL-Server. Opeens verschenen er echte SQL-statements in de source. Dat was in eerste instantie nauwelijks een verbetering. De batchprocessen waren allemaal opgebouwd op typische record georiënteerde wijze. Het zogenaamde tandwielkastsysteem. Je leest een masterrecord en leest vervolgens een voor de detailrecords en de details van de detailrecords. Dat is een buitengewoon ongelukkige werkwijze voor een SQL-database. Bij een SQL-database maak je, als je het goed wilt doen, een query over meerdere tabellen over honderdduizenden records tegelijk om in een keer een recordset op te laten bouwen met alle gegevens, die je werkelijk nodig hebt in de volgorde, die je het beste past. Indexen, statische recordbuffers, lussen binnen lussen binnen lussen verliezen hun betekenis. Je maakt voor een rapport gewoon een grote recordset en doorloopt deze gegevens in een lus of geeft de hele boel aan een reportgenerator voor verdere verweking zonder dat er nog veel echt programmeerwerk aan te pas komt.

 

 

 

 

Werkloosheid hoeven programmeurs echter voorlopig niet te vrezen. Met krachtiger hulpmiddelen kunnen krachtiger programma's en oplossingen gerealiseerd worden. Ook wordt het werd hoogwaardiger. Het verschuift van eindeloos zorgvuldig kleine bouwblokjes aan elkaar sluiten tot grootschalig ontwerpen. Het is noodzakelijk om processen te optimaliseren naar de SQL-database. Dat heeft ondermeer tot gevolg, dat ze gevoeliger worden voor veranderingen van inzicht. Om de performance op peil te houden, kun je je vaak niet meer tevreden stellen met kleine ingrepen. Bij elk verandering van inzicht moet tevens de onderliggende query en logica op de schop, wil je niet eindigen in de stroop. Bijna fulltime ben ik tegenwoordig bezig processen te herschrijven, waar ik vroeger slechts hier en daar een regeltje aanpaste. Dat is geweldig leuk werk. Hoewel soms ook wel een beetje frustrerend, als een kunstwerk voor de zoveelste keer door de molen moet...

 

Volgende pagina