Ein Bericht in meiner Anwendung führt eine Abfrage aus, die zwischen 5 und 15 Sekunden benötigt (abhängig von der Anzahl der Zeilen, die zurückgegeben werden). Die Abfrage hat 8 Verknüpfungen zu fast allen Haupttabellen meiner Anwendung (Kunden, Verkäufe, Einheiten usw.).
Ein kleines Tool zeigt mir, dass in dieser Zeit alle diese 8 Tabellen mit einer gemeinsamen Tabellensperre gesperrt sind. Das bedeutet, dass in dieser Zeit keine Aktualisierungsoperationen durchgeführt werden können.
Eine Lösung von einem Freund ist, jede Verknüpfung in der Abfrage, die nicht zwingend 100% korrekte Daten haben muss (dirty read), mit einem NoLock zu versehen, so dass nur 1 dieser 8 Tabellen komplett gesperrt wird. Ist das eine gute Lösung? Für einen Bericht, bei dem 99 % der Daten aus einer Tabelle stammen, sollten die weniger wichtigen Tabellen nicht gesperrt werden?