15秒以上かかるI / O要求


31

通常、毎週の完全バックアップは約35分で完了し、毎日の差分バックアップは約5分で完了します。火曜日以来、デイリーは完了するのにほぼ4時間かかりました。偶然にも、新しいSAN /ディスク構成を取得した直後にこれが起こり始めました。

サーバーは運用環境で実行されており、全体的な問題はなく、スムーズに実行されていることに注意してください-主にバックアップパフォーマンスに現れるIOの問題を除きます。

バックアップ中にdm_exec_requestsを見ると、バックアップは常にASYNC_IO_COMPLETIONで待機しています。ああ、ディスクの競合があります!

ただし、MDF(ログはローカルディスクに保存されます)もバックアップドライブにもアクティビティはありません(IOPS〜= 0-十分なメモリがあります)。ディスクキューの長さも〜= 0です。CPUは2〜3%程度動きますが、問題はありません。

SANはDell MD3220i、6x10k SASドライブで構成されるLUNです。サーバーは2つの物理パスを介してSANに接続され、それぞれがSANへの冗長接続を備えた個別のスイッチを通過します。合計4つのパスで、そのうち2つは常にアクティブです。タスクマネージャーを使用して両方の接続がアクティブであることを確認できます。負荷を完全に均等に分割します。両方の接続が1G全二重を実行しています。

以前はジャンボフレームを使用していましたが、ここでは問題を除外するために無効にしました-変更はありません。他のLUNに接続されている別のサーバー(同じOS + config、2008 R2)があり、問題はありません。ただし、SQL Serverを実行するのではなく、その上でCIFSを共有するだけです。ただし、そのLUNの優先パスの1つは、問題のあるLUNと同じSANコントローラー上にあるため、それも除外しました。

いくつかのSQLIOテスト(10Gテストファイル)を実行すると、問題があるにもかかわらずIOが適切であることが示されているようです。

sqlio -kR -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt
IOs/sec:  3582.20
MBs/sec:    27.98
Min_Latency(ms): 0
Avg_Latency(ms): 3
Max_Latency(ms): 98
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%: 45  9  5  4  4  4  4  4  4  3  2  2  1  1  1  1  1  1  1  0  0  0  0  0  2

sqlio -kW -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt
IOs/sec:  4742.16
MBs/sec:    37.04
Min_Latency(ms): 0
Avg_Latency(ms): 2
Max_Latency(ms): 880
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%: 46 33  2  2  2  2  2  2  2  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  1

sqlio -kR -t8 -o8 -s30 -fsequential -b64 -BN -LS -Fparam.txt
IOs/sec:  1824.60
MBs/sec:   114.03
Min_Latency(ms): 0
Avg_Latency(ms): 8
Max_Latency(ms): 421
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%:  1  3 14  4 14 43  4  2  1  1  1  1  1  1  0  0  0  0  0  0  0  0  0  0  6

sqlio -kW -t8 -o8 -s30 -fsequential -b64 -BN -LS -Fparam.txt
IOs/sec:  3238.88
MBs/sec:   202.43
Min_Latency(ms): 1
Avg_Latency(ms): 4
Max_Latency(ms): 62
histogram:
ms: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
%:  0  0  0  9 51 31  6  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

これらは決して徹底的なテストではないことを理解していますが、完全なゴミではないことを知って安心しています。2つのアクティブなMPIOパスによって、書き込みパフォーマンスが向上しますが、読み取りではそのうちの1つしか使用されないことに注意してください。

アプリケーションイベントログを確認すると、次のようなイベントが散らばっています。

SQL Server has encountered 2 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [J:\XXX.mdf] in database [XXX] (150).  The OS file handle is 0x0000000000003294.  The offset of the latest long I/O is: 0x00000033da0000

これらは一定ではありませんが、定期的に発生します(1時間に2、3回、バックアップ中)。そのイベントに加えて、システムイベントログには以下が記録されます。

Initiator sent a task management command to reset the target. The target name is given in the dump data.
Target did not respond in time for a SCSI request. The CDB is given in the dump data.

これらは、同じSAN / Controllerで実行されている問題のないCIFSサーバーでも発生しますが、私のグーグルからは重要ではないようです。

すべてのサーバーが同じNICを使用していることに注意してください-Broadcom 5709Cは最新のドライバーを搭載しています。サーバー自体はDell R610のものです。

次に何をチェックするかわかりません。助言がありますか?

更新-perfmonの実行
平均を記録してみました。バックアップ実行中のディスク秒/読み取りおよび書き込みパフォーマンスカウンター。バックアップは燃え上がり始め、基本的に50%で停止し、100%に向かってゆっくりとクロールしますが、本来の20倍の時間がかかります。

バックアップ開始時のタスクモニター 使用中の両方のSANパスが表示され、その後ドロップオフします。

同じ間に実行するバックアップは15:38:50頃に開始されました-すべてが見栄えが良いことに注目してください。その後、一連のピークがあります。私は書き込みに関心がなく、読み取りのみがハングしているようです。

バックアップ終了時のタスクモニター 非常にわずかなアクションのオン/オフに注意してください。

同じ期間のパフォーマンス 平均は全体的に良好ですが、最大12秒に注意してください。

更新-NULデバイス
へのバックアップ読み取りの問題を切り分けて物事を単純化するために、次を実行しました。

BACKUP DATABASE XXX TO DISK = 'NUL'

結果はまったく同じでした-バースト読み取りで開始してからストールし、時々操作を再開します:

結果

更新-IOの停止 Shawnの推奨
に従って、Jonathan Kehayias and Ted Kruegersの(29ページ)からdm_io_virtual_file_statsクエリを実行しました。上位25ファイル(各1データファイル-結果はすべてデータファイル)を見ると、読み取りは書き込みよりも悪いように見えます-書き込みはSANキャッシュに直接送られるのに対し、コールドリードはディスクをヒットする必要があるためです-ただ推測。

