2009-05-12 22 views
12

SQL View'de RO erişimim var. Bu sorgu zaman aşımına uğradı. Bundan nasıl kurtuluruz?Sql Query Timeout nasıl engellenir?

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

alıyorum hata iletisi:

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

Hata almadan önce ne kadar süre geçer? – codeulike

+0

15-20 dk 'a kadar çalışır. –

+0

Bu uzun bir zamandır. Örneğinizde [MyTable] bir Tablo veya bir Görünümün üstünde mi? Bir Görünüm ise, lütfen Görünüm Tanımını gönderin ve optimizasyonları deneyebilir ve önerebiliriz. – codeulike

cevap

6

Bağlantınızla müdahale ağ istikrarsızlık falan çeşit açıkça olmasına rağmen (15 dakika ağınızdaki bir NAT sınır falan geçtikten olabilir oturumu bırakarak olması mümkündür), ben Herhangi bir beklenen zaman içinde (1s gibi) geri dönmek için böyle basit bir?) sorgunun olacağını düşünürdüm.

DBA'nızla konuşur ve MemberType, Status'daki temel tablolarda oluşturulmuş bir dizin alırdım. Altta yatan bir tablo yoksa veya bunlar daha karmaşık ve görünüm veya UDF tarafından oluşturulmuşsa ve SQL Server 2005 veya üstünü çalıştırıyorsanız, görünümü indekslemeyi düşünün (temel olarak görünümü endeksli bir şekilde gerçekleştirir).

2

Sen uyeturu üzerinde bir dizin koyabilirsiniz.

+0

Belirtildiği gibi bir görünüm kullanıyorsa, bu oldukça zor olacaktır ... – MicSim

+0

RO erişimi büyük olasılıkla daha fazla bir sorundur, ancak DBA'dan tabloya eklemesini isteyebilir. – JeffO

1

Durum sütununda ve MemberType sütununda tanımlı bir dizininiz var mı?

21

Sorunuz büyük olasılıkla iyidir. "Semafor zaman aşımı süresi doldu" bir Ağ hatası, bir SQL Server zaman aşımı değil.

örn. bkz. http://support.microsoft.com/kb/325487

SQL Server ile aranızda bir çeşit ağ sorunu var.

düzenleme: Ancak, görünüşe göre, ağ hatası vermeden önce sorgu 15-20 dk. Bu çok uzun bir süre, belki de ağ hatası uzun yürütme süresiyle ilişkili olabilir. Temel Görünümün optimizasyonu yardımcı olabilir.

Örneğinizdeki [MyTable] bir Görünüm ise, Görünüm Tanımlamasını yayınlayabilir, böylece optimizasyona devam edebilir miyiz?

3

Lütfen Windows sistem olay günlüğünüzü "Olay Kaynağı: Dhcp" için özel olarak herhangi bir hata olup olmadığını kontrol edin. DHCP ile ilgili bir ağ hatası olması muhtemeldir. Adres kiralama süresinin süresi doldu. SQL Server veya sorgu ile ilgili bir sorun olmamalıdır.

Sadece "Semafor zaman aşımı süresi doldu" için internette arama yapın ve sorununun çözümü için çok sayıda öneride bulunacaksınız. Ne yazık ki bu sorun için çözümü görünmüyor.

+0

Bunun beş yıl önce olduğunu biliyorum, ancak bunun neden bir ağda bir DHCP sorunu olduğunu varsayalım?Bir veritabanı sunucusu çalıştırıyorsa, muhtemelen sabit bir adres şeması vardır. Sanırım bu bir cevap değil. –

0

Kaç tane kaydınız var? masada herhangi bir dizin var mı? Bu deneyin:

;with a as (
select distinct Status 
from MyTable 
where MemberType=6 
) 
select count(Status) 
from a