Nasıl yapılır: SQL Server'daki anlık sorguların performans sorunlarını giderme

Makale çevirileri Makale çevirileri
Makale numarası: 243588 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, Microsoft SQL Server'da çok sayıda eşzamanlı anlık sorgu performansı yavaş nasıl giderilir. Sorunun kesin nedenini belirler, devam etmek, önce Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
224587SQL Server'da Uygulama performansı nasıl giderilir

Bu makalede, sorunun kapsamını daraltmak için KB 224587 kullandınız ve bir Windows NT Performans izleyicisi günlüğü yakaladığınız ve SQL Profiler izleme belirli sayaçlar, olaylar ve veri sütunları, ayrıntı varsayar.

Performans sorunları özellikleri

Performans sorunu, aşağıdaki özelliklere sahiptir:
  • Yüksek bir eşzamanlı kullanıcıların sayısını sorguları çalıştırdığınızda, genellikle çok kısa bir süre kısa anlık sorgu yavaş genel sistem başarımını neden.
  • Çok yüksek veya 100 kullanılacak yüzde CPU kullanımı.
  • Hiçbir ilişkili yavaş performans dönemlerde engelliyor.

    Sp_who</a1> Sistem saklı yordamın çıktısında BLK sütun denetleyerek engelleme için hızlı bir şekilde arayabilirsiniz. BLK sütun için bir sistem işlem kimliği (Spıd) numarasını sıfır değilse, orada engelliyor.
  • Bazı durumlarda, sunucu belleği stressed ve aşağıdaki hatalar da benzer hatalar alabilirsiniz:
    Hata: 701, önem derecesi: 17, durumu: 1
    Bu sorguyu çalıştırmak için yeterli sistem belleği yok.
    -VEYA-
    Msg 8645, düzey 17, durum 1, yordam, satır 1
    Sorguyu çalıştırmak bellek kaynakları beklenirken BIR zaman aşımı oluştu. Sorguyu yeniden çalıştırın.

Sorgu derleme geliştirmeleri

SQL Server 7.0, özellikle sorgu en iyi duruma getiricisi, başlangıç sistem mimarisi geliştirmeleri nedeniyle SQL Server'ın önceki sürümleriyle karşılaştırıldığında, uygulamalar tarafından bir sistem kaynağı kullanımı farkı görebilirsiniz. Özellikle de SQL Server 7.0, CPU veya bellek kullanımının bir artış gösterebilir, ancak SQL Server'ın önceki sürümleri genellikle disk GÇ bağlı olan. Bu değişiklikler için iki etmen izlenebilir:
  • Birleştirmeler, sağlama ve birleştirme
  • Sorgu derleme zamanları
SQL Server'ın önceki sürümlerinde, birleştirme gerçekleştirmek için iç içe geçmiş bir döngü yinelemeden tamamen güvendi. Iç içe geçmiş bir döngü birleştirmeler, disk GÇ devralınarak kullanın. SQL Server 7.0 ile başlayarak, sağlama ve birleştirme birleştirmeler başlanan. Birleştirmeler, sağlama ve birleştirme, çok daha iç içe geçmiş bir döngü birleştirmeler işlem bellek içi yapın. Bu mantıksal sonucu, CPU ve bu birleştirme teknikler kullanıldığında, bellek kullanımının daha yüksek. Sağlama ve birleştirme birleşimler hakkında daha fazla bilgi için SQL Server 7.0 Çevrimiçi Kitapları'nda "Karma birleşimler anlama" ve "Birleştirme birleşimler anlama" konularına bakın.

Sorgu en iyi duruma getiricisi için daha fazla seçenekleri ve bilgileri daha yeni sağlama ve birleştirme birleştirme teknikleri, Gelişmiş arama algoritmalarını ve <a2>sütun istatistikleri de dahil olmak üzere, SQL Server'ın daha önceki sürümlerde olduğu için sorgu derleme zamanları etkiler. Bu ek bilgi, sorgu veri almak için etkili bir yöntem seçmek için sorgu en iyi duruma getiricisi izin verir. Ancak, çözümleme ve bu yeni teknikler ve bilgileri dikkate, işlem süresi gerektirir. Bu yüksek CPU kullanımı uzun SQL Server'ın önceki sürümlerinde bulunan bir sorgu derleme zamanları neden olabilir.

