[A15] SQL Server Trouble Shooting Tips from Support Team by Takashi Honma

Post on 30-Nov-2014

445 views 2 download

description

 

Transcript of [A15] SQL Server Trouble Shooting Tips from Support Team by Takashi Honma

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