sql >> データベース >  >> RDS >> Database

死ぬことのないゾンビPerfMonカウンター!

    インターネットについて同時に素晴らしいと同時に恐ろしいことの1つは、何かがエーテルに投稿されると、基本的にそれが消えることはないということです。 (いつの日か、政治家はこれに気付くでしょう。彼らの一貫性を簡単に事実確認できます。)インターネットに投稿されたコンテンツの寿命が長いため、パフォーマンス調整のトピックの多くは「ゾンビ」になります。私たちは死んで撃ちますが、彼らは戻ってきます!

    つまり、これらの古い推奨事項は SQL Serverの特定のバージョンについては、ずっと前に提案されたベストプラクティスですが、現在は新しいバージョンには不適切です。会議で話しているときに、SQLServer2000の時代からまだ良い習慣ではなかった設定や手法に固執している人に出会うことは珍しくありません。容量/ストレージに関するSQLServer2000操作ガイドには多くの「非常にバージョン固有であり、現在は適用されなくなった「ベストプラクティス」の推奨事項。

    だからここに例があります。 % Disk Time およびDisk Queue Length PerfMonカウンターは、I/Oパフォーマンスの主要業績評価指標として強く推奨されました。 SQL Serverは、スキャッター/ギャザーを使用してディスクに大量のI / Oをスローし、ディスクベースのI/Oサブシステムの使用率を最大化します。このアプローチでは、SQLServerのインスタンスのチェックポイントおよび先読み中に長いキューの深さの短いバーストが発生します。サーバーのワークロードが原因で、ディスクが押し込まれたI / Oに追いつかない場合があります。その場合、キューの長さも長くなります。ショートバーストシナリオは問題ではありません。通常、キューの長さを長くするシナリオが問題になります。それで、それは良い習慣ですか?

    一言で言えば、それほど多くはありません。

    これらのカウンターは、ハードディスクが1つしかないSQL Serverのインスタンスで引き続き使用できます(ただし、それは非常に 最近は珍しい)。なぜですか?

    PerfMonカウンター% Disk Time は、いくつかの理由で偽のパフォーマンスメトリックです。非同期のI/Oリクエストは考慮されません。複数のディスクドライブが含まれているため、基盤となるRAIDセットの実際のパフォーマンスプロファイルが何であるかはわかりません。 PerfMonカウンターのDisk Queue Length また、単一の物理ディスクを備えたSQL Serverを除いて、ほとんどの場合役に立ちません。これは、ハードディスクコントローラーのキャッシュによって、キューで実際に保留されているI/O操作の数がわかりにくくなるためです。実際、一部のハードディスクには小さな書き込みキャッシュもあります。これは、I / Oが本当にキューに入れられているか、オペレーティングシステムとディスクの間のどこかにあるキャッシュにあるか、または最終的に完全に作成されているかどうかをさらに混乱させます。ディスク上のCMOSに接続します。

    より優れたI/OPerfMonカウンター

    これらのPerfMonカウンターを使用する代わりに、Avg Disk Reads/secを使用してください 、Avg Disk Writes/sec 、およびAvg Disk Transfers/sec ディスクサブシステムのパフォーマンスを追跡します。これらのカウンターは、最後の1秒間に発生した読み取りI / O、書き込みI / O、および読み取りと書き込みのI/Oの組み合わせの平均数を追跡します。ときどき、I / O操作の速度ではなく、データの量によって同じメトリックを追跡するのが好きです。したがって、そのデータを取得するには、これらのボリューム固有のPerfMonカウンターを試してみることをお勧めします:Avg Disk Transfer Bytes/secAvg Disk Read Bytes/sec 、およびAvg Disk Write Bytes/sec

    SQL Server I / Oパフォーマンスの場合は、動的管理ビュー(DMV)を使用します

    また、洞窟に住んでいない限り、SQL Serverの動的管理ビュー(DMV)を使用して、SQLServerの最近のバージョンのI/Oパフォーマンスを確認する必要があります。 I/O用の私のお気に入りのDMVには次のものがあります。

    • sys.dm_os_wait_stats
    • sys.dm_os_waiting_tasks
    • sys.dm_os_performance_counters
    • sys.dm_io_virtual_file_stats
    • sys.dm_io_pending_io_requests
    • sys.dm_db_index_operational_stats
    • sys.dm_db_index_usage_stats

    では、I / Oパフォーマンスメトリックをどのように追跡していますか?どちらを使用していますか?

    お返事をお待ちしております!

    楽しんでください、
    -Kev
    –Twitterでフォローしてください!


    1. ClusterControlCLIからPostgreSQLデータベースを管理する方法

    2. DB_ID()を使用して、SQLServerのデータベースのIDを返します

    3. Java:OracleデータベースにCLOBを挿入する方法

    4. Oracle 10g PL/SQLの「CONTINUE」キーワード