Makale numarası: 953199 - Son Gözden Geçirme: 14 Ağustos 2008 Perşembe - Gözden geçirme: 1.0

Nasıl yapılandırılacağı ve SQL Server 2005'te dağıtım aracısının SubscriptionStreams parametre ile ilgili sorunları giderme

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Giriş

Bir işlem çoğaltmasında Microsoft SQL Server 2005'te, kümeler için abone paralel değişiklikleri uygulamak için dağıtım Aracı'nı kullanan birden çok bağlantı kurulmasını sağlayan SubscriptionStreams parametresini kullanabilirsiniz. Distribution Agent değişiklikleri uygulamak için tek bir bağlantı kullandığında aynı anda dağıtım aracısını hala işlem aynı özelliklerin çoğu sağlayabilirsiniz.

Not Aşağıdaki bölümlerde, abone adresindeki SQL Server örneğine dağıtım Aracı'nı açan bir bağlantı oturumu gösterir.

Özet

Bu makale aşağıdaki konuları açıklar:
  • Nasıl sorun giderileceği, Dağıtım Aracısı yalnızca bir oturum kullanma geçirir.
  • Etkili bir değer için SubscriptionStreams belirleme parametresi.

Daha fazla bilgi

SubscriptionStreams parametre belirtildikten sonra Dağıtım Aracısı davranışını

Distribution Agent SubscriptionStreams parametresinde belirttiğiniz oturumların sayısını tutar. Dağıtım aracı bu oturumlar abone değişiklikleri uygulamak için kullanır.

Ancak, SubscriptionStreams parametre belirlemek ve dağıtım aracısını süre çalışan sonra Dağıtım Aracısı tek bir oturum için abone değişiklikleri uygulamak için kullanılacak geçiş.

Tek bir oturum kullanma nedenleri Dağıtım Aracısı geçmek için

Dağıtım aracı, tek bir oturum çeşitli nedenlerle kullanmaya geçiş. En sık karşılaşılan nedenleri şunlardır:
  • Tüm oturumların bir, dağıtım aracısını değişiklikler uygulanırken bir hata yükseltir.

    Örneğin, dağıtım aracısını alt tabloya bir oturumla kullanarak ekler. Dağıtım aracı kullanarak başka bir oturuma karşılık gelen satır ana tabloya ekler önce bu durum ortaya çıkarsa, bir yabancı anahtar kısıtlaması ihlali hata iletisi yükseltir.
  • Engelleme durdurma izleme iş parçacığı algılar. Engelleme, aşağıdaki nedenlerin birinden dolayı oluşabilir:
    • Dağıtım Aracısı, farklı Oturumlar'ı kullanarak bir INSERT işlemi ve abone bir tabloya bir UPDATE işlemi gerçekleştirir. Tabloda kümelenmemiş benzersiz bir dizin varsa, Dizin anahtarlarının tablonun dağıtım aracı güncelleştirmeleri arasındaki iki oturumları engelleme oluşabilir.
    • Abone sırasında dağıtım aracısını, DML deyimlerini birden çok tablo üzerinde çalışır. Dizin oluşturulmuş görünüm, bu tabloyu tanımlıysa, dizinlenmiş görünümün paylaşılan dizin anahtarlarının güncelleştirdiğinde arasındaki iki oturumları engelleme oluşabilir.
    • Distribution Agent bir DML deyimi abone bir tabloya karşı bir oturumla kullanarak çalışır. DML Tetikleyicileri, bu tabloda tanımlanır. DML Tetikleyicileri, başka bir oturuma kullanarak güncelleştirilmekte olan başka bir tablodaki DML deyimlerini çalıştırın. Bu durumda, iki oturumlar arasında engelleme oluşabilir.
Abone veritabanına aşağıdaki veritabanı nesnelerini kullanmamanız önerilir:
  • Yabancı anahtar kısıtlamaları
  • Benzersiz kümelenmemiş dizin
  • Dizin oluşturulmuş görünümler
  • Oturumlar arasında engelleme neden DML Tetikleyicileri

