2009-05-12 13 views
12

SQLビューにROアクセス権があります。以下のクエリはタイムアウトします。これを避ける方法は?Sqlクエリのタイムアウトを回避する方法

select 
    count(distinct Status) 
from 
    [MyTable] with (NOLOCK) 
where 
    MemberType=6 

私が取得エラーメッセージは次のとおりです。

Msg 121, Level 20, State 0, Line 0

A transport-level error has occurred when receiving results from the server (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

+0

エラーが発生するまでにどれくらい時間がかかりますか? – codeulike

+0

それは15-20分まで実行されます –

+0

それは長い時間です。あなたの例で[MyTable]はテーブルまたはビューの上にありますか?ビューの場合は、ビュー定義を投稿してください。最適化を試してみることができます。 – codeulike

答えて

6

をお使いの接続に干渉ネットワークが不安定か何かのいくつかの種類が明確にあるが(15分はあなたのネットワークでNAT境界か何かを横断する可能性がセッションを落としている可能性がある)、私がそのようなシンプルなクエリが必要だと思うでしょうか?)

私はあなたのDBAと話し、MemberType、Statusの基になるテーブルに作成されたインデックスを取得します。基になるテーブルが1つもない場合や、ビューやUDFによって複雑なものが作成され、SQL Server 2005以上を実行している場合は、ビューのインデックス作成を検討してもらいます(基本的にインデックス付きの方法でビューを実現します)。

2

あなたがのmemberTypeにインデックスを置くことができます。

+0

彼がビューを使用している場合、前述のようにこれはやや難しいでしょう... – MicSim

+0

ROアクセスはおそらくもっと問題になりますが、DBAにそれをテーブルに追加するよう依頼することができます。 – JeffO

1

StatusカラムとMemberTypeカラムにインデックスが定義されていますか?

21

あなたのお問い合わせはおそらく大丈夫です。 「セマフォのタイムアウト期間が終了しました」は、ネットワークエラーであり、SQL Serverのタイムアウトではありません。

http://support.microsoft.com/kb/325487

明らかに、あなたとSQL Serverの間に何らかのネットワーク問題があります。

編集:しかし、明らかに、ネットワークエラーを出す前に15分から20分間クエリが実行されます。それは非常に長い時間なので、おそらくネットワークエラーは長い実行時間に関連する可能性があります。基礎となるビューの最適化が役立ちます。

例の[MyTable]がビューの場合、ビュー定義を投稿して最適化を行うことができますか?

3

"イベントソース:Dhcp"のエラーについては、Windowsシステムイベントログを確認してください。これは、DHCPに関連するネットワークエラーである可能性が非常に高いです。アドレスのリース期間が切れたかどうか。 SQL Serverやクエリ自体に関連する問題であってはなりません。

インターネットで「セマフォーのタイムアウトの期限が切れました」を検索するだけで、問題の解決方法がたくさん表示されます。残念ながら、この問題の解決方法はではないようです。

+0

これは5年前のことですが、これは固定ネットワーク上のDHCPの問題だとお考えですか?彼がデータベースサーバを稼働しているなら、彼はおそらく固定アドレス方式を持っています。あたかもこれが無回答であるかのように感じます。 –

0

いくつのレコードがありますか?テーブルにインデックスがありますか?この方法を試してください。

;with a as (
select distinct Status 
from MyTable 
where MemberType=6 
) 
select count(Status) 
from a 
関連する問題