Windows Отладчик (Windbg) не может загрузить символы для SQL Файл дампа - PullRequest
1 голос
/ 08 апреля 2020

Я занимаюсь устранением неполадок, возникла проблема с автоматизированной работой, которая перестраивает наши индексы и текстовый поиск. Ошибка Specifi c:

2020-04-08 02: 46: 16.29 spid56 Истекло время ожидания при ожидании защелки: класс 'FCB', id 0000000629898238, тип 3, задача 0x0000000633017C28: 0, время ожидания 300 секунд , флаги 0x2000000019, собственное задание 0x0000000624023C28. Продолжая ждать.

Мой план состоял в том, чтобы найти и исследовать поток, связанный с задачей владения. Моя статья по этой статье: https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/

Проблема в том, что я не могу загрузить символы. Я попробовал исходный код Microsoft, а также источник NuGet:

.sympath srv*c:\Websymbols*https://symbols.nuget.org/download/symbols

.sympath cache*c:\MyCachedSymbols;srv*C:\websymbols*https://msdl.microsoft.com/download/symbols

Когда я делаю .reload / f, я получаю следующие сообщения:

0:060> .reload /f
.
SYMSRV:  BYINDEX: 0x395
         c:\symbols*https://msdl.microsoft.com/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found
SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found
SYMSRV:  UNC: c:\symbols\sqlservr.exe\5DF306DC60000\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.ex_
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

SYMSRV:  BYINDEX: 0x396
         https://msdl.microsoft.com/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: C:\ProgramData\dbg\sym\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found

SYMSRV:  UNC: C:\ProgramData\dbg\sym\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found

SYMSRV:  UNC: C:\ProgramData\dbg\sym\sqlservr.exe\5DF306DC60000\file.ptr - path not found

SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.ex_
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

SYMSRV:  BYINDEX: 0x397
         c:\websymbols*https://symbols.nuget.org/download/symbols
         sqlservr.exe
         5DF306DC60000

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\sqlservr.exe - path not found

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\sqlservr.ex_ - path not found

SYMSRV:  UNC: c:\websymbols\sqlservr.exe\5DF306DC60000\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/sqlservr.exe/5DF306DC60000/sqlservr.exe
SYMSRV:  HttpQueryInfo: 80190193 - HTTP_STATUS_FORBIDDEN
SYMSRV:  RESULT: 0x80190193
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\sqlservr.exe - file not found

DBGENG:  C:\Program Files\Microsoft SQL Server\MSSQL12.ERPODBVMI\MSSQL\Binn\sqlservr.exe - Couldn't map image from disk.

Unable to load image C:\Program Files\Microsoft SQL Server\MSSQL12.ERPODBVMI\MSSQL\Binn\sqlservr.exe, Win32 error 0n2

DBGENG:  sqlservr.exe - Partial symbol image load missing image info
DBGHELP: Module is not fully loaded into memory.
DBGHELP: Searching for symbols using debugger-provided data.
SYMSRV:  BYINDEX: 0x398
         c:\websymbols*https://symbols.nuget.org/download/symbols
         sqlservr.pdb
         7B78390C11144A34B1C95415F29068192

SYMSRV:  PATH: c:\websymbols\sqlservr.pdb\7B78390C11144A34B1C95415F29068192\sqlservr.pdb

SYMSRV:  RESULT: 0x00000000
*** WARNING: Unable to verify timestamp for sqlservr.exe
DBGHELP: sqlservr - public symbols  
        c:\websymbols\sqlservr.pdb\7B78390C11144A34B1C95415F29068192\sqlservr.pdb

Может кто-нибудь сказать мне, почему Я получаю эти ошибки пути? Когда я смотрю на папки с символами, я вижу, что они были заполнены через Интернет, но по какой-то причине они, похоже, не загружаются.

Спасибо!

