Auf unserem SQL-Produktionsserver ist ein Problem aufgetreten, bei dem das Löschen temporärer Tabellenobjekte lange dauert (offensichtlich, wenn ein kleiner und synchroner Drop verwendet wird). Ich kann dies nicht auf anderen SQL-Servern reproduzieren (ähnlich spezifiziert mit der gleichen Anzahl von Spindeln, die Tempdb-Datendateien bedienen (aufgeteilt in die gleiche Anzahl von Dateien (1 pro physischem Kern)). Unter SQL 2005 Enterprise (SP2 - 3042).
Update: ein weiterer Faktor - der am wahrscheinlichsten aussieht. Auf diesem Server befinden sich> 500 Datenbanken. Ein anderer Server mit> 800 führt diese Tropfen ebenfalls langsam aus. Das ist der einzige andere Server, den ich mit vielen DBS habe.
Zweites Update: Durch einen Neustart der Problemserver können die Anweisungen create und drop sofort ausgeführt werden. Die Leistung des Tests verschlechtert sich in den nächsten Stunden (während die Anwendung ausgeführt wird), bis er ein Plateau erreicht (was zu sein scheint). Ich habe einen Job im Hintergrund, der dies alle 30 Minuten testet. Ich werde nach ein paar Tagen sehen, welche Ergebnisse erzielt werden und ob die Ausführungszeiten gleich sind. Ich denke sie werden es sein.
Drittes Update: Während keine der ausführenden Anweisungen Latch-Wartezeiten für CPU-Ressourcen angezeigt hat, sehe ich bei Verwendung von sp_whoisactive, dass während eines Laufs mit delta_interval = 30 (Sekunden) bei laufender Abfrage das CPU_delta ungefähr 30.000 (Millisekunden?) Meldet und wenn ich während der Ausführung perf beobachte Während der Ausführungszeit scheint es einen Kernwert der CPU-Spitze zu geben. Diese befinden sich auf 16 CPU-Boxen, so dass es etwas schwierig sein kann, über perfmon zu sehen, wenn anderer Datenverkehr auftritt, aber es scheint, als würde sich bei der Ausführung von Drop-Anweisungen ein CPU-Wert erhöhen.
Das Erstellen und Zerstören von 20 winzigen temporären Tabellen mit eindeutigen Namen (eine Spalte, keine Zeilen) dauert auf den meisten Servern, auf denen ich es teste, weniger als 20 ms. Auf einem Server dauert es> 5 Sekunden. Die überwiegende Mehrheit (> 95%) der Zeit wird für die Drop-Anweisungen aufgewendet.
Während der Ausführung werden keine expliziten Wartezeiten und keine Blockierungen gemeldet, und perfmon zeigt weder für Daten- noch für Protokolldateien eine Belastung des E / A-Subsystems an.
Ich habe mir Spitzen- und niedrige Nutzungszeiten angesehen, wenn eine hohe Anzahl von Tabellen für die Zerstörung markiert und niedrig ist. Der Vorgang dauert ungefähr 5 Sekunden, um die 20 drop-Anweisungen zu verarbeiten, egal was passiert. Das Problem führt zu einer wahrnehmbaren (von Kunden) verlangsamten Reaktionsfähigkeit.
Beispielcode, ich habe 20 ähnliche Objekte erstellt, um das 5-Sekunden-Timing zu erhalten. Es scheint ungefähr 300 ms pro Tropfen zu sein.
PRINT CONVERT(varchar(30),GETDATE(),113)
CREATE TABLE [#Objects1]
(
[Id] uniqueidentifier NOT NULL
)
CREATE TABLE [#Objects12]
(
[Id] uniqueidentifier NOT NULL
)
...
DROP TABLE [#Objects1]
DROP TABLE [#Objects12]
...
PRINT CONVERT(varchar(30),GETDATE(),113)
Timing konsistent 5 bis 6 Sekunden für die Ausführung
11 Nov 2011 12: 56: 52: 073 - Beginnen Sie mit der Erstellung der temporären Tabelle
11 Nov 2011 12: 56: 52: 090 - Temporäre Tabellenerstellung beenden
11 Nov 2011 12: 56: 52: 090 - Beginnen Sie mit dem Löschen der temporären Tabelle
11 Nov 2011 12: 56: 57: 230 - Vollständiges Löschen der temporären Tabelle
Könnten Sie auch USE tempdb ausführen? DBCC LOGINFO; und notieren Sie die Anzahl der zurückgegebenen Zeilen. Bitte fügen Sie alle Ausgaben der Skripte Ihrer ursprünglichen Frage hinzu.
Ich bemerkte ursprünglich, dass ich ungefähr 271 Vlogs hatte, also schrumpfte ich und zog nach, um zu sehen, ob Fragmentierung ein Problem war. Machte keinen Unterschied. Aktuelle DBCC Loginfo
FileId,FileSize,StartOffset,FSeqNo,Status,Parity,CreateLSN
2,253952,8192,101603,2,64,0
2,262144,262144,101604,2,64,0
2,262144,524288,101605,2,64,85000000038300574
2,262144,786432,101606,2,64,85000000038300574
2,262144,1048576,101578,2,128,86000000001600001
2,262144,1310720,101579,2,128,86000000001600001
2,262144,1572864,101580,2,128,86000000001600001
2,262144,1835008,101581,2,128,86000000001600001
2,262144,2097152,101582,2,128,86000000001600001
2,262144,2359296,101583,2,128,86000000023400002
2,262144,2621440,101584,2,128,86000000023500756
2,327680,2883584,101585,2,128,86000000023500756
2,327680,3211264,101586,2,128,86000000023500756
2,393216,3538944,101587,2,128,86000000023500756
2,393216,3932160,101588,2,128,86000000023500756
2,458752,4325376,101589,2,128,86000000023500756
2,253952,4784128,101590,2,128,86000000023500756
2,270336,5038080,101591,2,128,86000000023500756
2,253952,5308416,101592,2,128,86000000023500756
2,270336,5562368,101593,2,128,86000000023500756
2,253952,5832704,101594,2,128,86000000023500756
2,335872,6086656,101595,2,128,86000000023500756
2,253952,6422528,101596,2,128,86000000023500756
2,401408,6676480,101597,2,128,86000000023500756
2,253952,7077888,101598,2,128,86000000023500756
2,466944,7331840,101599,2,128,86000000023500756
2,253952,7798784,101600,2,128,86000000023500756
2,253952,8052736,101601,2,128,86000000023500756
2,278528,8306688,101602,2,128,86000000023500756
2,133627904,8585216,101607,2,64,101336000000013600462
2,133627904,142213120,101563,0,128,101336000000013600462
2,133627904,275841024,101564,0,128,101336000000013600462
2,133627904,409468928,101565,0,128,101336000000013600462
2,133627904,543096832,101566,0,128,101336000000013600462
2,133627904,676724736,101567,0,128,101336000000013600462
2,133627904,810352640,101568,0,128,101336000000013600462
2,133627904,943980544,101569,0,128,101336000000013600462
2,133627904,1077608448,101570,0,128,101336000000013600462
2,133627904,1211236352,101571,0,128,101336000000013600462
2,133627904,1344864256,101572,0,128,101336000000013600462
2,133627904,1478492160,101573,0,128,101336000000013600462
2,133627904,1612120064,101574,0,128,101336000000013600462
2,133627904,1745747968,101575,2,128,101336000000013600462
2,133627904,1879375872,101576,2,128,101336000000013600462
2,134479872,2013003776,101577,2,128,101336000000013600462
Ausgabe der E / A-Statistiken :
Database Name,physical_name,io_stall_read_ms,num_of_reads,avg_read_stall_ms,io_stall_write_ms,num_of_writes,avg_write_stall_ms,io_stalls,total_io,avg_io_stall_ms
msdb,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBData.mdf,47691565,817329,58.4,10747142,533509,20.1,58438707,1350838,43.3
tempdb,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\templog.ldf,54457,30177,1.8,145691717,8235651,17.7,145746174,8265828,17.6
model,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modellog.ldf,547,122,4.4,2273,239,9.5,2820,361,7.8
tempdb,P:\tempdb_data3.mdf,2606066,1112043,2.3,17829023,1919954,9.3,20435089,3031997,6.7
tempdb,P:\tempdb_data2.mdf,2484793,1111808,2.2,17270161,1922735,9.0,19754954,3034543,6.5
tempdb,P:\tempdb_data5.mdf,2514469,1112086,2.3,17066589,1919802,8.9,19581058,3031888,6.5
tempdb,P:\tempdb_data7.mdf,2542070,1112551,2.3,17049649,1920204,8.9,19591719,3032755,6.5
tempdb,P:\tempdb_data6.mdf,2517767,1112237,2.3,17043756,1924983,8.9,19561523,3037220,6.4
tempdb,P:\tempdb_data0.mdf,2476811,1113570,2.2,17084779,1926333,8.9,19561590,3039903,6.4
tempdb,P:\tempdb_data4.mdf,2462179,1111649,2.2,17073336,1920058,8.9,19535515,3031707,6.4
tempdb,P:\tempdb_data1.mdf,2456317,1111859,2.2,16997589,1922438,8.8,19453906,3034297,6.4
model,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.mdf,5194,798,6.5,612,240,2.5,5806,1038,5.6
master,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf,40640,7326,5.5,2868,1548,1.9,43508,8874,4.9
msdb,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBLog.ldf,8015,950,8.4,1012107,312084,3.2,1020122,313034,3.3
master,H:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf,640,141,4.5,198283,99134,2.0,198923,99275,2.0
wait_type,wait_time_s,pct,running_pct
PAGEIOLATCH_EX,0.02,100.00,100.00
Die TokenAndPermUserStore-Größe beträgt 2952 KB.
SELECT SUM(single_pages_kb + multi_pages_kb) AS "SecurityTokenCacheSize(kb)" FROM sys.dm_os_memory_clerks WHERE name = 'TokenAndPermUserStore'
TRUCATEdie temporären Tabellen verwenden, wird dies die beschleunigen DROP. Ha, nur ein Scherz.