2016-08-02 2 views
2

私は、リンクされたサーバーからデータを取得するビューを持っています。したがって、ビューを使用してリンクされたテーブルを呼び出すときには、私はselect * from linkerserver.linkedtableを使用します。私のクエリが動作し、私は情報のテーブルを取得します。(SQL)リンクサーバービューからテーブルをキャッシュする最適な方法は何ですか?

リンクサーバーを使用したとき、私は複数のユーザーリンクサーバーのビューを使用しています(ストアド・プロシージャ)SPを呼び出し/アクセスがある場合は特に、速度との競合についてしかし心配です。

私はこの問題をどのように解決できるか、問題があってもわからないのですか? (リンクされたサーバービューを使用すると、スピードや競合の問題に直面しますか?)これを回避するために

オプションは次のようになります。

  1. がビューからのデータ/テーブルの複製であるが、ローカルに存在する(MYTEMP ##)永続的な一時テーブルを作成します。
  2. すべてのコールは、ローカルに存在するこの一時テーブルに転送されます。
  3. を作成するか、ローカルで重複テーブルを作成し、その日の最初の呼び出し後にこのテーブルにデータを挿入するトリガを設定します。

この問題を解決する方法や最適な使用例についてアドバイスをいただければ幸いです。

+0

このテーブルはどれくらいの頻度で更新する必要がありますか?私が知っているほとんどのソリューションは、SSISを使って新しいデータを定期的に(毎週、毎晩、毎時)押します。 –

+0

こんにちはジョー、メッセージをありがとう。基本的には、テーブルのデータは1日1回しか更新されないため、1日1回、朝に更新する必要があります。それは別のチームによってロードされた別のサーバー上にあります。私は、リンクサーバーを介してデータを利用します。私は、info.tableが大きいので、スピードの問題にかかわらず心配しています。したがって、キャッシュするという私の考えです。私はこれを実装するためのベストプラクティスを確認していません.... tx – 765tgs

答えて

0

ベストプラクティスは、更新後に他のチームにデータを送信するように依頼することです。新しいレコードを追加するだけの場合は、これをテーブルに追加するだけです。データを更新している場合は、Mergeを使用して、新しいレコードと変更のみが処理されるようにすることもできます。

私の2番目の選択肢は、データロードを実行した後に、リンクされたサーバーからテーブルを削除して再度プルする(またはマージを使用する)ことです。あなたはこれについてチームと調整する必要があります。

私の最後の選択は、このデータを夜間にSQLエージェントにプルすることです。ソースデータも夜間に更新されない限り、これは私の第2の選択肢になります。彼らが真夜中から午前2時までに処理した場合、私の仕事は3または4時に実行されます。

0

SELECTの結果をテーブルに書き込むことは非常に簡単です。すべての列が自動的に作成されます。

SELECT * INTO NewTable FROM linkerserver.linkedtable 

NewTableは、通常のテーブルと同様に#または##ことができます。

使用後

(または右の前に)あなたはこのテーブルをドロップ...

+0

ありがとうございますShungo。私はこれを理解していますが、テーブルが古くなっている場合は、選択したテーブルをテンポラリテーブルに入れるだけです。一時テーブルを使用するすべてのクエリに対して、私は何とかそれが期限切れであることを最初に確認する必要があります。基本的に私はこのステップを明確にしたかったのです。 – 765tgs

+0

@ 765tgsテーブルを落として自動的にいっぱいになる夜間仕事はどうですか?ギャップ(テーブルが24時間使用されている場合)を必要としない場合は、これを試すことができます。データを「tempA」にロードします。次の夜、あなたは 'tempB'にロードし、次の夜はAを落として再読し、次の夜はBを落としてそれを再度読みます。あなたのプロセスは 'VIEW'を使ってデータを読み込みます。再充填後の最後のステップは単純な 'ALTER VIEW'ステートメントでした... – Shnugo

0

は、私が過去にこの問題に遭遇しました。 私が経験したところでは、SQL Serverはリンクサーバーに関して最高のクエリプランを生成しないことに気付いています。

このテーブルを持つデータベースの容量はどれくらいですか?複製は読み取り専用にすることは可能ですか?

「はい」の場合は、そうするのが良いでしょう。もしそうでなければ、ローカルテーブルとトリガーと言ったように必要になります。 SQL Serverエージェントを使用した増分更新は5分ごとに行われます。

+0

本質的に> 10,000行、20列。はいレプリケート読み取り専用はオプションです。私はインクリメンタルアップデートのあなたの考えが好きです。 – 765tgs

+0

レプリケーションを行うときには、テーブルをレプリケートするだけではできません。データベースをレプリケートする必要があります。だからこそ私はデータベースの大きさを尋ねていたのです。それが大きくなければ、レプリケート・リードは、SQLエージェントを使用した増分更新よりも優れています。これは、ホイールを再作成する必要がないためです。 – cungiderm

+0

あなたの話が聞こえます。 DBは大量であり、そのデータの多くは私のアクセスのために制限されます..... – 765tgs

関連する問題