IOストール

更新-待機統計待機統計
を収集するために3つのテストを行いました。グレンベリー/ポールランダルズスクリプトを使用して待機統計を照会します。そして確認のために-バックアップはテープではなく、iSCSI LUNで行われています。ローカルディスクに行った場合の結果は似ており、結果はNULバックアップに似ています。

クリアされた統計。10分間実行、通常の負荷: バックアップなし

クリアされた統計。10分間実行、通常の負荷+通常のバックアップの実行(完了しなかった): 通常のバックアップ

クリアされた統計。10分間実行、通常の負荷+ NULバックアップの実行(完了しませんでした): NULバックアップ

更新-WTF、Broadcom?
Mark Storey-Smithsの提案とBroadcom NICのKyle Brandtsの以前の経験に基づいて、私はいくつかの実験を行うことにしました。複数のアクティブパスがあるので、停止を引き起こすことなく、NICの構成を1つずつ比較的簡単に変更できます。

TOEとLarge Send Offloadを無効にすると、ほぼ完璧な実行が得られました。 ここに画像の説明を入力してください

Processed 1064672 pages for database 'XXX', file 'XXX' on file 1.
Processed 21 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064693 pages in 58.533 seconds (142.106 MB/sec).

犯人は、TOEとLSOのどちらですか?TOEが有効、LSOが無効: ここに画像の説明を入力してください

Didn't finish the backup as it took forever - just as the original problem!

TOEは無効、LSOは有効-見栄えが良い: ここに画像の説明を入力してください

Processed 1064680 pages for database 'XXX', file 'XXX' on file 1.
Processed 29 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064709 pages in 59.073 seconds (140.809 MB/sec).

また、コントロールとして、TOEとLSOの両方を無効にして、問題が解決したことを確認しました。 ここに画像の説明を入力してください

Processed 1064720 pages for database 'XXX', file 'XXX' on file 1.
Processed 13 pages for database 'XXX', file 'XXX' on file 1.
BACKUP DATABASE successfully processed 1064733 pages in 60.675 seconds (137.094 MB/sec).

結論として、有効なBroadcom NIC TCPオフロードエンジンが問題を引き起こしたようです。TOEが無効になるとすぐに、すべてが魅力のように機能しました。今後Broadcom NICを注文することはないでしょう。

更新-CIFSサーバーがダウンする
今日、同一の機能するCIFSサーバーがIO要求のハングを示し始めました。このサーバーはSQL Serverを実行しておらず、単純なWindows Web Server 2008 R2がCIFSを介して共有を提供していました。TOEを無効にするとすぐに、すべてがスムーズに動作するようになりました。

Broadcom NICをまったく使用できない場合、つまりBroadcom NICで再びTOEを使用しないことを確認します。


データファイルは専用の6ディスクRAID10 LUN上にあります。バックアップファイルは別のLUNに保存されます。これまでのところ、バックアップドライブ/ファイルが影響を受けているという兆候は見られず、データドライブのみのようです。
マークS.ラスムッセン

書き込みキャッシュはすべてのLUNで有効になっており、デフォルト設定はボード全体です。NULバックアップでさえ問題を示しているため、書き込み関連の問題を排除するため、キャッシュに関連するとは思いません。読み取り用に、各コントローラーには2GBの読み取りキャッシュに加えて、ホスト上のメモリ(十分なメモリを備えた無限のPLEがあります)があります。
マークS.ラスムッセン

回答:


14

すべてのサーバーが同じNICを使用していることに注意してください-Broadcom 5709Cは最新のドライバーを搭載しています。サーバー自体はDell R610のものです。

Kyle BrandtはBroadcomネットワークカードについて、自分自身の(繰り返した)経験を反映した意見を持っています。

Broadcom、Die Mutha

私の問題は常にTCPオフロード機能に関連しており、99%の場合、他のネットワークカードを無効にしたり切り替えたりすることで症状が解決しました。(お客様の場合のように)Dellサーバーを使用する1つのクライアントは、常に個別のIntel NICを注文し、ビルド時にオンボードBroadcomカードを無効にします。

このMSDNブログ投稿で説明されているように、OSで次のように無効化することから始めます。

netsh int ip set chimney DISABLED

IIRCでは、状況によってはカードドライバーレベルで機能を無効にする必要がある場合がありますが、無効にすることは間違いありません。


4

私はSAN /ディスクの専門家ではありません(ここには私よりも詳しい人がいます)...私がやったことを共有し、ほとんど読んでいます:)

Jonathan KehayiasとTed Kruegerは、ディスクパフォ​​ーマンスに関するいくつかの良い情報を含む「Troubleshooting SQL Server」という本を書きました。ここから無料でPDFを入手できます。(私はこれも私の机のために印刷版を買うかもしれません。)

とにかく、sys.dm_io_virtual_file_statsを確認し、データファイルの平均遅延を確認するために使用できる優れたクエリがあります。RAID10は、データファイルが存在する理想的な構成ではない場合があります。


RAID10が最適な構成ではなかったとしても、ここで問題であることはわかりません。通常の使用中は、ディスク上のアクティビティは実質的にゼロであり、間違ったRAIDレベルでは、このような低速のIO要求を考慮できません。SQLIOが示すように、2〜4kのIOPSで200MB / s +で書き込み、100MB / s +で読み取ることができるため、十分な容量があります。dm_io_virtual_file_statsクエリ結果の結果で投稿を更新しました。直接開くと、画像が大きくなることに注意してください。
マークS.ラスムッセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.