Autor |
Beitrag |
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Do 26.03.09 16:59
Hallo zusammen,
ich nutze für mein aktuelles Projekt den SQL-Server von Microsoft, auf einem Standard PC (Dualcore mit 2 GHZ ungefähr). Nun meine Frage: Ab welcher Datenbankgröße fängt der Rechner an langsam zu werden? Es ist so, das im Laufe der Zeit immer mehr Datensätze anfallen, die eigentlich nicht mehr benötigt werden. Das wirkt sich natürlich irgendwann negativ auf Such- bzw. Filterfunktionen aus. Ich habe mir gedacht, das bei Programmstart die DB-Größe geprüft wird (geht das überhaupt?) und wenn eine gewisse Größe erreicht ist, wird der User aufgefordert, die Datenbank neu zu installieren.
Gruß
Christoph
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 26.03.09 19:49
Dir dürfte selbst klar sein, dass es auf die Frage keine genaue Antwort geben wird  . Und zur Performance gehört ja nicht nur die DB-Struktur, sondern auch immer die Query. Du kannst höchstens messen, wie lange die Ausführung der Query dauert.
Christoph1972 hat folgendes geschrieben : | Ich habe mir gedacht, das bei Programmstart die DB-Größe geprüft wird (geht das überhaupt?) |
COUNT(*) 
_________________ >λ=
|
|
Christoph1972 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Fr 27.03.09 10:23
Hallo Sebastian,
das man da keine genaue Angabe machen kann, war mir in der Tat klar. Meine Abfragen beziehen sich lediglich auf das Anzeigen der Datenfelder 5-20 Textfelder aus vier Tabellen. Ich lade immer alle Daten in ein DataSet, die benötigten Datensätze hole ich mir über den BindingSource Filter. Ich denke, es gibt also zwei kritische Punkte, einmal das Laden vom Server und dann das Verhalten des Anwendungsrechners wenn das DataSet riesig ist. Ich habe absolut null Erfahrung, wann das sein könnte und wie lange es überhaupt dauern wird. Ich kann nicht mal sagen, wie viele Datensätze pro Jahr erstellt werden. Deshalb würde ich es gerne Programmseitig überwachen, damit die Anwendung auch ohne meine Hilfe und Anwesenheit immer schnell und zuverlässig läuft. Die einfachste Lösung könnte sein, einfach die Datensätze der Haupttabelle zu zählen. Aber wo liegt da eine gescheite Grenze? 10000 – 100000 – 1000000 Datensätze?
Danke für den Tipp mit dem Count! Ich werde mal mein SQL Büchlein konsolidieren
Gruß
Christoph
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 27.03.09 10:36
Hallo Christoph,
das ist das falsche Vorgehen:
Christoph1972 hat folgendes geschrieben : | Ich lade immer alle Daten in ein DataSet, die benötigten Datensätze hole ich mir über den BindingSource Filter. |
Du solltest dir immer nur die benötigten Daten holen.
Ausnahmen sind nur Nachschlagetabellen wie die Liste der Steuersätze, der Länderkennungen u.ä.
Grenzfälle sind die Listen der PLZ/Orte (etwa 100.000 Einträge in Deutschland) oder die Artikel, wenn es sich (wie bei einem großen Versandhaus) um Riesenmengen handelt. Aber solche Daten werden nur einmal beim Programmstart geholt; das kann man über einen SplashScreen anwenderfreundlich gestalten. Außerdem werden diese sich im Laufe der Jahre so gut wie niemals ändern.
Wenn du das beachtest, kannst du die Ausgangsfrage praktisch vergessen.
Gruß Jürgen
|
|
Christoph1972 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Fr 27.03.09 19:20
Hallo Jürgen!
Das mit dem BindingSource habe ich seinerzeit mit dem Designer entworfen und da ist das so, dass alle Daten geladen werden. Ich werde das erstmal so lassen, aber es steht definitiv auf meiner TODO Liste. An anderer Stelle erledige ich das auch bereits so. Zum eigentlichen Problem: Ich denke dass ich einfach die Daten in der Haupttabelle zähle und bei einem bestimmten Wert den User informiere. Ich werde die DB einfach mal mit einer Schleife schön beladen und testen, wann es spürbar an die Performance geht. Das Ergebnis werde ich hier posten! (Auch wenn die Aussagekraft relativ gering ist)
Gruß
Christoph
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 27.03.09 20:59
In den großen SQLServer-Versionen kannst Du Analysen zu Deinen Queries durchführen lassen und die DB dahingehend optimieren lassen, z.B. mit weiteren Indizes. Solltest Du SQL Express verwenden, bist Du sowieso auf 4GB pro Datenbank begrenzt.
Der Rest wurde ja schon gesagt.
|
|
Christoph1972 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Sa 28.03.09 13:30
Hallo zusammen,
ich habe mal die fünf Tabellen mit je zwanzigtausend Datensätzen + Inhalt gefüllt. Schon irre, wie schnell das DataSet gefüllt ist. Das einzige was etwas länger dauert, ist eine ListBox mit so vielen Einträgen zu füllen. Da hat man schon enormen Spielraum, echt stark, wie leistungsfähig „normale“ Computer heute sind, auch die Servertechnik ist beeindruckend. Ich schieße mit Kanonen auf Spatzen  Ich werde nun den User ab 15000 Datensätzen auffordern die Datenbank neu aufzubauen.
Gruß
Christoph
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Sa 28.03.09 14:25
Lass den Anwender doch in Ruhe, wenn es nicht nötig ist, ihn zu stören. 15000 Datensätze ist für eine Datenbank nichts, aber auch gar nichts. Wichtiger ist wirklich, was ich vorher schon sagte: Der Datentransfer sollte nicht unnötig aufgebläht werden. Beschränke dich auf die aktuell benötigten Daten und hole nicht alles.
Jürgen
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 28.03.09 15:40
Ich würde die Datenbank nicht komplett neu aufbauen, denn wenn es wirklich auf Leistung ankommt, dann hast Du nach einem Leeren der Tabellen einen Vorteil: Die DB-Datei und das Transaktionslog hat schon eine gewisse Größe. Vergrößerungen der Datenbank- und vor allem der Transactionlogs nehmen extrem viel Zeit in Anspruch. (hierzu auch mal schauen, ob Du nicht die Standardeinstellungen hier änderst, also Anfangsgröße und Vergrößerungsfaktor).
|
|
Christoph1972 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: So 29.03.09 11:49
Hallo Leute!
So, ich habe jetzt den TableAdapter so optimiert, das nur die benötigten Daten in das DS geladen werden. Ich hatte erst versucht auf den CommanText des TableAdapters zuzugreifen, aber das geht nicht ohne weiteres. Aber der Designer bittet da eine feine Hilfestellung. Einfach im Abfragegenerator bei der betreffenden Spalte bei der Filter-Zelle @DieVariable eingeben, dann wir die Fill-Methode so erweitert, das sie den Parameter „DieVariable“ annimmt. Wieder was dazugelernt!
Performance-Probleme gibt es erstmal nicht. Auch wenn die Datenbank 100000 Datensätze enthält, der Server neben Visual Studio läuft und der Mediaplayer ein MP3 abspielt. Ich werde dem User aber trotzdem die Möglichkeit geben die Datenbank zu leeren. Die Anwendung soll ja schließlich für ewig und drei Tage laufen, auch ohne meine Hilfe.
Ein ganz Dickes Danke an euch!
Gruß
Christoph
|
|