Sie werden 3 Arten von Tuning durchführen, 1 reaktives und 2 proaktives.
Reaktiv
Aus heiterem Himmel verursacht eine Abfrage Probleme. Dies kann an einem Anwendungsfehler oder einer Anwendungsfunktion liegen, an einer Tabelle, die die Erwartungen übertrifft, an einem Anstieg des Datenverkehrs oder daran, dass das Abfrageoptimierungsprogramm "kreativ" wird. Dies könnte ein nächtliches Problem sein, bei dem es um nichts geht, oder es könnte eine Reaktion auf die Langsamkeit des Systems sein, die nicht kritisch ist. In jedem Fall besteht der bestimmende Charakter des reaktiven Tunings darin, dass Sie bereits ein Problem haben . Natürlich möchten Sie so wenig wie möglich davon machen. Welches bringt uns zu ...
Proaktiv
Typ 1: Routinewartung
Abhängig davon, wie oft sich Ihr Schema ändert und wie schnell Ihre Daten wachsen, sollten Sie nach einem bestimmten Zeitplan alle paar Monate oder Wochen die Ausgabe der Leistungsanalysetools Ihrer Datenbank überprüfen (z. B. AWR-Berichte für Oracle-DBAs). Sie suchen nach beginnenden Problemen, d. H. Nach Dingen, die auf dem Weg zu einer reaktiven Optimierung sind, sowie nach niedrig hängenden Früchten, die wahrscheinlich nicht bald Probleme verursachen, die sich jedoch mit geringem Aufwand in der Hoffnung verbessern lassen, weitestgehend zu verhindern -Zukunftsprobleme. Wie viel Zeit Sie dafür aufwenden sollten, hängt davon ab, wie viel Zeit Sie haben und wofür Sie es sonst ausgeben könnten, aber der optimale Betrag ist niemals Null. Sie können jedoch leicht den Betrag reduzieren, den Sie ausgeben müssen, indem Sie mehr von ...
Typ 2: Richtiges Design
Knuths Mahnung gegen "vorzeitige Optimierung" ist weithin bekannt und wird gebührend respektiert. Aber die richtige Definition von "vorzeitig" muss verwendet werden. Einige Anwendungsentwickler neigen dazu, wenn sie ihre eigenen Abfragen schreiben dürfen, die allererste Abfrage zu übernehmen, auf die sie treffen, die logisch korrekt ist, und achten überhaupt nicht auf Leistung, Gegenwart oder Zukunft. Oder sie testen mit einem Entwicklungsdatensatz, der für die Produktionsumgebung einfach nicht repräsentativ ist (Tipp: Tun Sie dies nicht! Entwickler sollten zum Testen immer Zugriff auf realistische Daten haben.). Der Punkt ist, dass der richtige Zeitpunkt für die Optimierung einer Abfrage der Zeitpunkt ist, an dem sie zum ersten Mal bereitgestellt wird, und nicht, wenn sie in einer Liste von SQL mit schlechter Leistung angezeigt wird und definitiv nicht, wenn sie ein kritisches Problem verursacht.
Was wäre also eine vorzeitige Optimierung im DBA-Land? Ganz oben auf meiner Liste würde ich die Normalisierung opfern, ohne die Notwendigkeit zu demonstrieren. Sicher, Sie könnten eine Summe für eine übergeordnete Zeile beibehalten, anstatt sie zur Laufzeit aus den untergeordneten Zeilen zu berechnen, aber müssen Sie das wirklich tun? Wenn Sie Twitter oder Amazon sind, können strategische De-Normalisierung und Vorberechnung Ihre besten Freunde sein. Wenn Sie eine kleine Buchhaltungsdatenbank für 5 Benutzer entwerfen, muss die richtige Struktur zur Erleichterung der Datenintegrität oberste Priorität haben. Weitere vorzeitige Optimierungen sind ebenfalls prioritär. Verbringen Sie keine Stunden damit, eine Abfrage zu optimieren, die einmal am Tag ausgeführt wird und 10 Sekunden dauert, auch wenn Sie glauben, dass Sie sie auf 0,1 Sekunden reduzieren können. Vielleicht haben Sie einen Bericht, der 6 Stunden täglich läuft, Aber planen Sie es als Batch-Job, bevor Sie Zeit in die Optimierung investieren. Investieren Sie nicht in eine separate replizierte Echtzeit-Berichtsinstanz, wenn Ihre Produktionslast nie über 10% schwankt (vorausgesetzt, Sie können die Sicherheit verwalten).
Indem Sie anhand realistischer Daten testen, fundierte Schätzungen zu Wachstums- und Datenverkehrsmustern (plus Toleranzen für Spitzen) vornehmen und Ihr Wissen über die Optimierungsprobleme Ihrer Plattform anwenden, können Sie Abfragen bereitstellen, die nicht nur jetzt, sondern auch in Zukunft (nahezu) optimal ausgeführt werden und unter nicht idealen Bedingungen. Wenn Sie die richtigen Techniken anwenden, kann die Abfrageleistung genau vorhergesagt und optimiert werden (im Sinne, dass jede Komponente so schnell ist, wie sie sein muss).
(Und wenn Sie schon dabei sind, lernen Sie Statistiken! )