Sorguların çoğu için bir düşüş çalışma zamanı tarafından bu derleme zamanında artış mahsup. Sorgu içinde daha hızlı çalışır genel efekti olan SQL Server'ın önceki sürümleri. Bir özel durum, ancak çok düşük yürütme zamanları olan çok küçük, basit, OLTP türü sorgularla oluşur. Bu sorgu için bir sorgu planı oluşturma işlemine eşit veya daha büyük bir masraf sorgu yürütme farklı olabilir. Sonuç olarak, sorgu gerçekleştirebilir biraz daha yavaş SQL Server'ın önceki sürümlerinde. Milisaniye cinsinden fark genellikle olduğundan, tek tek yürütüldüğünde, bu efektleri için belirli bir sorgu fark değil. Ancak, çok sayıda anlık sorgu eşzamanlı kullanıcıların yüksek bir sayı ile çalıştırılan, genel sistem CPU kullanımı yüksek SQL Server'ın önceki sürümlerinde olduğunu fark edebilirsiniz.

Parametreli Sorgu geliştir

SQL Server 7.0, geçici sorgu ve otomatik parameterization önbellekleme gibi birkaç yeni teknikler kullanır. Ancak, sorgular, SQL Server 7. 0'ı otomatik olarak parameterizes sınırlıdır. Sorgu planları parametreli ve daha etkili bir şekilde yeniden kullanılabilir olduğundan emin olmak için aşağıdaki yöntemleri kullanın:
  • Parametre imleyicileri OLE DB ve ODBC Apı parametreleri, kullanıcılar bir sorgu gönderdiğinde, soru işareti belirtilecek izin verir. Bu, özellikle nerede saklı yordamları kullanarak kullanılamaz sorgu oluşturma modülleri olan orta katman uygulamalar için herhangi bir uygulama, çok yararlı olabilir. Parametre imleyicileri için sorgular oluşturulan sorgu planı farklı parametre değerleri belirtilmese bile, aynı sorguyu çalıştırmayı tüm istemciler tarafından yeniden kullanılabilir. Daha fazla bilgi için "Parameter işaretlerini" konuyu çevrimiçi SQL Server 7.0 Kitapları'nda bakın.
  • Sp_executesql Parametre imleyicileri bir uygulamada kullanılan sp_executesql saklı yordamı ODBC sürücüsünü veya OLE DB sağlayıcısı tarafından denir. Ancak, bunu da açıkça anlık sorguların parameterize için başka bir saklı yordam veya doğrudan bu uygulama tarafından çağrılabilir. Bu uygulamalar veya toplu iş dosyaları dinamik SQL deyimleri çalıştırmak için EXECUTE deyimi kullanıldığı çok yararlı olabilir. Sp_executesql, EXECUTE deyimi parameterization izin vermiyor. Bu sorgu planını yeniden olasılığını kısıtlar. Daha fazla bilgi için "sp_executesql (T-SQL)" ve SQL Server 7.0 Çevrimiçi Kitapları'nda "sp_executesql kullanma" konularına bakın.
  • Saklı yordamlar Saklı yordamlar, sorgularını parameterize yürütme planları yeniden olanağı da dahil olmak üzere, birçok yarar vardır. Daha fazla bilgi için SQL Server 7.0 Çevrimiçi Kitapları'nda "Stored Procedures" ve "Stored Procedures programlama" konularına bakın.

Performans izleyicisi verilerini görüntüleme

Sistem kaynakları performans sorunu neden olduğunu belirlemek için performans izleyicisi günlüğü kullanın. Performans izleyicisi günlüğü sistemin genel bir resim verin ve SQL Profiler verilerini görüntülediğinizde, dikkat etmeniz odaklanmanıza yardımcı olur. Performans izleyicisi performans performans azaltan tamamlanışında iyi zamanı verilerde gözden geçirin. Ilk etkilenen sayacı belirlemek ve aşağıdaki sorunlardan biri olduğu için durumunuza en uygun belirleyin:
  • Nesne: işlem
    Sayaç: işlemci
    Örnek: SQL Server
  • Nesne: işlemci
    Sayaç: % ??lemci Süresi
    Örnek: her işlemci örneğini denetleyin
  • Nesne: SQL Server: arabellek Yöneticisi
    Sayacı: Boş arabellek
  • Nesne: SQL Server: arabellek Yöneticisi
    Sayacı: Çalınmış sayfa sayısı
  • Nesne: SQL Server: Bellek Yöneticisi
    Sayaç: Bellek beklemede verir.
  • Nesne: SQL Server: SQL istatistikleri
    Sayaç: SQL Derlemeleri/sn
