Wie gehe ich mit der Berichterstellung für eine extreme Anzahl von Datenbanken in SQL Server 2005 um?


7

Ich suche nach Ratschlägen zum Umgang mit Berichten für unsere Umwelt. Wir haben derzeit 16 Server mit 20 Instanzen von SQL Server 2005. Wir haben über 6.600 Datenbanken und wachsen über diese Instanzen hinweg (1 Datenbank pro Kunde). Die meisten unserer Datenbanken haben eine Größe von 200 MB bis 7 GB, wobei etwa 60 Datenbanken eine Größe von 11 GB bis 110 GB haben.

Wir verwenden ein SAN für die Speicherung und haben Probleme mit der Ausführung der Berichte, die sich auf E / A auswirken.

Eine Idee war, die 60 größeren Datenbanken abzurufen und dann die Transaktionsreplikation zu verwenden, um diese Datenbanken zu replizieren und Berichte für die Replikate auszuführen.

Das würde dann alle kleineren Datenbanken ohne den Stress der größeren Datenbanken laufen lassen. Wir glauben, dass es in Zukunft keine größeren Datenbanken mehr geben wird, die auf unseren Unternehmenszielen basieren.

Irgendwelche Gedanken?


Haben Sie Analysis Services in dieser Mischung?
Atilla Ozgur

Nein, wir haben derzeit keine Analysedienste. Wir verwenden Reporting Services mit gespeicherten Prozessen, die in den oltp-Kundendatenbanken gespeichert sind.
Pamozer

1
Eine weitere Information, die angefordert werden muss. Wer konsumiert diese Berichte? Sind sie intern oder sind es Berichte, die Sie für Ihre Kunden erstellt haben? Dürfen Kunden Ad-hoc-Abfragen ausführen? Was ist mit Zeitzonenverteilungen? All dies sind einfache Hürden, aber die Antworten tragen wesentlich zur Auswahl Ihrer Architektur bei.
Swasheck

1
Was müssen Sie melden? Können die Berichtsdaten vorberechnet werden (entweder nächtliche oder Ad-hoc-Ansichten, dh indizierte Ansichten)? Sind die Berichtsabfragen robust - könnten die OLTP-Tabellen so indiziert werden, dass die Berichte Index-Scans anstelle von Tabellenscans durchführen (wahrscheinlich haben Sie bereits Indizes - liegen sie nahe an den Anforderungen für die Berichterstellung)? Ist die Speichergröße eine Einschränkung? Wie leidet das aktuelle System unter E / A-Problemen? Nicht genug Durchsatz? Konkurrenz von großen Scans und OLTP-Schreibvorgängen? Welcher Anteil der Aktivität Ihrer Anwendung besteht aus Schreibvorgängen (im Vergleich zu Lesevorgängen)?
Jon Seigel

Antworten:


9

In unserem Geschäft bei meinem vorherigen Job hatten wir einen sekundären Satz von Servern, auf denen wir unsere Wiederherstellungen getestet haben. Für unsere am stärksten frequentierten Kunden würden wir das heutige Backup wiederherstellen, es als read_only markieren und ihre Berichterstattung morgen würde sich mit dieser Kopie der Datenbank für alle Berichte von gestern verbinden. Dadurch wurden etwa 90% der Berichtsarbeitslast entlastet und gleichzeitig als Validierungsmethode für die Sicherung / Wiederherstellung verwendet. Wenn die meisten Berichte die heutigen Daten nicht benötigen, können Sie einen Teil der Produktionsarbeitsbelastung auf diese Weise mit billigerer Hardware reduzieren. Wenn Sie keine Enterprise-Funktionen verwenden, können Sie Express sogar für alle Datenbanken mit <10 GB verwenden. (Nun, ich sehe, es ist 2005, das eine geringere Beschränkung der DB-Größe hatte, aber Sie können Ihre Kopie jederzeit in 2008 / R2 wiederherstellen.


1
Interessante Idee. Mein Anliegen wäre es, die dbs über 20 gbs jede Nacht wiederherzustellen. Und wie lange das dauern würde. Und wenn die Wiederherstellung aus irgendeinem Grund fehlschlägt, was zu Testzwecken gut zu wissen wäre, wäre dies nicht so gut für unsere Kunden, die jetzt nicht in der Lage wären, auf ihre Berichte zuzugreifen.
Pamozer

1
Ich habe keine Ahnung, wie lange Ihre Wiederherstellungen dauern sollten, zu viele Variablen. Aber was nützt es, ein Backup zu erstellen, wenn Sie nicht testen, ob es sich tatsächlich um ein gutes Backup handelt (durch Wiederherstellen)? Wenn die Wiederherstellung fehlschlägt, sollte Ihre Anwendung eine Möglichkeit haben, eine Logik darüber zu haben, ob sie die Sicherung verwenden kann oder auf die Produktionskopie zurückgreifen sollte. Dies ist einfach TRY / CATCH, wenn die Wiederherstellung die Kopie unbrauchbar macht, der Wiederherstellungsjob jedoch auf andere Weise an einem erfolgreichen Ort protokolliert. Die App kann dieses Flag zuerst überprüfen, um sicherzustellen, dass die Wiederherstellung der letzten Nacht funktioniert hat.
Aaron Bertrand

2

Im Jahr 2005 kann ich mir drei Strategien zum Auslagern von Berichten vorstellen: 1. Eintägige Daten mithilfe des Protokollversands (der Protokollversand in den Standby-Modus führt dazu, dass Benutzer bei jeder Wiederherstellung ausgeschaltet werden, sodass realistische Wiederherstellungen nur dann erfolgen können, wenn sie nicht damit rechnen, dass sie aktiviert sind abends.) Vorteil - inkrementelle Updates. 2. Eintägige Daten mit vollständigen Wiederherstellungen. Nachteil: vollständige Wiederherstellung. 3. Replikation. Dies bietet die beste Benutzererfahrung, ist jedoch schwieriger / erfordert mehr Personal für die Einrichtung und Wartung.

Abgesehen davon - gibt es einen Vorteil, wenn nur die den großen Kunden zur Verfügung stehende Hardware erhöht, stattdessen optimiert und isoliert wird? Genug Festplatten und Speicher? Blitz? Indexoptimierung? Wirklich, sie klingen nach heutigen Maßstäben nicht so groß (zugegeben, ich habe Ihre Systeme nicht gesehen)


1
Der Protokollversand ist auch gut, aber ich könnte ihn mit einer vollständigen Aktualisierung einmal pro Woche oder alle zwei Wochen durchsetzen. Ich habe ein paar Kollegen mit Protokollversand für genau dieses Szenario und sie müssen von Zeit zu Zeit neu initialisieren - man sagt "Protokollversand bleibt hängen" und obwohl ich nicht nah genug dran war, um genau zu sehen, was das ist bedeutet in ihrem Fall, es scheint ziemlich vertraut.
Aaron Bertrand

Interessant. Bei uns ist das noch nie passiert (was nicht heißt, dass es bei anderen nie passiert). Holz klopfen.
Onupdatecascade

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.