none
Eure Meinung ist gefragt RRS feed

  • Allgemeine Diskussion

  • Hallo Forum,

    ich habe bisher nur Erfahrungen mit unserer eigenen Datenbank gesammelt und mir fehlt der Vergleich zu anderen Projekten. Manchmal habe ich aber den Eindruck, dass bei uns hier nicht alles ganz optimal läuft. Ich selbst bin das Bindeglied zwischen Fachabteilung und IT (was dieses konkrete Projekt angeht), bin aber organisatorisch der Fachabteilung zugeordnet.

    Meine fünf Kollegen und ich machen mit der Datenbank im Kundenauftrag Analysen. Die Daten sind nicht personenbezogen - weder direkt noch abgeleitet. Trotzdem sollte niemand außer uns auf die Daten zugreifen können. Leider lässt sich das wohl nicht vermeiden, dass auch die IT vollen Zugriff hat.

    Bei der IT habe ich zwei Ansprechpartner: Einen Datenbank-Experten (der sich aber hauptsächlich mit Oracle beschäftigt) und einen System-Experten, der die Server verwaltet. Wenn ich nach mehr Ressourcen verlange, wird das aber leider meist abgewimmelt oder einfach nicht reagiert.

    Wir haben auf einem virtuellen Win2008R2 (64Bit) einen SQL-Server 2005 (32Bit) laufen. Auf beidem bin ich Administrator. Unsere Platten befinden sich in einem SAN. Auf der C:\-Partition (32GB) ist das Betriebssystem und die Programmdateien und auf der D:\-Partition (800GB) die Datenbankdateien (mdf/ldf). Alle Platten sind mit NTFS und 4KB Clustern formatiert. Eine Standardtabelle (40GB) enthält 150 Mio. Datensätze. Uns wurden 6 GB RAM und 2 Prozessorkerne je 2,2 GHz zugewiesen. Unser Team besteht aus 6 Personen wovon 2 immer gleichzeitig die DB nutzen, manchmal aber auch alle. Die tatsächlichen Server sind 4 Hewlett-Packard-Maschinen mit 4x 12-Kern-Prozessoren und je 30GB RAM.
    Ein Beispiel für die Performance: Die folgende Abfrage dauerte 29:29 Minuten - also fast eine halbe Stunde...

    SELECT Fact_Buland.buland, COUNT_BIG([BigTab].ID) AS Records
    
    
    
    FROM  [BigTab] INNER JOIN Buland ON LTRIM(RTRIM([BigTab].PLZ)) = LTRIM(RTRIM(Buland.plz)) 
    
    
    
    GROUP BY Buland.buland
    
    
    
    

    [BigTab] hat 150 Mio. Datensätze, [Buland] hat 111111 Datensätze, die Summe über „Records“ betrug 90 Mio.

    Sind eine halbe Stunde Laufzeit normal? Die Prozessorauslastung liegt bei dieser Abfrage bei vielleicht höchstens 50%.

    Neben der Arbeit mit dem SQL-Server versuchen wir uns an Datamining mit Rapid-i (weil hat mehr und offene Algorithmen im Gegensatz zum Analysis Service). Dort verlangt man aber, dass die gesamte Lerner-Tabelle in den Arbeitsspeicher passt - also vielleicht 20GB? Wären 20GB Arbeitsspeicher angemessen oder völlig abgehoben?

    Unsere IT meint, sie habe unseren Server beobachtet und nur selten eine Prozessorauslastung von 100% gesehen. Sie werde den Server weiter beobachten. Unsere Arbeitsabläufe hat sich hier noch keiner angesehen.

    Wie ist eure Meinung dazu? Seht Ihr Handlungsbedarf bei unserer IT oder gibt es Optimierungsmöglichkeiten, die ich mir selber überlegen sollte (z. B. LW D:\ komprimieren) oder würdet ihr euch externe Berater ins Haus holen? Für jede Anregung und jeden Kommentar bin ich dankbar.

    Gruß
    Alexander



    • Bearbeitet Sepox Freitag, 8. April 2011 14:56
    Donnerstag, 7. April 2011 11:39

