Ich bin nach einiger Bestätigung dieser Idee, eine schlecht funktionierende Datenbank zu reparieren oder einen besseren Vorschlag, falls einer eine hat. Immer offen für bessere Vorschläge.
Ich habe eine sehr große Datenbank (mehr als 20 Millionen Datensätze, die um ungefähr eine halbe Million pro Tag wachsen), die GUID als PK verwenden.
Ein Versehen meinerseits, aber die PK ist auf SQL Server geclustert und verursacht Leistungsprobleme.
Der Grund für eine Guid: Diese Datenbank ist teilweise mit 150 anderen Datenbanken synchronisiert, sodass die PK eindeutig sein musste. Die Synchronisierung wird nicht von SQL Server verwaltet, sondern es wird ein benutzerdefinierter Prozess erstellt, der die Daten für die Anforderungen des Systems synchronisiert - und zwar basierend auf dieser GUID.
In jeder der 150 entfernten Datenbanken werden nicht die vollständigen Daten gespeichert, die in der zentralen SQL-Datenbank gespeichert sind. Sie speichern nur eine Teilmenge der Daten, die sie tatsächlich benötigen, und die Daten, die sie benötigen, sind nicht eindeutig für sie (10 der 150 Datenbanken enthalten möglicherweise einige der gleichen Datensätze aus Datenbanken anderer Sites, die sie beispielsweise gemeinsam nutzen). Außerdem werden die Daten tatsächlich an den entfernten Standorten und nicht an der zentralen Stelle generiert, weshalb die GUIDs erforderlich sind.
Die zentrale Datenbank wird nicht nur verwendet, um alles synchron zu halten, sondern es werden auch Abfragen von mehr als 3000 Benutzern für diese sehr große fragmentierte Datenbank ausgeführt. Bereits beim ersten Testen ist dies ein großes Problem.
Zum Glück sind wir noch nicht live - also kann ich Änderungen vornehmen und bei Bedarf Dinge offline schalten, was zumindest etwas ist.
Die Leistung der entfernten Datenbanken ist kein Problem - die Datenteilmengen sind ziemlich klein und die Datenbank wird in der Regel nie größer als 1 GB. Die Datensätze werden regelmäßig an das Hauptsystem zurückgespeist und von den kleineren BDs entfernt, wenn sie nicht mehr benötigt werden.
Die Leistung der zentralen Datenbank, in der alle Datensätze gespeichert sind, ist bedauerlich - aufgrund einer gruppierten GUID als Primärschlüssel für die vielen Datensätze. Die Indexfragmentierung ist nicht in den Diagrammen.
Meine Überlegungen zur Behebung des Leistungsproblems sind, eine neue Spalte zu erstellen - Unsigned BIGINT IDENTITY (1,1) und dann die Clustered PK der Tabelle BIGINT-Spalte zu ändern.
Ich würde einen eindeutigen nicht gruppierten Index auf dem GUID-Feld verursachen, das der Primärschlüssel war.
Die kleineren entfernten 150-Datenbanken müssen nichts über die neue PK in der Central SQL Server-Datenbank wissen. Sie wird lediglich zum Organisieren der Daten in der Datenbank und zum Unterbinden der schlechten Leistung und Fragmentierung verwendet.
Würde dies funktionieren und die Leistung der zentralen SQL-Datenbank verbessern und die zukünftige Hölle der Indexfragmentierung (bis zu einem gewissen Grad) verhindern? oder habe ich hier etwas sehr wichtiges verpasst, das aufspringen und mich beißen und noch mehr trauern wird?
int
in 4255 Tagen (11,5 Jahren) erschöpfen . Wenn er das tun würde, würde er dich nur in 11,5 Jahren beschuldigen;)