CPU kullanımı, SQL Derlemeleri/sn ve boş bir arabellek sayaçlarını, yüksek, öğeler ve Beklemede bellek verir ve çalınmış sayfa sayısı sayacı düşüktür, bu CPU için performans sorunu olduğunu gösterir. Nasıl etkili parameterize ve sorgu planı oluşturma maliyetini önlemek için sorgu planları yeniden odaklanmak ve bu makalenin "SQL Profiler izlemesi olay sınıfı tarafından Grup" bölümüne bakın. SQL Derlemeleri/sn sayacı ve boş bir arabellek düşüktür ve çalınmış sayfa sayısı ve da verir Beklemede bellek sayaçlarını yüksekse, SQL Server, bellek sınırlı olur. Karma birleştirmeler kullanılır ve birleşimlerin döngü ve "Grup" SQL Profiler izleme süreye göre görmek için değiştirilebilir sorguları bulma üzerinde odaklanmak bölümüne. Bu sayaçlar hakkında daha fazla bilgi için SQL Server 7.0 kitapları çevrimiçi arama yapmak için sayaç adı kullanın.

SQL Profiler verilerini görüntüleme

Performans sorunları çözerken, SQL Profiler verilerini görüntülemek çok değerlidir. Size, yakalanan verileri gözden gerekmez; seçici olun. SQL Profiler yakalanan verileri etkin olarak görüntülemenize yardımcı olur. <a0>Özellikler</a0> sekmesindeki (Dosya menüsünde Özellikler ' i tıklatın), SQL Profiler veri sütunlarını veya olayları kaldırarak, gruplandırma veya veri sütunlarına göre sıralama ve filtre uygulama tarafından görüntülenen verileri sınırlamanıza olanak verir. Tüm izleme veya yalnızca belirli değerleri için özel bir sütunda arayabilirsiniz (Düzen) menüsünde Bul ' u tıklatın). SQL Profiler verilerini bir SQL Server tablosuna kaydedebilir (Dosya menüsünde Kaydet öğesinin üzerine gelin ve Trace Table ' ı tıklatın), ve SQL sorgularını bu çalıştırın.

Not Kaydedilmiş bir izleme dosyasında yalnızca filtre emin olun. Bir etkin izleme üzerinde aşağıdaki adımları izlerseniz, izleme başlatılmasından bu yana yakalandığı verileri kaybetme riski. Etkin izlemeyi bir dosyaya kaydedin veya önce tablo (Dosya menüsünde farklı Kaydet ' i tıklatın) ve yeniden açın (Dosya) menüsünde, ' ı tıklatın) devam etmeden önce. Kaydedilmiş bir izleme dosyasında ile çalışırken, filtreleme kalıcı olarak verileri kaldırmaz; silinmez, verileri yalnızca gizlidir. Ekleyebilir ve bu olaylar ve veri sütunları odaklanmasına yardımcı olmak için aramalarınızı kaldırın.

Ayrıca birçok yararı aldığınız alanlara odaklanmak. Aşağıdaki etmenler uygulama performansını artırmaya yardımcı olabilir ancak aynı derecede gerekmez. Değişiklikleri uygulamadan önce nasıl etkili değişiklikleri aşağıdaki etkenlere bağlı belirleyin:
  • Ne sıklıkta sorguyu çalıştırır.
  • Sorgu geliştirilmiş ne kadar geliştirme
Örneğin, tek bir sorgu yürütme süresi 1.2 saniyeye 1.5 saniye ile azaltma gün boyunca sık sık sorgu yürütüldüğünde, yararlı olabilir. Sorgu çok sık eşzamanlı kullanıcıların yüksek bir sayı ile çalıştırılır, ancak performans geliştirme çok etkili olabilir. Çok seyrek kullanılır, tersi durumda, 6 dakika tek bir sorgudan ayarını 3 saniye artırma genel performansı fark bir artış getirebilecek değil. Gruplandırma ve SQL Profiler aracının ve uygulamanın bilginizi teknikleri süzme değişiklikleri uygulamadan önce belirli bir sorgu veya yordam etkilerini tahmin etmek için kullanın. Ilk olarak en etkili değişiklikleri odaklanmak ve performansı yeterli düzeyde geliştirilmiş bir düzeye ulaşana kadar diğer sorgular ve yordamlar iterasyonla ile geçin.

SQL Profiler izlemesi bir dosyaya veya tabloya kaydettikten sonra SQL Profiler izlemesinde yeniden açın ve içeriğini gözden geçirin. SQL Profiler izlemesi gruplandırmak için aşağıdaki adımları izleyin:
  • SQL Profiler izlemesi süreye göre gruplandır:
    1. Dosya menüsünde Özellikler ' i tıklatın.
    2. Veri sütunları) sekmesini tıklatın ve gruplarYUKARısüre taşımak için tıklatın. AŞAĞı tüm sütunları olarak kaldırmak için tıklatın.
    3. Etkinlikler sekmesini tıklatın ve sonra TSQL SQL:StmtCompleted dışındaki tüm olayları kaldırın ve TSQL RPC: tamamlandı. Bu, yalnızca yürütülmekte sorgulamaları odaklanmanıza olanak verir.
    4. Tamam ' ı tıklatın.
    Süre'bazında gruplandırmaya kolayca SQL görmek için izin veren deyimlerini, toplu işlemleri ve en yavaş çalışan yordamlar. Izleme, sorunun oluştuğu zaman gözden geçirin ve iyi bir performans temeli oluşturun. Izleme, performans düşük olduğunda performans iyi ve ayrı bir bölüm olduğunda bölümlere ayırmak için başlangıç zamanına göre süzebilirsiniz. Performansın iyi olduğu aralıkta en uzun süreli sorguları arayın. Büyük olasılıkla sorunun kaynağı bunlardır. Genel sistem başarımını azaltır, daha iyi sorgular için sistem kaynakları bekleyen çünkü uzun süreler gösterebilir.

    En sık sık uzun süreler sahip bir sorgu için yürütme planı gözden geçirin. Karma birleştirme kullanılmakta olduğunu görürseniz, LOOP JOIN sorgusu ipucu sorgu için bir iç içe geçmiş bir döngü birleştirme zorlamak için kullanabilirsiniz. Döngü birleştirme kullanarak sorgu için yürütme zamanı, eşit veya karma birleşim ile yürütme zamanı bile biraz daha azdır, bilgisayar yüksek bellek ve CPU kullanımı yaşanıyor, döngü birleştirme daha iyi bir seçenek olabilir. Kaynak performans sorunu (CPU ve bellek) üzerindeki yük azaltarak, genel sistem başarımını artırabilirsiniz. LOOP BIRLEŞTIRME hakkında daha fazla bilgi sorgula ipucu, SQL Server 7.0 Çevrimiçi Kitapları'nda "(T-SQL) SELECT" konusuna bakın.
  • SQL Profiler izlemesi olay sınıfı tarafından Grup:
    1. Dosya menüsünde Özellikler ' i tıklatın.
    2. Veri sütunları) sekmesini tıklatın ve sonra da Grup başlığının altında YUKARıEvent Class ve metinEvent Class, üstte taşımak için tıklatın. AŞAĞıGrup başlığının altındaki diğer tüm sütunları olarak kaldırmak için tıklatın.
    3. Etkinlikler sekmesini tıklatın ve sonra tüm olaylar dahil olduğundan emin olun.
    4. Tamam ' ı tıklatın.

