- - PR -
ストアドプロシージャ実行時のタイムアウト
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-19 16:52
!!
> ALL_V_0001・AA_V_0004・AA_V_0005・MM_V_0001・MM_V_0002・FI_V_0001 「V」が付いていたので勝手にビューだと思っていました。 きっと複雑な集計クエリなのだろうと。 それでインデックス付きビュー(実データが格納されるビュー)を提案しました。 | ||||
|
投稿日時: 2007-12-19 16:58
運用している環境ですが、
@SQLサーバー ASAP R/3 となっており、ALL_V_0001・AA_V_0004・AA_V_0005・MM_V_0001・MM_V_0002・FI_V_0001は@上に作成されたAをリンクサーバー先とするビューになります。 『ALL_V_0001』 SELECT * FROM OPENQUERY('SAPR3P','SELECT * FROM ANLA') ・・・リンクサーバーを参照 その為、ビューは同一サーバーに存在していますがテーブルはサーバー外に存在しています。複雑な仕組みなので説明は省略されていただいておりました。 | ||||
|
投稿日時: 2007-12-20 12:36
> 1回何かのストアドを実行したのでクライアントとサーバーの接続確認が終了し2回目はスムーズに行なえた、といった印象を受けます。
だとすると・・・ 1.SQLサーバー側のSAP R/3クライアント相当のプロセス 2.コネクション確立 3.SAP R/3側のサービス この3つの内のどこかに解決の糸口がありそうですね。 対症療法だが確実なのは上総さんのおっしゃる通り、ダミーのSQLを一回実行しておくことですかね? あと考えられそうなのは、1.のデータプロバイダをSQLサーバーのインプロセスで起動しておくとか。 的外れだったらごめんなさい。 | ||||
|
投稿日時: 2007-12-21 11:53
こあらさん、コメントありがとうございます。
>1.SQLサーバー側のSAP R/3クライアント相当のプロセス >2.コネクション確立 >3.SAP R/3側のサービス これらを調べるにはどのようにしたら良いでしょうか? プロファイラでストアド実行をトレースしたり、クエリアナライザでトレースを確認したりするのでしょうか? >1.のデータプロバイダをSQLサーバーのインプロセスで起動しておくとか。 インプロセスで起動しておくというのは具体的にはどのような手法でしょうか? 色々質問ばかりしてすみません、 どうしても原因がつかめない場合にはやはりダミーのSQLを一回実行することも検討してみます。。。 | ||||
|
投稿日時: 2007-12-21 12:22
私はSQLServerもリンクサーバーも使ったことが無いので明確に回答できません。 参考までに、私ならこの辺りを読むかな?というページを紹介しておきます。 Microsoft SQL Server 2000 の分散クエリ: OLE DB 接続 http://www.microsoft.com/japan/msdn/sqlserver/sql2000/sql_oledbconn.aspx SQL Server 2000 管理者用ポケット コンサルタント https://www.microsoft.com/japan/technet/prodtechnol/sql/2000/books/c08ppcsq.mspx InProcess 許可 http://search.technet.microsoft.com/search/Default.aspx?query=InProcess+%e8%a8%b1%e5%8f%af&brand=technet&locale=&refinement=00&lang=ja-jp | ||||
|
投稿日時: 2007-12-21 13:03
ビューとしてデータを取得するとしても条件式を切る事は可能ですので、 全件抽出でなく条件抽出の形でビューを作るとよろしいかと思います。 又、今回使用されているストアードは、他のテーブルと連携したりしますか? 独立したものとして扱えるのであれば、クライアントから"そのデータだけ"でも 直接リンク元サーバー(つまりはSAP)を参照する方がよろしいかと思います。 若しくは、SAP側で(出来るかどうかは不明ですが)トリガーを組んで、SQLサーバーと データの同期を取る方法もあります。 (データの同期を取っていれば、クライアント←SQLServer(全件)←SAP(全件)の 様にネットワーク上の負荷も減るのではと思います。) |