[a15] sql server trouble shooting tips from support team by takashi honma
DESCRIPTION
TRANSCRIPT
A15:TROUBLE SHOOTING
TIPS
FROM SUPPORT TEAMTakashi Honma
Support Escalation Engineer
Microsoft SQL Server Support
A15:俺の SQL SERVER が、意味不明なダンプを出力してるなんて許せない
Takashi Honma
Support Escalation Engineer
Microsoft SQL Server Support
CONTENTS
Who’s Takashih?
セッションの目的
Dump file について
Access Violation
Assertion
Latch Timeout
Non-yielding Scheduler
Deadlocked Schedulers
Non-yielding Resource Monitor
Non-yielding IOCP Listener
WHO’S TAKASHIH?
経歴
1996年4月 東芝系子会社入社。Oracle 等をバックエンドとした開発を担当
2001年5月 Microsoft入社。SQL Serverサポートに配属。今に至る
SQL Serverサポートチーム
Engine に関するお問い合せは、TM 1/EE 1/SEE 2/SE 8で対応中
別にプレミアサポートでオンサイトを行うプレミアフィールドエンジニアというチームが存在
セッションの目的
現行サポートされるSQL Serverでは、多くの場面で診断用のダンプが出力される
運用において出力されたダンプが、何の現象の診断のために出力されたかを知ることで、早急に対処が必要な状況なのか判断が行える
また、その状況を通して SQL Serverの内部アーキテクチャを知る手掛かりともなる
ただし、すごい地味な発表になります
DUMP FILE について(1)
診断用のダンプは、SQL Serverの LogフォルダにSQLDump0001.mdmpという形式のファイル名で出力される
このファイルを発見したら、まず ERRORLOGの該当時間帯の出力を確認し、何の診断用ダンプなのか確認する
DUMP FILE について(2)
DUMP FILE について(3)
出力される主なダンプファイル
Access Violation
Assertion
Latch Timeout
Non-yielding Scheduler
Deadlocked Schedulers
Non-yielding Resource Monitor
Non-yielding IOCP Listener
DBCC CHECKDB
DUMP FILE について(3)
出力される主なダンプファイル
Access Violation
Assertion
Latch Timeout
Non-yielding Scheduler
Deadlocked Schedulers
Non-yielding Resource Monitor
Non-yielding IOCP Listener
ACCESS VIOLATION(1)
ACCESS VIOLATION(2)
Access Violation(AV) は、アクセス許可されていないメモリへの読み取り、書き込みが行われた際に、OS側が発生させる例外
SQL Serverは、全ての例外をハンドリングしているので、AVが発生しても、基本的にプロセスが落ちることはない
ただし、3rd Party 製のモジュールでの例外はハンドルできないので意図的に終了する
例外エラーは c0000005なので、この番号が含まれていれば AVとして判断できる
ACCESS VIOLATION(3)
想定される原因
データベース破損
SQL Serverの不具合
SQL Serverのプロセス空間内でのメモリ破損
対応
データベースの整合性確認
SQL Serverのサービスパックレベルの確認
ハードウェアのチェック
ASSERTION(1)
ASSERTION(2)
Assertionは、SQL Serverがコード上で条件がTrueであることを確認している処理。条件が Falseであった場合、ダンプを出力する。
OS側がトリガするAVなどの例外とは異なり、SQL Serverが行っている論理チェック
SQL Server のコード上に多数埋め込まれている
ASSERTION(3)
想定される原因
データベース破損
SQL Server の不具合
SQL Server のプロセス空間内でのメモリ破損
対応
データベースの整合性確認
公開情報の確認
ハードウェアのチェック
LATCH TIMEOUT(1)
LATCH TIMEOUT(2)
Latchは SQL Server が内部で使用する排他オブジェクト
Lockと異なりユーザが制御できない
通常300秒でTimeoutする
必ずダンプを出力するのではなくラッチの種類等によってダンプの出力を制御している
LATCH TIMEOUT(3)
想定される原因
パフォーマンス問題
MSSQLSERVER_846
MSSQLSERVER_847
SQL Serverの不具合
対応
ボトルネックの調査
SQL Serverの設定確認
公開情報の確認
NON-YIELDING SCHEDULER(1)
NON-YIELDING SCHEDULER(2)
まずは、SCHEDULERについて理解することが必要
SCHEDULER
SQL Server が CPU毎に1つ作成するオブジェクトで、スレッドを管理
この Schedulerを獲得したスレッドのみが処理を行える
Worker Threads が各 Schedulerに割り当てられる
クライアントからの要求は、各 Schedulerに割り振られる
sys.dm_os_schedulers等で情報を確認可能
NON-YIELDING SCHEDULER(3)
前述のSchedulerを1つの処理が専有した場合、同じ Schedulerを共有する他の処理が動作できない
この状態が特定のスケジューラーで1分以上継続している状態を検出した際に発生するのがNon-Yielding Scheduler
エラー 17883で定義されている
既定では、SQL Server起動後最初のNon-Yielding Schedulerのみダンプを出力する
単発で発生した分には大きな問題を示すものではない
NON-YIELDING SCHEDULER(4)
想定される原因
パフォーマンス問題(特にディスク)
SQL Serverの不具合
対応
ボトルネック調査
公開情報の確認
DEADLOCKED SCHEDULERS(1)
DEADLOCKED SCHEDULERS(2)
Non-Yielding Scheduler と同様に Schedulerの状態を示す
エラー17884で定義
すべての Scheduler で、スレッドが使い果たされて、スレッド待ちが発生し、かつ処理が進んでいない状態
Non-Yielding Scheduler と同様に既定では最初の一回だけダンプが出力される
DEADLOCKED SCHEDULERS(3)
想定される原因
パフォーマンス問題(ブロッキング)
一般的には、重度のブロッキングによって発生
SQL Serverの不具合
対応
ブロッキングの調査
公開情報の確認
NON-YIELDING RESOURCE
MONITOR(1)
NON-YIELDING RESOURCE
MONITOR(2)
ResourceMonitorは、SQL Serverのコンポーネントの1つで、メモリプレッシャーの状況下で、メモリリソースの管理を行う
このコンポーネントが何らかの処理に専有された状況を示す
既定では SQL Server起動後の最初の一回のみダンプが出力される
NON-YIELDING RESOURCE
MONITOR(3)
想定される原因
パフォーマンス問題(メモリ不足)
一般的には、メモリ不足の状況下でメモリ操作に時間が掛かる状況で、その他のメモリ不足を示すエラーと共に出力される
SQL Serverの不具合
対応
SQL Serverの設定確認
メモリ使用状況の確認
公開情報の確認
NON-YIELDING IOCP LISTENER(1)
NON-YIELDING IOCP LISTENER(2)
IOCP LISTENER と呼ばれるスレッドが、パケットのI/Oを管理している
このスレッドが停止すると、SQL Serverとの通信が停止する
この状況を検出した場合に発生するのが、この Non-Yielding IOCP
Listener
既定では SQL Server起動後の最初の一回のみダンプが出力される
NON-YIELDING IOCP LISTENER(3)
想定される原因
外的要因
パフォーマンス問題(メモリ不足)
SQL Serverの不具合
対応
SQL Serverの設定確認
メモリ使用状況の確認
公開情報の確認
まとめ
出力されたダンプの種類に応じて、確認すべき点を確認していく
必ずしも、初期段階でダンプファイルを解析する必要はない
診断用のダンプが出力されたからといって、必ずしも重大な問題を示すわけではないので慌てずに対処する
参考
WDK and WinDbg downloads
Use the Microsoft Symbol Server to obtain debug symbol files