Frage

Ich habe von einem Podcast gehört, dass es keine Ormen gibt, die eine gute Lösung für die Wiederverwendung von Ausführungsplan haben. Es wird zu einem erhöhten Cache aus dem Ausführungsplan führen, der die Leistung beeinflusst.

  • Wie handelt es sich bei Nhibernate aus dem Ausführungsplan?
  • Werden Ausführungsplan in Nhibernate wiederverwendet?
War es hilfreich?

Lösung

Um Ihre erste Frage zu beantworten, behandelt NHiNRNATE keine Ausführungspläne. SQL Server übernimmt Ausführungspläne. Wenn der von NHibernate erzeugte dynamische SQL parametrisiert wird, werden die Pläne als "vorbereitet" klassifiziert und werden wiederverwendet, wobei die in jeder nachfolgenden Ausführung bereitgestellten Parameter dieselbe optimierte Abfrageplan erzeugen können. Wenn die dynamische SQL nicht parametrisiert ist, wird der Ausführungsplan als "Adhoc" und klassifiziert und klassifiziert könnte immer noch wiederverwendet werden.

Ich verwende dieses Bit T-SQL, um die Cache-Größen für verschiedene Abfragepläne zu überwachen. Ich glaube, ich habe dies von Paul Randals Website (http://www.sqlskills.com/blogs/paul/) kopiert, aber es ist so lange her, dass ich es nicht mehr sicher kann.

SELECT 
    objtype AS [CacheType],
    count_big(*) AS [Total Plans],
    sum(cast(size_in_bytes as decimal(12,2)))/1024/1024 AS [Total MBs],
    avg(usecounts) AS [Avg Use Count],
    sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024 AS [Total MBs - USE Count 1],
    sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC;
GO

Andere Tipps

Orms sind normalerweise nicht das Problem selbst, es ist die Art und Weise, wie sie verwendet werden. SQL Server generiert den Ausführungsplan. Nhibernate kann eine Abfrage erzeugen, die dazu führt, dass SQL einen schlechten Ausführungsplan erzeugt. Wenn Sie Variablen in Ihren Abfragen verwenden, können Ausführungspläne wiederverwendet werden. Die String -Verkettung verhindert normalerweise die Wiederverwendung von Planen. Sehen diese Frage Für mehr Information.

Neben dem bereits erwähnten Parametrisierungsproblem können alle Ormen wirklich beschissene Pläne erzeugen. Dies geschieht am häufigsten, wenn es viele Suchoptionen gibt, die eine wirklich große Where -Klausel in der SQL -Server -Abfrage verursachen, die voller oder Anweisungen ist, mit denen der SQL -Server nicht viel tun kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top