Added: Stack Text
STACK_TEXT:  
KERNELBASE!RaiseException+0x68
sqlservr!CDmpDump::Dump+0x65
sqllang!SQLDumperLibraryInvoke+0x1e4
sqllang!SQLLangDumperLibraryInvoke+0x15e
sqllang!CImageHelper::DoMiniDump+0x426
sqllang!stackTrace+0x9d5
sqlmin!LatchBase::DumpOnTimeoutIfNeeded+0x261
sqlmin!LatchBase::PrintWarning+0x43d
sqlmin!LatchBase::Suspend+0xb95
sqlmin!LatchBase::AcquireInternal+0x415
sqlmin!FCB::GetAutoLatch+0x3b
sqlmin!FileMgr::GetFileOperationFCB+0xe0
sqlmin!FGCB::GrowAFile+0x38a
sqlmin!MakeSpaceInFileGroup+0x4a
sqlmin!AllocationReq::AllocatePages+0x2597
sqlmin!AllocationReq::Allocate+0xf3
sqlmin!AllocateHoBtDataPage+0x5fd
sqlmin!IndexPageManager::AllocatePage+0x1b8
sqlmin!SplitPage+0xb81
sqlmin!IndexDataSetSession::InsertSmallRecord+0x1a1d
sqlmin!IndexDataSetSession::InsertRowInternal+0x2de1
sqlmin!DatasetSession::InsertRow+0x163
sqlmin!RowsetNewSS::InsertRow+0x26
sqlmin!CValRow::SetDataX+0x5b
0x00007ffd`36b320df


ADDING INFO FROM OWNING THREAD

0:060> ~*e .echo ThreadId:; ?? @$tid; r? @$t1 = ((ntdll!_NT_TIB *)@$teb)->StackLimit; r? @$t2 = ((ntdll!_NT_TIB *)@$teb)->StackBase; s -d @$t1 @$t2  0x0000000624023C28
ThreadId:
unsigned int 0x1238
ThreadId:
unsigned int 0x1160
ThreadId:
unsigned int 0x1a8c
ThreadId:
unsigned int 0x1a94
ThreadId:
unsigned int 0x1a98
ThreadId:
unsigned int 0x1a9c
ThreadId:
unsigned int 0x1aa0
ThreadId:
unsigned int 0x1aa4
ThreadId:
unsigned int 0x1aa8
ThreadId:
unsigned int 0x1aac
ThreadId:
unsigned int 0x1ab0
ThreadId:
unsigned int 0x1abc
ThreadId:
unsigned int 0x1ac0
ThreadId:
unsigned int 0x1ac4
ThreadId:
unsigned int 0x1ac8
ThreadId:
unsigned int 0x1acc
ThreadId:
unsigned int 0x1b08
ThreadId:
unsigned int 0x1b0c
ThreadId:
unsigned int 0x1848
ThreadId:
unsigned int 0x18dc
ThreadId:
unsigned int 0x18cc
ThreadId:
unsigned int 0x1964
ThreadId:
unsigned int 0x19c4
ThreadId:
unsigned int 0x19cc
ThreadId:
unsigned int 0x19dc
ThreadId:
unsigned int 0x19e0
ThreadId:
unsigned int 0x1a04
ThreadId:
unsigned int 0x63c
ThreadId:
unsigned int 0x1a5c
ThreadId:
unsigned int 0x19f0
ThreadId:
unsigned int 0x1a58
ThreadId:
unsigned int 0x1a4c
ThreadId:
unsigned int 0x1a60
ThreadId:
unsigned int 0x1a48
ThreadId:
unsigned int 0xd10
ThreadId:
unsigned int 0x18c8
ThreadId:
unsigned int 0x1d24
ThreadId:
unsigned int 0x1d34
ThreadId:
unsigned int 0x1d78
ThreadId:
unsigned int 0x1ddc
ThreadId:
unsigned int 0x15b8
ThreadId:
unsigned int 0x1510
ThreadId:
unsigned int 0x14f0
ThreadId:
unsigned int 0x3ec
ThreadId:
unsigned int 0x1f00
ThreadId:
unsigned int 0x1420
ThreadId:
unsigned int 0x910
ThreadId:
unsigned int 0xb4c
ThreadId:
unsigned int 0x8f8
ThreadId:
unsigned int 0x144c
ThreadId:
unsigned int 0x620
ThreadId:
unsigned int 0x708
ThreadId:
unsigned int 0xe48
ThreadId:
unsigned int 0x1498
ThreadId:
unsigned int 0x132c
ThreadId:
unsigned int 0xa58
ThreadId:
unsigned int 0x18a4
ThreadId:
unsigned int 0x3158
ThreadId:
unsigned int 0x3614
ThreadId:
unsigned int 0x34f0
ThreadId:
unsigned int 0x27b4
ThreadId:
unsigned int 0x3fe8
ThreadId:
unsigned int 0x43c0
ThreadId:
unsigned int 0x38f8
ThreadId:
unsigned int 0x42c0
ThreadId:
unsigned int 0x34f4
ThreadId:
unsigned int 0x43ec
ThreadId:
unsigned int 0x42f8
ThreadId:
unsigned int 0x23ac
ThreadId:
unsigned int 0x3894
ThreadId:
unsigned int 0x3ca0
ThreadId:
unsigned int 0x3efc
ThreadId:
unsigned int 0x3944
ThreadId:
unsigned int 0x31cc
ThreadId:
unsigned int 0x397c
ThreadId:
unsigned int 0x3a64
ThreadId:
unsigned int 0x4080
ThreadId:
unsigned int 0x3cd4
ThreadId:
unsigned int 0x2c90
ThreadId:
unsigned int 0x3f54
ThreadId:
unsigned int 0x4390
ThreadId:
unsigned int 0x4398
ThreadId:
unsigned int 0x4040
ThreadId:
unsigned int 0x4540
ThreadId:
unsigned int 0x46f0
ThreadId:
unsigned int 0x45b8
ThreadId:
unsigned int 0x39f4
ThreadId:
unsigned int 0x462c
ThreadId:
unsigned int 0x57c
ThreadId:
unsigned int 0x38d8

1 Ответ

0 голосов
/ 09 апреля 2020

комментарий 1

он ищет exe не pdb попробуйте .chkimg на sqlserver.exe попробуйте использовать symchk

Reply1

Почему он ищет файл .exe

комментарий 2

из опубликованного вами вывода sqlserver.pdb был загружен должным образом с использованием частичной информации, предоставленной отладчиком, пути все указывает на расширение .exe, а не расширение .pdb. symsrv часто загружает официальный двоичный файл вместе с pdb, если он считает, что приложение может быть повреждено, подключенная память исправлена ​​независимо от того, какая команда .chkimg, которую я разместил в предыдущем комментарии, также загрузит официальный двоичный файл, если он существует. для сравнения с изображением в памяти

комментарий 3

это особенно верно при отладке дампа, возможно, что sqlserver.exe вы установили в p c отличается от sqlserver.exe, из которого был создан дамп

комментарий 4,5

first do lm и посмотрите, загружен ли ваш pdb, затем запустите! анализ -v, чтобы получить предварительное понимание, а затем подумайте о копировании exe, если бы это была единственная проблема с exe, я бы сказал, go вперед, скопируйте ее, но sql может иметь массу зависимостей

lm - команда windbg для загрузки модулей, которые она обычно выводит, если символы были правильно или нет, а также отображает путь загруженного pdb

текст стека, который вы разместили, является стеком стека В потоке, который написал мини-дамп, говорится, что он написал мини-дамп, потому что превышен некоторый таймаут

sqllang!CImageHelper::DoMiniDump+0x426
sqllang!stackTrace+0x9d5
sqlmin!LatchBase::DumpOnTimeoutIfNeeded+0x261

у вас есть> = 60 потоков, вам может понадобиться найти поток, которому принадлежит защелка, и выяснить, почему он владеет так долго, что другой поток перестал ждать и записать мини-дампы

Я только что просмотрел связанную статью в вашем запросе, она показывает вам, как отбросить меч во всех запущенных потоках, и посмотрите на это. стек потоков следует за ним

в основном все, что он делает, это находит базу стека и вершину стека каждого поток в процессе и ищет dword, который является потоком-владельцем между этими областями

, изменяет этот поток и сбрасывает стек

...