私の先輩は、SQLクエリの実行ではデフォルトではテーブルをロックしないと言っていました。
しかし、SSRSレポートでいくつかの問題が発生していました。これは、ロックとエラーの発生で問題が発生しているようです。
グーグルをしましたが、何も見つかりませんでした。
確認を探すだけで、SSRSレポートは実際にクエリされているテーブルをロックしますか?
そして、この動作を具体的に文書化したMSDNドキュメントはありますか?
私の先輩は、SQLクエリの実行ではデフォルトではテーブルをロックしないと言っていました。
しかし、SSRSレポートでいくつかの問題が発生していました。これは、ロックとエラーの発生で問題が発生しているようです。
グーグルをしましたが、何も見つかりませんでした。
確認を探すだけで、SSRSレポートは実際にクエリされているテーブルをロックしますか?
そして、この動作を具体的に文書化したMSDNドキュメントはありますか?
SSRSはそれ自体では何もロックしません。ロックは、レポートに埋め込まれたクエリによって駆動されます。この質問に答えることができるのはあなただけです。使用されているレポートとクエリを見て、テーブルがロックされているかどうかを確認してください。
通常、クエリはテーブルではなくテーブルのデータをロックします。一貫性のある正しいレポートには、絶対にロックが必要です。NOLOCKヒントを追加するという誤謬に屈して、それを1日と呼ばないでください。間違った結果が得られます。
レポートによって引き起こされる本番環境での競合が見られる場合は、多くの解決策があります。可用性グループ、データベーススナップショット、またはスタンバイログ配布サーバーを使用して、レポートを読み取り専用サーバーにオフロードします。もう1つのアプローチは、SNAPSHOTのような行バージョンの分離レベルを有効にすることです。
SSRSからのストレートselectステートメントの場合、テーブルは確実にロックされます。
NOLOCKを使用して、レポートに表示する必要のある列を含む特定のクエリを作成できます。
ここで、selectクエリには、列名を含む「*」を含めることはできません。