Distribution Agent tek bir oturum kullanmak geçirdi olup olmadığı nasıl belirlenir

Bunu yapmak için aşağıdaki yöntemlerden birini kullanın.

Not Distribution Agent yöntem 1'i kullanarak bir oturumu kullanılacak geçirdi değil, onaylamak, ancak dağıtım aracı bir oturum kullanılacak geçirdi onaylamak için yöntem 2'i veya yöntem 3'ü kullanmanız gerekir.

Yöntem 1

Abone veritabanına bağlantı oturumlarının sys.dm_exec_sessions Dinamik yönetim görünümü (DMV) sorgular. Yalnızca tek bir bağlantıda oturum görürseniz, dağıtım aracı bir oturum kullanmak için geçmiş olabilirsiniz. Dağıtım aracı, hala birden fazla bağlantı oturumu görürseniz, belirtilen oturum sayısı kullanıyor.

Dağıtım aracı bir oturum kullanılacak geçirdi onaylamak için <a0></a0>, <a1>Yöntem</a1> 2 veya yöntem 3'ü kullanın.

Yöntem 2

Distribution veritabanını msdistribution_history tablosunda <a1>Açıklamalar</a1> sütunu sorgu. Sorgunun sonucunu aşağıdaki girdi içeriyorsa, dağıtım aracı bir oturum kullanmak geçirdi:
Son toplu iş modunda çok akış tamamlamak işlem başarısız oldu, tek bir bağlantı modu sıfırlandı ve işlemi yeniden denemeden.

Yöntem 3

Dağıtım Aracısı'nın çıktı dosyasını inceleyin. Dağıtım Aracısı, yöntem 2'olarak aynı hata iletisini çıktı dosyası içeriyorsa, tek bir oturum kullanılacak geçirdi.

Aşağıdaki çıktı dosyası örneğidir:
<Date><Time>100 hareketi(leri) 1181 command(s) ile teslim.
<Date><Time>100 hareketi(leri) 2672 command(s) ile teslim.
<Date><Time>Demet 6 kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme durduruldu.
<Date><Time>Kilitlenme spid arasında 117 ve 114 bulundu için hazır Commit bir olay için bekleme aralığı 1 iptal edildi
<Date><Time>Demet 3 kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme durduruldu.
<Date><Time>Kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme aralığı 0 iptal edildi
<Date><Time>Demet 5 kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme durduruldu.
<Date><Time>Demet 2 kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme durduruldu.
<Date><Time>Kilitlenme spid arasında 117 ve 114 bulunan için hazır Commit bir olay için bekleme aralığı 7 iptal edildi
<Date><Time>Demet 4 bekleme olayı için hazır tamamlama iş parçacığı kapanma olay yüzünden iptal edildi.
...
<Date><Time>Abonelik akış sayısı 1 ile 8 sıfırlandı, 4 belirtin.
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>
<Date><Time>Abone bağlantıyı kesme <SQLinstance>

<Date><Time>Abone için bağlanma <SQLinstance>
<Date><Time>Son toplu iş modunda çok akış tamamlamak işlem başarısız oldu, tek bir bağlantı modu sıfırlandı ve işlemi yeniden denemeden.
<Date><Time>21 hareketi(leri) 390 command(s) ile teslim.

