2

Sql Server 2005 で読み取り/書き込み比率を照会するにはどうすればよいですか? 知っておくべき注意事項はありますか?

おそらく、DMV クエリ、標準レポート、カスタム レポート (パフォーマンス ダッシュボードなど)、または Sql Profiler トレースの調査で見つけることができます。正確にはわかりません。

なぜ私は気にするのですか?

Web アプリのデータ層のパフォーマンスを改善するために時間を費やしています。何百万ものレコードと何千ものユーザーを扱っています。

私が検討しているポイントの 1 つは、データベースの同時実行性です。Sql Server は、既定でペシミスティック コンカレンシーを使用します。これは、書き込みの多いアプリに適しています。私のアプリが読み取り負荷が高い場合は、Jeff Atwood が StackOverflow で行ったread committed snapshotように、オプティミスティック コンカレンシー (分離レベル: )に切り替える可能性があります。

4

4 に答える 4

4

すべてのアプリは重い読み取り専用です。

  • UPDATE は、WHERE 句の読み取りとそれに続く書き込みです。
  • INSERT は、読み取りである一意のインデックスと FK をチェックする必要があり、FK 列にインデックスを付ける理由

多くても15 % の書き込みがあります。一度それについて議論している記事を見たことがありますが、再び見つけることができません。1%の可能性が高いです。

1 日あたり 600 万行の新しい DB では、少なくとも 95% 以上の読み取りが行われていることがわかっています (もちろん推定値です)。

なぜあなたは知る必要があるのですか?

また: SQL Server テーブルの読み取り/書き込み統計を調べる方法は?

質問の更新に基づいて編集...

変更が必要になるまで、DB の同時実行性はそのままにしておきます。600 万行 + 大量の読み取りのために、すぐに使用できるものは何も変更していません

Web アプリを調整するために、往復を減らすように設計しました (1 回の呼び出し = 1 つのアクション、呼び出しごとに複数のレコード セットなど)。

于 2010-05-06T05:23:02.940 に答える
2

sys.dm_db_index_usage_statsをチェックしてください:

  • シーク、スキャン、ルックアップはすべて読み取りです
  • 更新は書き込みです

カウンターはサーバーを再起動するたびにリセットされることに注意してください。カウンターは、代表的な負荷が実行された後にのみ確認する必要があります。

また、役立つパフォーマンス カウンターもいくつかあります。

  • Batch Requests/sec : 1 秒あたりに受信した Transact-SQL コマンド バッチの数。
  • Write Transactions/sec : データベースに書き込み、コミットしたトランザクションの数
  • Transactions/sec : データベースに対して開始されたトランザクションの数

これらのレートから、リクエストの読み取り:書き込み比率をかなり正確に見積もることができます。

更新後

バージョン ストアを有効にすることは、同時実行を処理するためのおそらく最良の方法です。スナップショット分離を明示的に使用するのではなく、read commit スナップショットを有効にすることをお勧めします。

alter database <dbname> set allow_snapshot_isolation on;
alter database <dbname> set read_committed_snapshot on;

これにより、代わりにスナップショットを使用する読み取りコミット読み取り (つまり、デフォルトのもの) が作成されるため、文字通りアプリを変更する必要がなく、すぐにテストできます。

また、シリアライゼーション読み取り分離レベルで読み取りが実行されないかどうかも調査する必要があります。これは、分離レベルを明示的に指定せずに TransactionScope を使用した場合に発生します。

バージョン ストアは完全に無料ではないことに注意してください。行のバージョン管理リソースの使用を参照してください。また、 SQL Server 2005 Row Versioning-Based Transaction Isolation を読む必要があります。

于 2010-05-06T03:58:19.980 に答える
2

num_of_writesの&num_of_readsカウンターの比率を求めるのはどうsys.dm_io_virtual_file_statsですか?

于 2012-03-26T05:58:37.780 に答える
0

SQL Server Profiler を使用して実行しました。アプリケーションを実行する前にそれを開いて、アプリケーションで何かをしているときにどのようなクエリが実行されるかをテストしました。しかし、クエリが機能することを確認するだけのほうがよいと思います。このようなサーバーの負荷を測定するのに便利かどうかはわかりません。プロファイラーは、後で分析できるようにトレースを保存することもできるので、うまくいくかもしれません。

于 2010-05-06T03:24:42.523 に答える