0

毎日、データベースにデータをインポートするために SSIS パッケージを実行しています。

人々が同時にデータベースにクエリを実行していることもあります。

特定のテーブルにテーブル ロックがあるため、読み込み (データ インポート) がタイムアウトします。

データの挿入とデータのクエリを同時に実行するための標準プロトコルは何ですか?

4

2 に答える 2

2

いくつかの戦略があります。

1つのアプローチは、ロック時間を最小限に抑えるようにETLパイプラインを設計することです。すべてのデータはステージングテーブルで準備され、完了すると、高速パーティション切り替え操作を使用して切り替えられます。パーティション切り替えを使用したデータの効率的な転送を参照してください。このようにして、ETLブロックは非常に短時間でオニルを読み取ります。また、読み取りでは、中間段階ではなく、すべてのETLデータが一度に表示されるという利点もあります。欠点は、実装が難しいことです。

別のアプローチは、データベースでスナップショット分離を有効にしたり、コミットされたスナップショットを読み取ったりすることです。データベースエンジンの行バージョンベースの分離レベルを参照してください。この方法では、ETLによって保持されているロックの背後で読み取りがブロックされなくなります。欠点はリソースの消費です。ハードウェアは行のバージョン管理の追加の負荷を駆動できなければなりません。

さらに別のアプローチは、データクエリを読み取り専用のスタンバイサーバーに移動することです。ログ配布を使用します。

于 2012-08-22T20:23:29.703 に答える
2

まず、これらのロックがどこから来ているのかを把握する必要があります。リンクを使用して、ロックがあるかどうかを確認します。

方法: ロックを保持しているクエリを特定する

テーブルロックを保持している別のプロセスがある場合、できることはあまりありません。

エラーは「テーブル ロックを取得できません」でよろしいですか。その場合は、テーブル ロックを使用しないように SSIS パッケージを変更することを検討してください。

于 2012-08-22T20:33:53.060 に答える