Tek bir oturum kullanılacak anahtarları bir dağıtım aracısını nasıl giderilir

  1. SQL Server Profiler bloke işlemi rapor olay ve özel durum olayının yakalama için abone üzerinde çalıştırın. Bu olaylar, engelleme ve dağıtım aracısını değişiklikleri uygular ortaya çıkan hataların kaydedin.

    NotÖzel olay herhangi bir sorun ile ilişkili olan hata türünü neden olabilir. Örneğin, hata bir yabancı anahtar kısıtlaması ihlali neden olabilir.
  2. Distribution Agent izlemek için "dağıtım aracı yalnızca bir oturum kullanılacak geçirdi olup olmadığını belirleme" bölümünde de yöntemlerden birini kullanın.
  3. Dağıtım aracı bir oturum kullanılacak geçti, izlemeyi durdur.
  4. Dağıtım Aracısı'nın <a1>Çıkış</a1> dosyasından veya msdistribution_history tablonun <a1>start_time</a1> sütunundan aşağıdaki girdinin zaman damgasını edinin:
    Son toplu iş modunda çok akış tamamlamak işlem başarısız oldu, tek bir bağlantı modu sıfırlandı ve işlemi yeniden denemeden.
  5. <a1>Izleme</a1> (trc) dosyasını abone açın. Engelleme komut dosyası veya bir özel durum olayı, zaman damgası aynı veya yakın bir çok adım 4'te alınan zaman damgası için olan bulun.
  6. Özel bir durum fark ederseniz, özel durumun nedenini belirlemek için ayrıntıları inceleyin. Örneğin, özel bir yabancı anahtar kısıtlaması ihlali neden olmuş olabilir. Bu durumda, abone veritabanına yabancı anahtar kısıtlamasını kaldırmanız önerilir.

    Engelleme komut dosyası görürseniz, sorunu engelleyerek nedeniyle oluşur. The following is a sample blocking script:
    <blocked-process-report monitorLoop="41589">
     <blocked-process>
      <process id="process3a6d438" taskpriority="0" logused="24592" waitresource="KEY: 6:72057594375700480 (0100e420fa5a)" waittime="9937" ownerId="568644832" transactionname="user_transaction" lasttranstarted="2008-05-05T04:55:04.430" XDES="0xa5619e370" lockMode="X" schedulerid="11" kpid="6104" status="suspended" spid="58" sbid="0" ecid="0" priority="0" transcount="2" lastbatchstarted="2008-05-05T04:55:04.553" lastbatchcompleted="2008-05-05T04:55:04.430" clientapp=<DistributionAgentProgram> hostname=<servername> hostpid="3980" loginname=<SQLAgentAcct>  isolationlevel="read committed (2)" xactid="568644832" currentdb="6" lockTimeout="4294967295" clientoption1="671090784" clientoption2="128056">
       <executionStack>
        <frame line="5" stmtstart="642" stmtend="1600" sqlhandle="0x0300060057a14477a8c6dd00609a00000100000000000000"/>
       </executionStack>
       <inputbuf>
    Proc [Database Id = 6 Object Id = 2000986455]   </inputbuf>
      </process>
     </blocked-process>
     <blocking-process>
      <process status="sleeping" spid="68" sbid="0" ecid="0" priority="0" transcount="1" lastbatchstarted="2008-05-05T04:55:04.570" lastbatchcompleted="2008-05-05T04:55:05.103" clientapp=<DistributionAgentProgram> hostname=<servername> hostpid="3980" loginname=<SQLAgentAcct> isolationlevel="read committed (2)" xactid="568644998" currentdb="6" lockTimeout="4294967295" clientoption1="671090784" clientoption2="128056">
       <executionStack/>
       <inputbuf>
    Proc [Database Id = 6 Object Id = 1172459501]   </inputbuf>
      </process>
     </blocking-process>
    </blocked-process-report>
    
    Engellenmiş olan bir oturumu ve engelleme oturum engelleme komut dosyası kaydeder. Engellenen oturum <blocked-process> etiketinden başlatır. Engelleyici oturum <blocking-process> etiketinden başlatır.
  7. Nesne KIMLIĞI <a0>Proc</a0> nesnesinin, engellenen oturum ve engelleme oturum bulun.

    Örnek komut dosyası engelleme engellenmiş oturumunda Proc nesnenin nesne KIMLIĞI 2000986455 ' dir. Engelleyici oturumunda Proc nesnenin nesne KIMLIĞI 1172459501 ' dir.
  8. Abonelik veritabanında sys.objects görünümü, 7. adımda elde ettiğiniz kimlik nesnesine eşit object_id sütun belirterek sorgu. Bunu yaptığınızda, nesne adını belirleyebilirsiniz.

    Örneğin, aşağıdaki sorgu, abone veritabanı bağlamında çalıştırın:
    USE <SubDBName>
    GO
    SELECT name FROM sys.objects
    WHERE object_id = 1172459501 OR object_id = 2000986455
    
    Notları
    • <SubDBName> yer tutucusu, abonelik veritabanının adını gösterir.
    • Genellikle, bu yineleme içinde kullanılan saklı yordamlar nesneleridir.
  9. Dizin veya engellemeye neden olan dizinlenmiş görünümün belirler. Bunu yapmak için şu adımları izleyin:
    1. Engelleme komut dosyası <a0>waitresource</a0> özelliğinin değerini bulun.

      Örnek komut dosyası engelleme 72057594375700480 <a0>waitresource</a0> özelliğinin değeridir.
    2. Adım 9a elde ettiğiniz waitresource özelliğinin değerine eşit PARTITION_ID sütun belirterek, nesne KIMLIĞI ve dizin KIMLIĞI edinmek için sys.partitions görünümü sorgula.

      Örneğin, aşağıdaki sorguyu çalıştırabilir:
      SELECT object_id, index_id FROM SYS.PARTITIONS WHERE PARTITION_ID=72057594375700480
    3. Abonelik veritabanındaki, nesne KIMLIĞI ve adım 9b elde ettiğiniz dizin KIMLIĞI'ni kullanarak dizini belirlemek için sys.indexes görünümü sorgula.

      Örneğin, aşağıdaki sorguyu çalıştırın: <a1>
      USE <SubDBName>
      GO
      SELECT name, type_desc, is_unique FROM sys.indexes
      WHERE object_id = <objID> and index_id = <idxID>
      
      Not<objID> yer tutucusu adım 9b alınan nesne KIMLIĞI gösterir. <idxID> yer tutucusu adım 9b alınan dizin KIMLIĞINI gösterir.
  10. Dizin oluşturulmuş görünüm tarafından engellenmesi nedeniyle oluşur, dizinlenmiş görünümün bırak öneririz. Kümelenmemiş bir benzersiz dizin tarafından engelleme neden olursa, dizini bırakın ve sonra da bir benzersiz dizin yeniden olduğunu öneririz.