Olay türleri

Görmek için hangi tür olayların ne sıklıkta olayları, Olay sınıfı sütununa göre grup ortaya <a0>SQL Server ve</a0>'ı çalıştıran bilgisayarda ortaya. Bu sütunda aşağıdaki olayları arayın:
  • ÇEŞITLI: SQL ve Exec SQL; Prepared Prepare IMLEÇLER: CursorpreparePrepare SQL bir olay, bir SQL deyimi SQLPrepare/SQLExecute (ODBC) veya ICommandText::Prepare/ICommandText::Execute (OLE DB için) varsayılan imleç Seçenekleri'ni kullanarak varsayılan sonuç kümesi (istemci tarafı imleç) ile kullanmak için hazırlanan gösterir: ileri, yalnızca, satır kümesi boyutu salt okunur = 1. Bir sunucu tarafı imleci bir SQL hazırlanan BIR Cursorprepare olay gösterir deyimi SQLPrepare/SQLExecute (ODBC) veya ICommandText::Prepare/ICommandText::Execute (OLE DB) ile bir önceki imleç Seçenekleri'ni kullanarak varsayılan olmayan bir değere ayarlayın. Exec Prepared SQL olay yürütülen ya da varolan hazırlanmış deyimi önceki türleri gösterir. Sık kaç kez yinelendiğini bu olayları görürseniz, sonuç açıldığında, uygulamanın hazırla/Yürüt modelinden kullanan ayarlar. Bu durumda, hazırla/Yürüt modelinden doğru kullanıyorsanız belirlemeniz gerekir.

    Ideal olarak, uygulama bir kez bir SQL deyimi hazırlar ve böylece iyileştirici deyimi yürütüldüğünde, her zaman yeni bir plan derlemeye sahip birden çok kez yürütür. Her bir hazırlanmış deyimi çalıştırdığınızda sorgu derleme maliyeti kaydedin. Bir sorguyu bir kez çalıştırmak istiyorsanız, Microsoft, bu hazırlamanız değil, önerir. Üç gidiş-dönüş ağ hazırlama ve sonra bir SQL deyimi yürütme gerektiriyor: bir ifade, bir deyim yürütme ve bir ifade unprepare hazırlamak için. Sunucu tarafı imleçleri hazırlama, en az beş yuvarlak gezilerinde gerektirir: imleç, execute veya açmak için kapatmak için bir veya daha çok, buradan getirmek için bir hazırlamak için tek ve onu unprepare bir. Sorgu yürütülürken, yalnızca bir gidiş dönüş gerektirir.

    Uygulamanız, hazırla/Yürüt modelinden etkin nasıl kullandığını görmek için <a0></a0>, bu iki olayın kaç kez karşılaştırma (hazırlamak ve yürütme) oluşur. Exec Prepared SQL olayı sayısı toplamı Prepare SQL ve CursorPrepare olayları (en az üç için beş kat daha büyük bir iyi tahmindir) daha büyük olmalıdır. Hazırlanmış deyimleri yeterli sıklıkta Artırılmış aşmak için tanımlarlar olduğunu gösteren oluşturmak için genel gider. Prepare SQL ve CursorPrepare olay sayısı için Exec Prepared SQL olayı sayısı yaklaşık eşdeğeri, bu uygulamanın hazırla/Yürüt modelinden etkin bir şekilde kullanmıyor gösterebilir. Bir kez bir deyimi hazırlamak ve onu mümkün olduğunca yeniden deneyin. Ayrıca, uygulamanızın bir kez deyimlerini hazırlama ve bu ifadeleri yeniden değiştirebilirsiniz.

    Uygulamanın hazırla/Yürüt modelinden etkin bir şekilde kullanmak için özel olarak yazılmalıdır. Yaşam süresini hazırlanmış deyimi için bir tanıtıcı ne kadar süreyle, HSTMT ODBC veya OLE DB ıcommandtext nesnesinde açık tutmak tarafından denetlenir. Bir ortak yöntem bir HSTMT almak, bir SQL deyimi hazırlamak, hazırlanmış deyimi yürütme ve sonra tanıtıcı, hazırlanan planı için böylece kaybeden HSTMT, boş olacaktır. Bunu yaparsanız, herhangi bir yararı hazırla/Yürüt modelinden almazsınız. Aslında, ek yükü nedeniyle ağ gidiş-dönüş, bir performans düşüşü görebilirsiniz. Uygulama, HSTMT veya hazırlanmış deyimi işleyicisi olan bir nesne önbelleğe ve bunları yeniden kullanılmak üzere erişmek için bir yöntem olmalıdır. Sürücü veya sağlayıcı bu otomatik olarak yapmaz; uygulama, uygulama, bakımını yapma ve bu bilgileri kullanarak sorumludur. Uygulama, bunu yapamazsınız, parametre imleyicileri yerine <a2>hazırla/Yürüt</a2> yöntemini kullanmayı göz önünde bulundurun.
  • Parametre imleyicileri kullanan Uygulamalar, parametre imleyicileri birkaç kez ile farklı bir giriş ve çıkış değerleri aynı Transact-SQL deyimini kullanımını en iyi duruma getirmek için kullanabilirsiniz. Bir sorgu yürütüldüğünde, ilk kez yeniden parametreli hale getirilmiş bir sorguya hazırlanır ve SQL Server oluşturur ve Parametreli Sorgu planını önbelleğe alır. Sonraki aramalar için ya da aynı veya farklı parametreleri kullanarak aynı sorgu için yeni bir sorgu planı oluşturmak SQL Server yok; SQL Server geçerli parametrelerini değiştirme olarak varolan bir sorgu planını yeniden kullanabilirsiniz.

    Uygulama çağrıları için (ODBC), SQLExecDirect veya ICommandText::Execute (için OLE DB) parametre imleyicileri kullanır, sürücü veya sağlayıcı otomatik olarak SQL deyimini paketleri ve onu bir sp_executesql çağrısı yürütülür. Deyim hazır ve ayrı ayrı çalıştırılır olması gerekmez. SQL Server bir ça?r? sp_executesql aldığında otomatik olarak eşleşen bir plan için yordamı önbelleği denetler ve bu planı yeniden kullanır veya yeni bir plan üretir.

    Uygulama şu anda parametre imleyicileri kullanıp kullanmadığını belirlemek için <a0></a0>, metin sütunu SQL Profiler izlemesi "sp_executesql" için arama yapabilir Ancak, Sp_executesql doğrudan denir, çünkü tüm örneklerini parametre imleyicileri kullanımını gösterir.

    Hazırla/Yürüt modelinden hakkında daha fazla bilgi için SQL Server 7.0 Çevrimiçi Kitapları'nda <a2>"yeniden yürütme planı önbellekleme ve Kullan"</a2> konusuna bakın. Parametre imleyicileri hakkında daha fazla bilgi için SQL Server 7.0 Çevrimiçi Kitapları'nda "Parameter işaretlerini" konusuna bakın.
  • SP: Tamamlanan EXECUTE komutuyla yürütülen dinamik SQL deyimleri olarak gösterilmesini bir SP: Tamamlanan olay metin "Dinamik SQL." Genişletme SP: Tamamlanan olayı ve ardından arama için metin olarak "dinamik SQL" olan tüm oluşumları. Varsa bu olayların birçoğu, EXECUTE deyimi yerine sp_executesql kullanarak uygulama performansını mümkün olabilir. Sp_executesql saklı yordamı aynı sorguyu kullanarak, değişik parametrelerle yeniden yürütüldüğünde, yürütme planları yeniden kullanmak için SQL Server'ı verir. EXECUTE deyimi kullandığınızda, plan değil parametrelenmiştir ve sorgu aynı parametreleri kullanarak yeniden yürütüldü sürece, yeniden değil.

    Sorguları veya dinamik SQL olayı ile EXECUTE kullanma yordamlarına belirlemek için ifade, <a1>Not</a1> bağlantı KIMLIĞI ve her olay için başlangıç saati. Izleme grubunu (Event Class ve metinGrup başlığından kaldırır). Izleme grubunu, sonra da kronolojik sırada sıralanır. Bağlantı kimliği (filtreler sekmesinde) izleme süzme ve dışındaki tüm olay sınıflarını kaldırın SP: Başlangıç ve SP: tam Artırılmış okunabilmesi için olaylar. Sonra başlangıç saatini olayın arayabilirsiniz (Düzen) menüsünde Bul ' u tıklatın). Dinamik SQL olayı başlatıldığında, sonuçları gösterir. Olay bir saklı yordamda oluştuysa, olay arasında görünür SP: Başlangıç ve SP: Tamamlanan olayları bu yordamın. Olay bir saklı yordamda oluşan, onu bir anlık sorgu olarak yürütüldü ve diğer veri sütunları (Uygulama adı, NT User Name ve diğerleri) burada komutu yürütüldükten belirlemek için kullanabilirsiniz. Komut ve burada çalıştırıldı Bağlam metni belirlemek için <a0></a0>, olay sınıflarını, SQL:BatchCompleted ve SQL:RPCCompleted ekleyebilirsiniz.

    EXECUTE deyimi kullanılıyor belirledikten sonra bir ça?r? sp_executesql ile değiştirmek göz önünde bulundurun. Örneğin, aşağıdaki senaryoyu düşünün; burada EXECUTE komutu dinamik SQL ile kullanılır. Bir yordam bir tablo adı, KIMLIĞI ve idValue giriş parametresi alır ve KIMLIK değerine dayanarak tablosundan, sonra bir SELECT deyimi yürütür. EXECUTE deyimi kullanarak yordamı aşağıdaki koda benzer:
    drop proc dynamicUsingEXECUTE
    		  go create proc dynamicUsingEXECUTE @table sysname, @idName varchar(10),
    		  @idValue varchar(10) as declare @query nvarchar(4000) -- Build query string
    		  with parameter. -- Notice the use of escape quotes. select @query = 'select *
    		  from ' + @table + ' where ' + @idName + ' = ''' + @idValue + '''' exec (@query)
    		  go
    varsayarak, bu yordamın @ idValue için iki kez farklı değerlerle pubs örnek veritabanının titles tablosunu karşı execute, sorguyu otomatik olarak, parametrelenmiştir parametresi, SQL Server her yürütme planını ayrı bir sorgu oluşturmanız gerekir. Örneğin:
    exec dynamicUsingEXECUTE
    		  'titles', 'title_id', 'MC2222' go exec dynamicUsingEXECUTE 'titles',
    		  'title_id', 'BU7832'
    Not bu örnekte, sorgunun SQL Server otomatik olarak parameterize ve gerçekte yürütme planı yeniden kadar basittir. Bu SQL Server değil otomatik olarak parameterize, karmaşık bir sorgu varsa, ancak, SQL Server için ikinci yürütme planını, yeniden değil @ idValue parametresi değiştirildi. Aşağıdaki basit sorguyu örnek karmaşıklığını sınırlar.

    EXECUTE deyimi yerine sp_executesql kullanmak için bu yordamı yeniden yazabilirsiniz. Parametre değiştirme desteği oluşturduğundan, SQL Server tarafından yeniden kullanılması daha yüksektir yürütme planları sp_executesql daha verimli hale getirir. Örneğin:
    drop proc dynamicUsingSP_EXECUTESQL go create proc
    		  dynamicUsingSP_EXECUTESQL @table sysname, @idName varchar(10), @idValue
    		  varchar(10) as declare @query nvarchar(4000) -- Build query string with
    		  parameter select @query = 'select * from ' + @table + ' where ' + @idName + ' =
    		  @idValue' -- Now execute with parameter exec sp_executesql @query, N'@idValue
    		  varchar(10)', @idValue go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    		  'MC2222' go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    		  'BU7832'
    bu örnekte, ilk kez sp_executesql deyimi yürütüldüğünde, SQL Server parametreli hale getirilmiş bir plan için başlıklarıtitle_id parametre ile gelen bir SELECT deyimi oluşturur. SQL Server, için ikinci yürütme planı yeni bir parametre değeri kullanır. Sp_executesql hakkında daha fazla bilgi için "sp_executesql (T-SQL)" ve SQL Server 7.0 Çevrimiçi Kitapları'nda "sp_executesql kullanma" konularına bakın.
  • SP:RECOMPILES Bu olay bir saklı yordam çalıştırılırken derlenmiş çekirdekler gösterir. Birçok recompile olay, SQL Server kaynaklarını sorgu yürütme yerine sorgu derleme için kullandığını gösterir.
