2009-07-06 6 views
0

Zunächst einmal bin ich kein DBA, aber ich arbeite in einer Umgebung, in der Datenbankadministratoren von Zeit zu Zeit Änderungen an der Produktionsdatenbank vornehmen die Notwendigkeit einer Neu-/Neuinstallation der Anwendung. In der Regel bestehen diese Änderungen aus der Neubearbeitung von Indizes, der Änderung von Prozeduren und manchmal auch aus einer geringfügigen Änderung der Tabellenstruktur (die normalerweise über Procs von der App abstrahiert wird).Strategien zum Beheben von Problemen/Anpassen von NHibernate-Apps in der Produktion

Offensichtlich sollte sich ein Team bemühen, Leistungsprobleme mit NHibernate zu erkennen, bevor sie mit Tests wie NHProf, SQL Profiler und Lasttests in Produktion gehen. Gibt es bestimmte Strategien, die verwendet werden können, um eine gewisse Feinabstimmung zu ermöglichen, sobald der Code in der Produktion erstellt und ausgeführt wird? Die Verwendung gespeicherter Prozeduren in 100% der Zeit scheint die größte Flexibilität für die Datenbankadministratoren zu ermöglichen, aber das würde natürlich die Effizienz von NHibernate beeinträchtigen. Von dem, was ich gelesen habe, funktionieren aktualisierbare Ansichten (in SQL Server) auch nicht so gut mit NHibernate (dies kann oder darf nicht wahr sein).

Ich habe ziemlich viel über NHibernate gelesen und experimentierte mit ihm im Laufe der Jahre, aber ich habe es nie in einer Produktionsumgebung in die Praxis umgesetzt. Ich muss noch auf eine Reihe von "Best Practices" (Best Practices) stoßen, um nach der Implementierung maximale Optimierungen zu ermöglichen.

Wie gehen Sie und Ihr Team als NHibernate-Benutzer mit Problemen um? , wenn sie in der Produktion entstehen? Meine Produktionsumgebung besteht aus ASP.NET-Anwendungen und SQL Server, aber ich glaube nicht, dass die Antworten auf diese Plattform beschränkt werden müssen.

Antwort

1

ich in einer ähnlichen Position bin, und um unsere DBA glücklich zu machen, habe ich folgendes:

  1. einige der Schrieb Abfragen in HQL, einige andere in SQL (insbesondere diejenigen perf-sensitive)
  2. Diese Abfragen auf Dateien, eine Datei pro Abfrage externalisiert.
  3. Wenn Ihre Anwendung diese Abfragen ausführen muss, lädt sie einfach die entsprechende Datei, führt sie optional durch einen Vorprozessor und führt sie aus.

Mit diesem Ansatz könnte die DBA theoretisch die Abfragen optimieren nur durch diese Dateien zu modifizieren. Das ist vergleichbar mit gespeicherten Prozeduren.

In Praxis, dann ist es an Ihnen zu entscheiden, ob Sie wirklich die DBA Zugriff auf diese Dateien geben werde (wenn Sie meine Drift zu fangen ...)

IMHO die DBA sollte nur die Profilierung des DBMS verwenden Werkzeuge und berichten ihre Ergebnisse zurück zu den Entwicklern (wie in "dort ist diese Frage, die 20 mal/sek läuft und 10 verbindet."Ist das wirklich notwendig? kann es zwischengespeichert werden? Brauchst du wirklich all diese Joins? Können wir das denormalisieren? "usw.

+0

Das klingt nach einem interessanten Ansatz. Ich sehe, dass Sie bloggen Beispiele würden einen interessanten Blogbeitrag IMHO machen. –

1

Ich bin noch nicht in der Bereitstellungsphase, aber auf meinem aktuellen Projekt bin ich schon auf diese Seite gestoßen und meine Lösung bestand bisher darin, meine Abfragen durch gespeicherte Procs zu ersetzen. Solange die Form der Daten, die von der Datenbank zurückkommen, gleich bleibt, ist das keine große Sache. Ja, du verlierst etwas von der Agilität, die du während der Entwicklung genossen hast, aber ich bin mir nicht sicher, ob es so schlecht ist, wie es anfänglich klingt. Sie haben einen Code-Push, wenn Sie den Kurswechsel zum ersten Mal durchführen, und ab diesem Zeitpunkt werden nur Proc-Änderungen vorgenommen.

0

Sie können einen Profiler wie NHProf verwenden, um die ausgeführten SQL-Abfragen zu sehen, damit Sie sie einem DBA anzeigen können. Dieses Tool kann auch ein Problem wie n + 1 auswählen.

eine zweite Cache verwenden kann nützlich sein: http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

+0

NHProf ist ein großartiges Tool, das während der Entwicklung verwendet werden kann. Es bietet jedoch keine vollständige Lösung für dieses Szenario, sondern nur die Details und die Anzahl der db-Treffer, die ausgeführt werden früh kann es Ihre Mappings und Abfragestrategie erheblich verbessern, was sich positiv auf die Menge an Problemen auswirken wird, die in der Produktion auftreten. " – Nigel

Verwandte Themen