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

SQLServerリンクサーバーのクエリ例

    形式はおそらく次のようになります:

    <server>.<database>.<schema>.<table>
    

    例:DatabaseServer1.db1.dbo.table1

    更新 :これは古い質問であり、私が持っている答えは正しいことを私は知っています。ただし、これに遭遇した他の人は、いくつかのことを知っている必要があると思います。

    つまり、参加状況でリンクサーバーに対してクエリを実行する場合、 リンクサーバーのテーブルは可能性が高い 結合操作を実行するために、クエリが実行されているサーバーにダウンロードされます。 OPの場合、両方のtable1 DB1から およびtable1 DB2から おそらくDB3という名前のクエリを実行するサーバーに全体が転送されます 。

    大きなテーブルがある場合、これは可能性があります 実行に時間がかかる操作になります。結局のところ、メモリやディスク転送速度よりも桁違いに遅いネットワークトラフィック速度によって制約されています。

    可能であれば、ローカルテーブルに参加せずに、リモートサーバーに対して単一のクエリを実行して、必要なデータを一時テーブルにプルします。次に、それをクエリします。

    それが不可能な場合は、SQLサーバーがテーブル全体をローカルにロードしなければならない原因となるさまざまなことを調べる必要があります。たとえば、GETDATE()を使用します または特定の結合ですら。他のパフォーマンスキラーには、適切な権利を与えないことが含まれます。

    詳細については、http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/を参照してください。



    1. ExecuteReaderには、開いていて利用可能な接続が必要です。接続の現在の状態は接続中です

    2. SQL Server:sp_who2の出力をフィルター処理します

    3. SQL Serverの内部:PlanCachingPt。 I –プランの再利用

    4. これらのメトリックを使用してSQLServerのパフォーマンスを測定していますか?