Bu olaylar hiçbirini görmüyorsanız, uygulamayı yalnızca SQL Server geçici sorguları yürütülüyor. Yürütülen her sorgu, sürece, bu otomatik olarak bazı sorgular parameterize, SQL Server belirler veya aynı parametreleri sürekli olarak kullanılıyorsa, yeni bir yürütme planı oluşturmak, SQL Server gerektirir. SQL Server için performans izleyicisi, birçok SQL Derlemeleri/sn göstermelidir. Bu, CPU kullanımı yoğun olabilir çok sayıda eşzamanlı kullanıcı için. Bu soruna geçici bir çözüm bulmak için <a0></a0>, en sık sorguları için yürütülen bulmak ve saklı yordamlar için bu sorguları, parametre imleyicileri kullanan veya sp_executesql kullanma oluşturmayı düşünün.

Referanslar

Izleme ve SQL Server performans sorunlarını giderme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
224587SQL Server'da Uygulama performansı nasıl giderilir
224453INF: Anlama ve SQL Server 7.0 veya 2000 engelleme sorunlarını giderme
243586Saklı yordamın recompilation sorun giderme
243589Nasıl yapılır: SQL Server 7.0 veya sonraki sürümlerde yavaş çalışan sorgularda sorun giderme
251004BILGI: SQL Server 7.0 engelleme izlemek nasıl

Özellikler

Makale numarası: 243588 - Last Review: 8 Aralık 2005 Perşembe - Gözden geçirme: 5.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster kbhowto kbinfo KB243588 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:243588

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com