Eine Wiederholung dieser Frage auf MSDN: Blocked-Process-Report: Was ist diese Waitresource? "OBJECT: 32767: 124607697: 0 [COMPILE]"
Ich habe diese Aussagen in Profiler abgefangen. Sie haben alle eine Dauer von mehr als 3 Sekunden. Einige über 10+. Die Blockierungsaktivität entspricht der Verknüpfung von MSDN .
Die Anrufe verwenden alle 3-teilige Benennung. Alle geben einen anderen Prozess in der folgenden Form an:
exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL
exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL
exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL
exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, NULL
Was kann ich tun, um diese Blockierungsstufe zu reduzieren?
(edit) Ich sehe jetzt dasselbe für:
exec [db1].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db2].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db3].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db4].[sys].sp_primary_keys_rowset N'view1', N'dbo'
Es ist etwas systemisches im Gange, aber ich weiß nicht, was ich sonst tun soll. Der Anrufer ist VB6 über ADO. Es ist ADO, der diese Anrufe tätigt.
Ein Beispiel für einen Bericht über gesperrte Prozesse finden Sie weiter unten
<blocked-process-report>
<blocked-process>
<process
id="process5bc1288"
taskpriority="0"
logused="0"
waitresource="OBJECT: 32767:124607697:0 [COMPILE]"
waittime="28887"
ownerId="11638114050"
transactionname="sqlsource_transform">
<executionStack>
<frame
line="1"
sqlhandle="0x000000000000000000000000000000000000000000000000">
<sqltext>EXEC [dbo].[spAlertDetectByPoll] ':V:^RMAlert^:Z:^&N&#RMAlert#&S&#L#&UID&#19#&AGN&#1#&DFC&#103#^', 1</sqltext>
</frame>
</executionStack>
<inputbuf>
SET NO_BROWSETABLE OFF </inputbuf>
</process>
</blocked-process>
<blocking-process>
<process
status="suspended"
waitresource="OBJECT: 32767:124607697:0 [COMPILE]"
waittime="35693"
spid="1121"
sbid="0"
ecid="0"
priority="0"
trancount="0"
lastbatchstarted="2013-12-16T14:45:48.960">
<executionStack>
<frame
line="1"
sqlhandle="0x000000000000000000000000000000000000000000000000" />
</executionStack>
<inputbuf>
SET NO_BROWSETABLE OFF </inputbuf>
</process>
</blocking-process>
</blocked-process-report>
sql-server-2008-r2
blocking
Dan Holmes
quelle
quelle
Antworten:
Es gibt einen ausgezeichneten Blog-Beitrag http://blogs.msdn.com/b/support_sql_france/archive/2012/02/07/sql-server-compilation-gateways-and-resource-semaphore-query-compile.aspx , der erklärt, was ist Ereignis.
SQL Server ermöglicht eine festgelegte Anzahl von Kompilierungen, die auf ihrer Komplexität basieren. Es gruppiert sie in kleine, mittlere und große. Bei umfangreichen Kompilierungen kann es immer nur eine Kompilierung geben. Nehmen wir also an, alle Ihre Procs werden als umfangreich betrachtet, und jede muss seriell kompiliert werden. Das könnte für die Sperrung verantwortlich sein.
Ich denke, dass es mehrere Ansätze für das Problem gibt - erwägen Sie mehr Ressourcen (mehr CPUs ermöglichen es, dass mehr kleine und mittlere Abfragen gleichzeitig ausgeführt werden, oder sie können den Schwellenwert für das als mittel eingestufte Problem erhöhen). Außerdem kann das Problem durch mehr Arbeitsspeicher behoben werden.
Wenn Sie wie die meisten von uns sind, ist dies möglicherweise nicht möglich. Eine andere Möglichkeit besteht darin, die ADO-Anrufe zu überprüfen und festzustellen, ob die Anzahl der Anrufe verringert oder verteilt werden kann, damit nicht alle Anrufe gleichzeitig getätigt werden. Das Verringern der Anzahl zu einem bestimmten Zeitpunkt sollte Ihre Wartezeit verringern.
Wenn dies nicht funktioniert, können Sie die Kompilierbarkeit der gespeicherten Prozesse korrigieren. Zerlegen Sie sie möglicherweise in kleinere Teile, um sie auf die kleinen oder mittleren Eimer zu reduzieren und mehr parallele Kompilierungen zu ermöglichen. Oder bestimmen Sie, warum die Procs jedes Mal neu kompiliert werden müssen. Prüfen Sie, ob sie so umgeschrieben werden können, dass sie nicht neu kompiliert werden müssen. Schließlich würde ich die Verwendung von Plan-Handbüchern in Betracht ziehen. Dadurch können die Procs vorkompiliert werden und es kann Zeit gespart werden.
Ich hoffe, das hilft
quelle