Düzeltme: Uzak sunucuda farklı alfabe ile birlikte veri güncelleştirdiğinizde, bağlantılı sunucu SQL Server 2012 düşük performans

# Hata: 190237 (İçerik Bakımı) VSTS: 1427743

Belirtiler

Aşağıdaki senaryoyu düşünün:

  • Bağlantılı bir sunucu, yerel sunucu ve hem de Microsoft SQL Server 2012 örnekleri olan bir uzak sunucu arasında yapılandırılır.

  • Yerel sunucu büyük küçük harf duyarlı harmanlamayı gibi bir harmanlama kullanarak yapılandırılır.

  • Uzak sunucu büyük küçük harf duyarlı alfabe düzeni gibi yerel sunucudan farklı bir harmanlama yapılandırılmış olan bir nesne var.

  • Bir bağlantı Microsoft JDBC sürücüsü'nü için SQL Server, SQL Server, SQL OLE DB sağlayıcısı veya SQL Native Client için Microsoft ODBC sürücüsü yerel sunucuya yapılır.

  • Sürücü olarak yerel sunucuda sp_prepexec saklı yordamı çağıran hazırlanmış deyimi Transact-SQL güncelleştirme sorgusu yürütür.

  • Uzak sunucudaki bir tablonun sorgusunu güncelleştirir. Bu yerel sunucudan farklı bir alfabe kullanan bir column nesnesi içerir.

Bu senaryoda sorgu yürütme düşük performansla karşılaşabilirsiniz. Güncelleştirme sorgusu yürütme planını denetle, süzme olmadan uzaktan tarama tablosunda bir uzak sunucu üzerinde gerçekleştirilir görebilirsiniz. Bu nedenle, uzak tablo tarar ve sonra yerel sunucuya tüm satırları alır çok okuma sorgu gerçekleştirebilir.

Örneğin, sorgu yerel sunucuda varsayılan büyük küçük harf duyarlı alfabe düzeni var. hazırlanır ve uzak sunucu T1 büyük küçük harf duyarlı olan bir sütunu içeren bir tablo vardır. Update T1tüm satırların tarar.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1

Neden

Sorun, uzak tablo prepared güncelleştirme sorgusu tarayacağı harmanlama sunucularda hem de eşleşmediğinde oluşur.

Çözüm

Düzeltme uygulandıktan sonra izleme bayrağı 4199 bağlantılı sunucu barındıran yerel sunucuda etkinleştirmeniz gerekir. Hakkında traceflag etkinleştirmek için lütfen daha fazla bilgi bölümüne bakın.

Not: Düzeltme yalnızca hazırlanmış deyimleri en iyi duruma getirir ve bağlantılı sunucu barındıran yerel sunucuya uygulanır. Bu düzeltme, uzak sunucuya uygulanmaz.

Sorun ilk olarak SQL Server aşağıdaki toplu güncelleştirmede giderilmiştir.

SQL Server 2012 SP1 için toplu güncelleştirme 6/en-us/help/2874879

Her yeni bir toplu güncelleştirme SQL Server için tüm düzeltmeleri içerir ve tüm güvenlik, düzeltmelerini önceki toplu güncelleştirme ile birlikte. SQL Server için en son toplu güncelleştirme denetleyin:


Düzeltme bilgileriMicrosoft, desteklenen bir düzeltmeyi kullanıma sunmuştur. Ancak bu düzeltme yalnızca bu makalede anlatılan sorunu düzeltmek amacıyla hazırlanmıştır. Bu düzeltmeyi yalnızca bu sorunla karşılaşmış olan sistemlere uygulayın.

İndirilebilir bir düzeltme varsa, bu Bilgi Bankası makalesinin üst kısmında "Düzeltme İndirilebilir" bölümü bulunur. Bu bölüm görünmüyorsa, düzeltmeyi edinmek üzere Microsoft Müşteri Hizmetleri ve Destek bölümüne bir istek gönderin.

Not: Ek sorunlar oluşursa veya sorun giderme gerekiyorsa, ayrı bir hizmet isteği oluşturmanız gerekebilir. Ek destek sorularına ve bu düzeltme için geçerli olmayan sorunlara normal destek ücretleri uygulanır. Tam listesi Microsoft Müşteri Hizmetleri ve destek telefon numaralarını veya ayrı bir hizmet isteği oluşturmak için aşağıdaki Microsoft Web sitesini ziyaret edin:

http://support.microsoft.com/contactus/?ws=supportNot: "Düzeltme indirilebilir” formu, düzeltmenin indirilebildiği dilleri görüntüler. Kendi dilinizi görmüyorsanız, bu dil için bir düzeltme mevcut değil demektir.

ÖnkoşullarBu düzeltmeyi uygulamak için SQL Server 2012 yüklü olması gerekir.

Kayıt defteri bilgileriBu düzeltmeyi uyguladıktan sonra kayıt defterini değiştirmeniz gerekmez.

Düzeltme değiştirme bilgileriBu düzeltme eki, başka düzeltmelerin yerini almaz.


SQL Server iyileştirici yürütme planı içinde where yan tümcesi uzak sunucunun uzak tablosundan alınan bir satır en aza indirmek için itilir uzak filtreleme yapmak izin vermek bir düzeltme sağlar.

Durum

Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Geçici çözüm

Çalışmak için sorun abound, aşağıdaki yöntemlerden birini kullanın:

  • İstemci uygulama kaynak kodunda hazırlanmış deyimleri kullanmayın. Sürücü bu arabirimleri desteklemesi durumunda geçici deyimleri veya saklı yordamlar gibi çağrılabilir deyimleri yerine kullanabilirsiniz.

  • Her iki sunucularda eşleşen bir harmanlama kullanın.

Daha fazla bilgi

İzleme bayrağı'nı etkinleştirmek için başlangıç parametresini ekleyin -T4199 veya davranışını etkinleştirmek için hazırlanmış deyimi derlenmiş önce DBCC TRACEON(4199,-1) .

İzleme bayrağı'nı etkinleştirmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:

  • SQL Server başlamadan önce Microsoft SQL Server Configuration Manager kullanın, etkilenen örneğini sağ tıklatın ve başlangıç parametresini ekleyin -T4199 örnek için tüm bağlantıları ve yeniden başlatmalar arasında gelecekte devam böylece.

  • Dinamik olarak hizmeti başlatıldıktan sonra çalışma zamanında ve genel olarak tüm bağlantılar "(-1) için ayarı etkinleştirin." Açık veya kapalı anahtarı ile test yapmayı planlıyorsanız, yordam önbelleği boşaltmak emin olun.

    Ayarı etkinleştirmek için aşağıdaki kullanın genel ve dinamik olarak:
    DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE
    Bu ayarı devre dışı bırakmak için aşağıdaki kullanın genel ve dinamik olarak:
    DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE


Yazar: jannaw; jasonh
Yazan: v-shysun
Teknik İnceleme: jasonh; jayc; makohli; jannaw; sqlprev
Düzenleyen: v-mordew

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yardımcı oldu mu?

Geri bildiriminiz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×