Alle Antworten

  • Wir haben auf einem virtuellen Win2008R2 (64Bit) einen SQL-Server 2005 (32Bit) laufen.


    Hallo Alexander,

    warum verwendet ihr ein 32 Bit SQL Server auf einem 64 Bit Betriebssystem, das ist eher sub-optimal? Zum einen läuft es im WoW Betrieb und mehr als 3,5 GB Speicher könnt ihr nicht mit dem 32Bitter nutzen.

    ON LTRIM(RTRIM([2010_Invpool].PLZ)) = LTRIM(RTRIM(Buland.plz))

    Wenn man auf Felder im JOIN Funktionen anwendet, dann kann der Sql Optimizer nie einen Index verwenden, das könnte schon mal Grund für die schlechte Performanz sein.

    Sind die Felder indiziert? Stehen da wirklich unnötige Leerzeichen drin, das die Trims nötig sind? Wenn Leerzeichen vorhanden sind, könntet Ihr die nicht entfernen?

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Donnerstag, 7. April 2011 11:58
  • Hallo Olaf,

    was ist denn der WoW-Betrieb? Hat das was mit "World of Warcraft" zu tun? Jedenfalls habe ich die Query jetzt mal so ausgeführt...

    SELECT Buland.buland, COUNT_BIG([BigTab].ID) AS Records FROM [BigTab] LEFT OUTER JOIN Buland ON [BigTab].PLZ = Buland.plz GROUP BY Buland.buland

    ...und siehe da, sie braucht nur noch 6:17 Minuten. Ist das jetzt OK, oder im Vergleich zu anderen Systemen immernoch zu langsam? Mir geht es ja auch nicht unbedingt darum die Query oben besonders schnell ausführen zu lassen, sondern eher, dass ich Argumente für eine bessere Hardwareausstattung bzw. mehr Unterstützung von der IT bekomme. Am liebsten wäre mir, es käme einer und würde sagen, "wenn du regelmäßig 40GB Tabellen auswertest brauchst du 40GB RAM", oder "mit sechs Personen nur 2 Prozessorkerne? - Unglaublich!" oder "Datenplatten müssen immer 64KB-Clusterung haben" Sowas halt.

    Gruß

    Alexander



    Donnerstag, 7. April 2011 16:52
  • Mir scheint, Deine Intention liegt eher auf der Analyse und ggfs. Optimierung Deiner Systemumgebung als auf "nur" der Optimierung einer Abfrage und/oder Tabellen. Das ist etwas, wozu Du Dir wahrscheinlich am Besten einen externen Berater ins Haus holen solltest, der die Situation analysiert und danach fundiert Auskunft geben kann, ob und wenn Ja wo, der Flaschenhals liegt. Das hat ausserdem den Charme, dass den Entscheidungsträgern ein schriftliches externes "Gutachten" vorliegt, was es manchmal wesentlich einfacher macht, Gelder und andere Resourcen freizusetzen, als wenn identische Empfehlungen von einer internen Stelle kommen, da vielfach der Prophet im eigenen Land nichts wert ist. Auf jeden Fall bekommt man eine spezifischere Analyse als das aus einer Online-Community heraus der Fall sein kann.


    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    • Bearbeitet Frank Kalis Freitag, 8. April 2011 05:56 Typos
    Freitag, 8. April 2011 05:27
  • Hallo Alexander,

    WoW = Windows on Windows, das System läuft dann sozusagen Huckepack.

    Da alle Daten aus BigTab ungefiltert für den Count verwendet werden, erfolgt ein FullTable-Scan und bei 150 Mio Datensätzen + Lookup auf BuLand sind die Zeiten völlig ok.

    Aber Deine Intention ist mir mittlerweile auch schleierhaft. Geht es Dir nun darum, performante Auswertungen zu bekommen oder nur darum, eine möglichst riesengroße Maschine im Keller stehen zu haben? Ja, Performance kann man kaufen, aber alles auf dieser Welt ist endlich und irgendwann wird auch weitere / größere Hardware eure Probleme nicht mehr lösen können.

    Du möchtest mehr Unterstützung durch die IT? Dann führ ihnen einfach nur diese kleine Beispiel vor Augen. Ganzzahliger Faktor 5 an Performanzgewinn; um das mit zusätzlicher Hardware erreichen zu können, hättet ihr min. 50 TEUR investieren müssen. Das Geld wäre besser in Schulungen investiert, den Du siehst ja, das man mit guter Kenntnis leicher bessere Ergebnis erzielt. Schlechtes Datenbank- und Abfrage-Design kann man nie wirklichg durch mehr Hardware Einsatz kompensieren.

    Da schließe ich mich Frank an, es wird besser sein, einen externen Berater hinzu zu ziehen, der objektive analysiert, woran es hapert und wo optimiert werden sollte; beim DB-Design, der Hardware oder dem Know-How.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Freitag, 8. April 2011 06:33
  • Hallo Olaf,

    es steht ja immer die gleiche Maschine im Keller. Es würden ja nur mehr Ressourcen unserem virtuellen System zugewiesen werden. Sollten alle virtuellen Systeme zusammen zu viele Ressourcen verlangen käme das System vielleicht ins Rotieren. Dann sind die Kapazitäten aber auch insgesamt zu klein und dann sollte man vielleicht auch 50.000 Euro investieren. Bei einem jährlichen IT Budget von mehreren zig-Millionen Euro sollte das kein Problem sein. Mein Eindruck aber ist, dass der physikalische Server auf komfortabler Last fährt und unsere Ressourcen künstlich zu klein gehalten werden.

    Das du die Laufzeiten für die Abfragen so in Ordnung findest, ist schon mal sehr hilfreich. Um die verbesserte Laufzeit zu erreichen musste ich aber auch warten, bis meine Kollegen nach Hause gegangen sind. Das ist sicher auf Dauer nicht mehr OK.

    Das mit den Schulungen werde ich mal anregen. Ein externer Berater ist sicher nur schwer umzusetzen, werde ich aber auch mal anregen. Ich mache mir da aber keine große Hoffnung, dass das genehmigt wird.

    Aktuelle Kurzfrist-Strategie ist jetzt, wenn wir wegen Ressourcenproblemen nicht vernünftig arbeiten können, dann sollen meine Kollegen vermehrt bei der Hotline anrufen. Vielleicht hilft‘s.

    Strategie gegenüber meinem Vorgesetzten ist, das aktuelle Projekt wird nur in einer „Schmalspurversion“ umgesetzt. Der Rapid-Miner ist halt ein Speicherfresser. Wir beschränken uns dann halt auf den Analysis Service.

    Gruß
    Alexander


    Freitag, 8. April 2011 12:23
  • Hallo Alexander,

    ein kleiner Tipp noch: 4K Cluster für Daten und Log ist keine so gute Sache.

    Sowohl aus Performance-Gründen als auch um das Risiko für Datenverlust zu verringern sind bei SQL Server 64K optimal.

    Für mehr Hinweise, das gesamte System betreffend, ist, wie Frank Kalis schon sagt, tatsächlich eine Analyse durch einen Experten vor Ort sinnvoller, als hier einzelne "hingeworfene" Aspekte.

    Gruß,

    Andreas


    SQL Server & BI blog - Homepage

    Sonntag, 10. April 2011 07:50