Engelleyici izleme iş parçacığı açıklaması

Distribution Agent arasındaki oturumları engelleme algıladığı engelleme izleme iş parçacığı korur. Engelleyici izleme iş parçacığı arasındaki oturumları engelleme algılarsa, dağıtım aracı bir oturumla dağıtım aracısını önceden uygulanamadı komutların Cari toplu işlemin yeniden uygulamak için kullanılacak geçiş yapar.

Engelleyici izleme iş parçacığı hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956601  (http://support.microsoft.com/kb/956601/ ) Engelleyici izleme iş parçacığı SQL Server 2005'in açıklaması

Nasıl dağıtım aracı birden çok oturum sürdürür.

Dağıtım aracı birden çok oturum sürdürebilirsiniz önce dağıtım aracısını sp_MSget_repl_commands depolanan yordamı sırasında abone uygulanan komutları distribution veritabanını yeniden sorgulamak için yürütmelisiniz. Sonra dağıtım aracı birden çok oturum sürdürebilirsiniz önce dağıtım aracı bu abone tüm komutları uygulamanız gerekir. Dağıtım aracı birden çok oturum sürdürebilirsiniz önce dağıtım aracısını abone birçok komutları uygulamanız gerekir çünkü görünmeyen çoğaltma ortamında, dağıtım aracı birden çok oturum devam edemiyor.

Tüm işlem izlemek için <a0></a0>, dağıtım aracısının çıktı dosyasını inceleyin.

Referanslar

Disk alt sistemi üretilen işi artırmanın SubscriptionStreams parametresini kullanma hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956600  (http://support.microsoft.com/kb/956600/ ) Nasıl yapılır: SQL Server 2005'te iyileştirilmiş disk alt sistemi geçiş için sınamak için SubscriptionStreams parametresini kullanın.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
Anahtar Kelimeler: 
kbmt kbsql2005repl kbexpertiseadvanced kbhowto kbinfo KB953199 KbMttr
Otomatik TercümeOtomatik Tercüme
Ö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:953199  (http://support.microsoft.com/kb/953199/en-us/ )