Oh mein Gott, ich glaube ich habe sie alle gesehen. Meistens ist es eine Anstrengung, Leistungsprobleme von jemandem zu beheben, der zu faul ist, um Fehler bis zur URSACHE dieser Leistungsprobleme zu beheben oder sogar zu untersuchen, ob tatsächlich ein Leistungsproblem vorliegt. In vielen dieser Fälle frage ich mich, ob es nicht nur darum geht, dass diese Person eine bestimmte Technologie ausprobieren möchte und verzweifelt nach einem Nagel sucht, der zu ihrem glänzenden neuen Hammer passt.
Hier ist ein aktuelles Beispiel:
Der Datenarchitekt kommt zu mir mit einem ausführlichen Vorschlag, eine Schlüsseltabelle in einer ziemlich großen und komplexen Anwendung vertikal zu partitionieren. Er möchte wissen, welche Art von Entwicklungsaufwand notwendig wäre, um sich auf die Veränderung einzustellen. Das Gespräch lief folgendermaßen ab:
Ich: Warum denkst du darüber nach? Was ist das Problem, das Sie lösen möchten?
Ihm: Tabelle X ist zu breit, wir partitionieren sie aus Leistungsgründen.
Ich: Warum denkst du, dass es zu breit ist?
Ihm: Der Berater sagte, das seien viel zu viele Spalten, um sie in einer Tabelle zu haben.
Ich: Und das wirkt sich auf die Leistung aus?
Ihm: Ja, Benutzer haben zeitweise Verlangsamungen im XYZ-Modul der Anwendung gemeldet.
Ich: Woher wissen Sie, dass die Breite der Tabelle die Ursache des Problems ist?
Ihm: Das ist die Schlüsseltabelle, die vom XYZ-Modul verwendet wird, und sie entspricht 200 Spalten. Es muss das Problem sein.
Ich (Erklären): Das Modul XYZ verwendet jedoch insbesondere die meisten Spalten in dieser Tabelle, und die verwendeten Spalten sind unvorhersehbar, da der Benutzer die App so konfiguriert, dass die Daten angezeigt werden, die aus dieser Tabelle angezeigt werden sollen. Es ist wahrscheinlich , dass 95% der Zeit würden wir alle die Tische wieder zusammen sowieso Verbindungs aufzuwickeln , was würde verletzt Leistung.
Ihm: Der Berater sagte, es sei zu breit und wir müssen es ändern.
Ich: Wer ist dieser Berater? Ich wusste nicht, dass wir einen Berater eingestellt haben, und sie haben überhaupt nicht mit dem Entwicklungsteam gesprochen.
Ihm: Nun, wir haben sie noch nicht eingestellt. Dies ist Teil eines Vorschlags, den sie angeboten haben, aber sie bestanden darauf, dass wir diese Datenbank neu gestalten müssen.
Ich: Ähhh. Der Berater, der Dienstleistungen zur Neugestaltung von Datenbanken verkauft, ist der Meinung, dass wir eine Neugestaltung der Datenbank benötigen.
Das Gespräch ging so weiter und weiter. Danach habe ich mir die fragliche Tabelle noch einmal angesehen und festgestellt, dass sie wahrscheinlich durch eine einfache Normalisierung eingegrenzt werden kann, ohne dass exotische Partitionierungsstrategien erforderlich sind. Dies stellte sich natürlich als strittiger Punkt heraus, als ich die Leistungsprobleme (zuvor nicht gemeldet) untersuchte und sie auf zwei Faktoren zurückführte:
- Fehlende Indizes für einige Schlüsselspalten.
- Einige betrügerische Datenanalysten, die regelmäßig Schlüsseltabellen (einschließlich der "zu breiten") sperrten, indem sie die Produktionsdatenbank direkt mit MSAccess abfragten.
Natürlich drängt der Architekt immer noch auf eine vertikale Aufteilung des Tisches, die am "zu breiten" Metaproblem festhält. Er unterstützte seinen Fall sogar, indem er einen Vorschlag von einem anderen Datenbankberater erhielt, der feststellen konnte, dass wir größere Designänderungen an der Datenbank benötigten, ohne auf die App zu schauen oder eine Leistungsanalyse durchzuführen.