データベース管理者になることは、パフォーマンスの問題をトラブルシューティングする必要がある場合に非常に困難な場合があります。データベースサーバーは、アプリケーションエコシステムの1つのコンポーネントにすぎず、パフォーマンスの問題であると日常的に非難されています。 SQL Serverは、SANやネットワークと同様に、多くの人が理解していないブラックボックスの1つです。サーバーを監視する運用DBAは、SQL Serverが通常のベースラインの範囲外で実行されているかどうかをすばやく特定できますが、SANとネットワークという2つの主要な領域についてはほとんど把握できません。 DBAは、SQL Serverに直接関係しないパフォーマンスの問題のトラブルシューティングに関しては、定期的に他のエンジニアと協力する必要があります。 sys.dm_io_virtual_file_stats
を監視することで、ディスクのパフォーマンスを簡単に追跡できます。 、読み取り/書き込みレイテンシの監視で説明しました。ただし、SQLServer内のネットワークパフォーマンスの問題を追跡することはそれほど簡単ではありません。
ネットワークパフォーマンスの低下は、アプリケーションパフォーマンスのサイレントキラーになる可能性があり、私の個人的な経験では、これが多くの場合に当てはまることが示されています。多くの場合、アプリケーションでパフォーマンスの問題が発生し始め、アプリケーションエンジニアは、アプリケーションサーバーは見栄えがよく、データベースに指を向け始めたと言います。データベースサーバーを確認するための電話があり、すべての兆候は、データベースサーバーが正常であることを示していました(これは、主要業績評価指標の監視とベースラインの設定が役立つ場所です!)。アプリケーションチームとデータベースチームはすべてが良かったと言っていたので、ネットワークチームに確認を依頼しました。ネットワークチームはいくつかのことを検討し、彼らの側でもすべてを明確にします。各チームのトラブルシューティングとそれぞれのシステムのレビューには時間がかかりましたが、アプリケーションのパフォーマンスは依然として低下していました。その後、すべてのチームが一緒にトラブルシューティングするために会議ブリッジに参加するように求められるまで、問題はエスカレートします。最終的に、誰かがより深いネットワークテストを開始し、ポートの飽和、ルーティング、またはその他の複雑なネットワークの問題があると判断します。数回クリックするか、最後に何かを変更すると、最終的にアプリケーションの速度低下が解決されます。
私がクライアントで遭遇した最も重要なネットワークの問題は、通常、バックアップを実行するときの帯域幅に関係しています。多くの大規模な組織は、コアインフラストラクチャを10Gbネットワークに移行していますが、物理ネットワークと仮想ネットワークの両方を使用する場合、設定またはポートを誤って構成し、1Gbに落とす可能性があります。通常のアプリケーションネットワークトラフィックの場合、パフォーマンスの低下に気付かない場合がありますが、バックアップ用に数百GBのデータをコピーしようとすると、その1 Gbが飽和状態になり、バックアップと復元のジョブが低下します。
DBAの場合、最初の指標では問題が明らかにならないため、他の人に自分の問題ではないと思われる問題を深く調べてもらうのは難しい場合があります。他のチームに連絡する前にデータを準備できると、チームを巻き込むのに役立ちます。 iPerfを使用して初期帯域幅テストを実行することにより、想定されているネットワーク速度を取得しているかどうかをすばやく判断できます。たとえば、アプリケーションサーバーとデータベースサーバーの間で10Gbネットワークを使用していて、テストを実行して1Gbしか取得していない場合、何かが正しくないことがわかります。この調査結果を文書化できれば、ネットワークエンジニアに帯域幅の問題を調査するように自信を持って依頼できます。
どのようにしてiPerfを使い始めますか?まず、iPerf.frからツールをダウンロードする必要があります。 Windows Server 2012で作業しているので、Windowsバイナリを自分のマシンにダウンロードしました。パッケージをダウンロードして解凍したら、コマンドラインからプログラムを実行する必要があります。ほぼ1年前から発売されているiPerf3.0.11をダウンロードしました。このユーティリティのドキュメントを必ずお読みください。これはコマンドラインツールであるため、使用できるオプションは多数あります。以下の例では、そのうちのいくつかのみを使用しますが、状況によっては、ポートの指定やパケットサイズの増加などの他のオプションを使用する必要がある場合があります。オプションコマンドでは大文字と小文字が区別されることに注意してください。
iPerfを使用するには、帯域幅をテストするために少なくとも2台のサーバーを使用する必要があります。バイナリを2つのサーバーにコピーしたら、最初にサーバーの1つでiPerfリスナーを起動する必要があります。これを行うには、次のコマンドを実行します:
iperf3 -sこのコマンドはサーバーモードでiPerfを実行し、一度に1つの接続のみを許可します。
2番目のサーバーでは、いくつかのクライアントオプションを使用してiPerfを起動する必要があります。まず、-cを指定してクライアントモードを指定します。また、-tを使用して各テストを実行する時間を指定し、-Pを使用して同時接続の数を指定します。ネットワークに適切な負担をかけることができるように、複数の接続を指定する必要があります。このテストでは、次のコマンドを実行します。
iperf3 -c(最初のサーバーのサーバー名またはIPアドレス)-t 30 -P 10上記のコマンドは、10の同時接続で30秒の送信テストを開始します。
このテストは、Dell M6800の2台の仮想マシンで実行したため、これらのVMが通過する物理ネットワークはありませんでした。
サーバー2からサーバー1に接続すると、2.17ギガビット/秒の帯域幅で7.57ギガバイトが転送されました。ラップトップ上のいくつかのVMにとって悪くありません。
ネットワーク統計/iPerf出力:サーバー2がサーバー1に接続している
サーバー1からサーバー2に接続すると、2.00ギガビット/秒の帯域幅で6.98ギガバイトが転送されました。ご覧のとおり、数値にはわずかな違いがありますが、それでも比較的近いです。これらの数値が大幅に異なる場合は、原因を調査する必要があります。
ネットワーク統計/iPerf出力:サーバー1がサーバー2に接続している
本番環境に移行する前にこれらのテストを実行し、本番サーバーでこれらのテストを定期的に繰り返す習慣をつけることが重要です。何が正常であるかを知る必要があります。監視していないと、測定できません。サーバー、仮想ホスト、またはコアネットワーク機器でファームウェアの更新が実行されていることがわかっている場合は、変更の前後のiPerfテストで、マイナスの副作用を特定するようにすばやく警告できます。
また、データベースサーバーと直接インターフェイスするサーバー、およびデータベースサーバーがネットワークバックアップデバイスなどと直接インターフェイスするサーバーに対してこのテストを実行することも重要です。 IPerfはWindowsとLinuxの両方で動作するため、2つのオペレーティングシステム間で簡単にテストできます。
DBAの場合、ネットワークは、何も知らないブラックボックスである必要はありません。 iPerfを使用すると、データベースサーバーと他のサーバー間のネットワークの帯域幅の問題を警告できます。限られたネットワークのトラブルシューティングのためにPINGとTRACERTのみに依存する理由はありません。 iPerfをダウンロードして、ネットワーク帯域幅の文書化を開始します。