SQL Server Management Studio (SSMS) 2012 медленно отображать результаты только в сетке

890
Nico M

Обычно я использую Microsoft SQL Server Management Studio 2012 (11.0.3000.0) с результатами запроса, отображаемыми в виде сетки. По состоянию на 3 или 4 дня назад результаты запроса были довольно медленными, но только с перерывами. Например, простой запрос, такой как

SELECT GETDATE() 

потребуется 7 секунд (в соответствии с SSMS) для отображения текущей даты / времени. Если я запускаю запрос с включенной трассировкой / профилировщиком, я вижу, что запрос выполняется почти сразу же, хотя таймер SSMS продолжает работать, и в течение некоторого времени результаты не отображаются. Результирующее значение даты / времени совпадает с тем, которое отображает трассировка / профилировщик для столбца «StarTime». Обычно запрос возвращается через 1 секунду или менее, но если я выполню 5 или 6 раз, я поймаю проблему, и для ее завершения потребуется некоторое время.

Когда это происходит, мой четырехъядерный ноутбук будет загружать процессор до 25% (полное ядро ​​используется в течение всего периода времени), пока не будет построена сетка.

Я подключаюсь к локальному серверу (в моей локальной сети), который находится под очень малой нагрузкой, и, похоже, ни у кого в моей компании нет подобных проблем. Я установил SSMS 2014, чтобы увидеть, помогло ли это (не помогло). Думая, что это проблема с составлением самой DataGrid, я установил .NET 4.6, который тоже не помог.

Когда я запускаю результаты в текстовом виде, они появляются менее чем за секунду, каждый раз.

Кажется, это не проблема сети:

Reply from 192.168.10.47: bytes=32 time<1ms TTL=128  Ping statistics for 192.168.10.47: Packets: Sent = 24, Received = 24, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms 

У кого-нибудь есть предложения по поводу того, что я должен попробовать?

Я на Windows 7 (x64).

0

1 ответ на вопрос

0
Nico M

I was able to find the issue by running the query while monitoring the process with Process Monitor from the SysInternalSuite. When displaying query results to a grid, SQL Server Management Studio creates a .tmp file in C:\Users\username\AppData\Local\Temp\ named tmp####.tmp (where the #'s are randomly generated characters).

For whatever reason, my temp directory had been filled with 40,000+ these files (all of them empty) and Process Monitor was showing that when my query was not displaying results it was throwing thousands of "NAME COLLISION" errors trying to come up with a new name for the temp file it was trying to create.

Displaying Query Results to Text does not create a temp file which explained why that wasn't having an issue.

Deleting all the .tmp files from that temp directory fixed my issue immediately.

Hope this helps someone else.

Я узнал, почему временные файлы были созданы / оставлены позади. Это было связано с проблемой в последней версии (5.1.14) dbForge SQLComplete. При каждом сгенерированном раскрывающемся списке автозаполнения оставляются два файла tmp. Понижение версии до 5.0.28, которая, похоже, не имеет этой проблемы и сообщает поставщику. Nico M 8 лет назад 0