DÜZELTME: SQL Server 2005 veya SQL Server 2008'de düşük bellek durumunda bir veri akışı görevi içeren bir SSIS paketini çalıştırdıktan sonra hata iletileri alıyorsunuz veya veriler bozulmuş

Microsoft, Microsoft SQL Server 2008 düzeltmelerini indirilebilir tek bir dosya olarak dağıtır. Düzeltmeler birikimli olduğundan, her yeni sürüm önceki SQL Server 2008 düzeltme sürümüne eklenmiş olan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir.

Belirtiler

Aşağıdaki senaryoyu ele alalım:

  • SQL Server 2005 veya SQL Server 2008'de bir SQL Server Integration Services (SSIS) paketi çalıştırıyorsunuz.

  • SSIS paketi bir veri akışı görevi içerir.

  • SSIS paketini kullanılabilir belleği düşük olan bir bilgisayarda çalıştırdınız. Düşük bellek durumu geçici veya aralıklı olarak oluşabilir.

  • SSIS paketini çalıştırdığınızda, yetersiz bellek koşulu nedeniyle veri arabellekleri diske yazılır.

Bu senaryoda, aşağıdaki belirtilerden biriyle veya birkaçıyla karşılaşabilirsiniz:

Belirti 1

Veriler, veri akışı hedefine ulaşmadan önce bozulur. Veri akışı hedefindeki verilerin beklenmedik bir şekilde aşağıdaki değerlere dönüştüğünü görüyorsunuz.

  • "" : NULL, boş veya boş dize değerleri
  • 0 : Daha yüksek hassasiyet ve ölçeğe sahip sıfır değeri veya sıfır değeri.
  • 0-0-0 0:0:0 : Kesik sıfır tarih değeri

Not Bu belirtiyle karşılaştığınızda bir hata iletisi almazsınız.

Belirti 2

Aşağıdaki veri türü dönüştürme hatası iletilerinden birini alıyorsunuz:

Hata iletisi 1

Not

DTS_E_OLEDBERROR. OLE DB hatası oluştu. Hata kodu: 0x80004005.

Bir OLE DB kaydı var. Kaynak: "Microsoft SQL Yerel İstemcisi" Hresult: 0x80004005 Açıklama: "Atama belirtimi için geçersiz karakter değeri".

Hata iletisi 2

Not

DTS_E_COLUMNSTATUSERROR. "OLE DB Hedef Girişi" (IDNumber) girişinde "ColumnName" (IDnumber) giriş sütununda bir hata oluştu. Döndürülen sütun durumu şuydu: "Veri değeri belirtilen türü aştığından dönüştürme başarısız oldu.".

Belirti 3

Aşağıdaki kısıtlama ihlali hata iletisini alırsınız:

Not

DTS_E_OLEDBERROR. OLE DB hatası oluştu. Hata kodu: 0x80004005.

Bir OLE DB kaydı var. Kaynak: "Microsoft SQL Yerel İstemcisi" Hresult: 0x80004005 Açıklama: "Deyim sonlandırıldı.".

Bir OLE DB kaydı var. Kaynak: "Microsoft SQL Yerel İstemcisi" Hresult: 0x80004005 Açıklama: "'PrimaryKeyName' PRIMARY KEY kısıtlamasının ihlali. 'TabloAdı' nesnesine yinelenen anahtar eklenemiyor.".

Buna ek olarak, bellek kullanılabilir olduğunda aynı SSIS paketini yeniden çalıştırırsanız bu sorun oluşmaz.

Neden

Veri akışı altyapısına düşük bellek kaynağı bildirimi gönderildiğinde, veri akışı altyapısı veri arabelleklerini geçici olarak diske yazar. Bu sorun, veri akış altyapısı arabellekleri diske yazarken veri değerlerinin yanlış bir şekilde NULL veya sıfır olarak ayarlanmasından kaynaklanır. Bu nedenle, veri akışı altyapısı veri arabelleklerinden verileri okuduğunda ve ardından verileri veri akışı hedefine yazdığında, veri akışı hedefi bozuk veri değerleri içerecektir. Bozuk veri değerleri, veri türü dönüştürme hatalarına veya kısıtlama ihlali hatalarına da neden olabilir.

Çözüm

Toplu güncelleştirme bilgileri

SQL Server 2008'in yayın sürümü

Bu soruna yönelik düzeltme ilk olarak Toplu Güncelleştirme 6'da yayınlandı. Bu SQL Server 2008 toplu güncelleştirme paketini edinme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

971490 SQL Server 2008 için Toplu Güncelleştirme Paketi 6Not: Derlemeler birikimli olduğundan, her yeni düzeltme önceki SQL Server 2008 düzeltme sürümüne dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünmenizi öneririz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

956909 SQL Server 2008 yayımlandıktan sonra yayımlanan SQL Server 2008 derlemeleri

SQL ServerSQL Server 2008 Service Pack 1 (SP1)

Önemli SQL Server 2008 Service Pack 1 (SP1) çalıştırıyorsanız, bu düzeltmeyi yüklemeniz gerekir.

 Bu soruna yönelik düzeltme SQL Server 2008 Service Pack 1 için Toplu Güncelleştirme 3'te de yayınlandı. Bu toplu güncelleştirme paketi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

971491 SQL Server 2008 Service Pack 1Not için Toplu Güncelleştirme Paketi 3 Derlemeler birikimli olduğundan, her yeni düzeltme önceki SQL Server 2008 düzeltme sürümünde yer alan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Microsoft, bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünmenizi önerir. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

970365 SQL Server 2008 Service Pack 1 yayımlandıktan sonra yayımlanan SQL Server 2008 derlemeleri
 Microsoft SQL ServerSQL Server 2008 düzeltmeleri belirli SQL ServerSQL Server hizmet paketleri için oluşturulur. Bir SQL ServerSQL Server 2008 Service Pack 1 yüklemesine bir SQL ServerSQL Server 2008 Service Pack 1 düzeltmesi uygulamanız gerekir. Varsayılan olarak, bir SQL ServerSQL Server hizmet paketinde sağlanan tüm düzeltmeler, bir sonraki SQL ServerSQL Server hizmet paketine dahil edilir.

SQL ServerSQL Server 2005 Service Pack 2 (SP2)

Önemli SQL Server 2005 Service Pack 2 kullanıyorsanız bu düzeltmeyi yüklemeniz gerekir.

Bu soruna yönelik düzeltme ilk olarak SQL Server 2005 Service Pack 2 için Toplu Güncelleştirme 15'te yayımlanmıştır. Bu toplu güncelleştirme paketi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

972510 SQL Server 2005 Service Pack 2 için Toplu Güncelleştirme Paketi 15Not: Derlemeler birikimli olduğundan, her yeni düzeltme önceki SQL Server 2005 düzeltme sürümüne eklenmiş olan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Microsoft, bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünmenizi önerir. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

937137 SQL Server 2005 Service Pack 2 yayınlandıktan sonra yayımlanan SQL Server 2005 derlemeleri
Belirli SQL Server hizmet paketleri için Microsoft SQL Server 2005 düzeltmeleri oluşturulmuştur. Bir SQL ServerSQL Server 2005 Service Pack 2 yüklemesine bir SQL ServerSQL Server 2005 Service Pack 2 düzeltmesi uygulamanız gerekir. Varsayılan olarak, bir SQL ServerSQL Server hizmet paketinde sağlanan tüm düzeltmeler, bir sonraki SQL ServerSQL Server hizmet paketine dahil edilir.

SQL ServerSQL Server 2005 Service Pack 3 (SP3)

Önemli SQL Server 2005 Service Pack 3 çalıştırıyorsanız bu düzeltmeyi kullanmalısınız.

Bu soruna yönelik düzeltme SQL Server 2005 Service Pack 3 için Toplu Güncelleştirme 5'te de yayınlandı. Bu toplu güncelleştirme paketi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

972511 SQL Server 2005 Service Pack 3 için Toplu Güncelleştirme Paketi 5Not: Derlemeler birikimli olduğundan, her yeni düzeltme önceki SQL Server 2005 düzeltme sürümüne eklenmiş olan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Microsoft, bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünmenizi önerir. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

960598 SQL Server 2005 Service Pack 3 yayımlandıktan sonra yayımlanan SQL Server 2005 derlemeleri
Belirli SQL Server hizmet paketleri için Microsoft SQL Server 2005 düzeltmeleri oluşturulmuştur. SQL Server 2005 Service Pack 3 yüklemesine bir SQL Server 2005 Service Pack 3 düzeltmesi uygulamanız gerekir. Varsayılan olarak, bir SQL ServerSQL Server hizmet paketinde sağlanan tüm düzeltmeler, bir sonraki SQL ServerSQL Server hizmet paketine dahil edilir.

Geçici çözüm

Bu sorunu geçici olarak çözmek için yetersiz bellek durumunu çözün. Bu sorunu tetikleyebilecek en düşük bellek miktarı bilgisayardan bilgisayara değişir. Genellikle bu miktar 32 megabayt (MB) ile 64 MB kullanılabilir bellek arasındadır. Bu nedenle, sunucuyu SSIS'ye 64 MB'den fazla kullanılabilir bellek ayıracak şekilde yapılandırmanız önerilir.

Düşük bellek kaynağı bildirim olayını işaret eden varsayılan kullanılabilir bellek miktarı 4 gigabayt (GB) başına yaklaşık 32 MB ve 4 GB başına maksimum 64 MB'dir. Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:

http://msdn.microsoft.com/en-us/library/aa366541(85'E KARŞI).aspx
        
Ancak, bu sorunu tamamen önlemek zordur çünkü kullanılabilir bellek yoğun üretim sunucularında büyük ölçüde dalgalanabilir. Ek olarak, hafıza normal aktiviteler içinde çeşitli nedenlerle azalabilir. Bu sorunun sıklığını azaltmaya yardımcı olmak için aşağıdaki yöntemlerden birini kullanın:

Yöntem 1

Bilgisayara daha fazla fiziksel bellek ekleyin.

Yöntem 2

SSIS paketini, SQL ServerSQL Server örneğini çalıştıran bilgisayardan farklı bir bilgisayarda çalıştırın.

Yöntem 3

SSIS paketini SQL Server örneğinin çalıştırıldığı bilgisayarda çalıştırırsanız, bilgisayardaki kullanılabilir belleği artırmak için örneğin en yüksek sunucu belleği yapılandırması seçeneğini daha küçük bir değere ayarlayın.

Yöntem 4

SSIS'yi çalıştırdığınızda çok fazla bellek tüketen stresli uygulamalardan çıkın TVeri AkışıVeri Akışı görevleri içeren paketler.

Yöntem 5

Bellek kullanımının kümülatif tüketimini azaltmak için SSIS paketlerini ve veri akışı görevlerini paralel olarak değil seri olarak çalıştırın.

Yöntem 6

Düşük bellek durumunu gidermek ve ardından SSIS için bellek kullanımını en iyi duruma getirmek için "Ek Bilgi" bölümündeki "SSIS için bellek tüketimini izleme" alt bölümünde açıklanan yöntemi kullanın.

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Daha Fazla Bilgi

Belirtiler hakkında daha fazla ayrıntı

Belirti 1

Veri akışı hedefinde bozuk veri değerleri bulursanız, bozuk veri değerleri veri türüne bağlı olarak farklı gösterimler olarak görünebilir. Örneğin, aşağıdaki veri türleri, bozuk veri değerlerinin farklı gösterimleri olarak görünür:

DT_STR = "" NULL, boş veya boş dize değerleri
DT_I4 = 0 Tamsayı veri türünün sıfır değeri
DT_UI1 = 0 İşaretsiz tamsayı veri türünün sıfır değeri
DT_NUMERIC = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Daha yüksek hassasiyet ve ölçeğe sahip sıfır değeri.
DT_DBTIMESTAMP = 0-0-0 0:0:0 Kesik sıfır tarih değeri

Çoğu senaryoda, tüm sütunlarda ve tüm satırlarda bozuk veri değerleri vardır veya sütunların ve satırların önemli bir bölümünde bozuk veri değerleri vardır. Ayrıca, veriler bozulsa bile hedefe ulaşan toplam satır sayısı genellikle hedefteki beklenen satır sayısıyla eşleşir. Buna bir arabellek sorunu neden olur. Çalışan veri akışı görevindeki tüm arabellekler veya bir dizi arabellek etkilenebilir. Arabellek boyutuna ve satır başına veri boyutuna bağlı olarak, her arabellekte yüzlerce satır bulunabilir.

Bazı gelişmiş tasarımlarda, veri akışı görevindeki tüm sütunlar etkilenmez. Veriler, veri akışı görevi içinde ifadeler, türetilmiş sütun dönüştürme ve arama dönüştürme gibi dönüştürmeler kullanılarak işlenirse, verilerin bazı sütunları beklenen değerleriyle aynı kalabilir. Bunun nedeni, SSIS'nin veri akışı görevi sırasında bozuk verileri bu dönüştürülmüş değerlerle değiştirmesidir.

Diğer gelişmiş tasarımlarda, bazı satırlar kaybolabilir. SSIS veri akışı tasarımlarında veri yönünün esnek doğası nedeniyle, beklenmedik veri değerleri tasarım tarafından koşullu sütunda algılanırsa, bozuk veriler beklenmedik bir hedefe yönlendirilebilir. Koşullu bölme dönüşümleri veya Arama dönüştürmeleri gibi dönüştürmeler kullandığınızda, dönüştürme bozuk veri değerlerini yeniden yönlendirdiğinde bazı satırlar kaybolabilir. Örneğin Arama dönüştürmelerinde, bozuk satırlar hiçbir başvuru verisiyle eşleşmiyorsa satırlar atılır.

Belirti 2

Bazı veri türlerinde sıfır değerleri geçerli değerler olmadığından, OLE DB sağlayıcısı veri türlerini dönüştürürken veri türü dönüştürme hataları oluşabilir. Bazen, veri türü taşması da meydana gelebilir. Örneğin, tarihsaat veri türündeki bir sütunda "0-0-0 0:0:0" değeri vardır. OLE DB sağlayıcısı sıfırları SQL Yerel İstemcisi OLE DB Sağlayıcısı için geçerli bir tarih değerine biçimlendiremediğinden, bu geçersiz değer bu tür bir hataya neden olur.

Belirti 3

Yinelenen birincil anahtar değerleri veri akışı hedefine eklendiği için kısıtlama ihlalleri oluşabilir. Örneğin, tamsayı veri türündeki bir sütuna birden çok sıfır değeri veya varchar veri türündeki bir sütuna birden çok NULL değeri eklenir. Benzer şekilde, hedef tabloya yinelenen anahtar değerleri eklendiğinde yabancı anahtar ilişkisi ihlal edilebilir.

Bu sorunla karşılaşıp karşılaşmadığınızı belirleme

Bu sorunla karşılaşıp karşılaşmadığınızı belirlemek için aşağıdaki göstergeler kullanılabilir:

  • Veri akışı altyapısının düşük bellek kaynağı bildirimi nedeniyle arabellekleri diske yazıp yazmadığını belirlemek için SQL Server:SSIS Pipelineperformance nesnesi için Arabellekler biriktirilmiş sayacını izleyebilirsiniz.

  • Ayrıca, veri akışı görevinin BufferTempStoragePath özelliğinde belirtilen geçici dizinde bulunan DTS.tmp dosyasını da inceleyebilirsiniz. DTS.tmp dosyasının boyutunun arttığını fark ederseniz, veri akışı altyapısı veri arabelleklerini diske yazıyordur.

  • Var olan SSIS paketinde bu sorunun olup olmadığını belirlemek isterseniz, kolay gözlem için verilerin bir kopyasını düz bir dosya hedefine yönlendirmek üzere SSIS paketindeki veri akışı görevine bir Çok noktaya yayın dönüşümü ekleyebilirsiniz.

  • Kullanılabilir belleğin son derece düşük olduğunun bir başka göstergesi de SSIS paket günlüğüne aşağıdaki iletinin kaydedilmesidir:

    Not

    DTS_I_CANTRELIEVEPRESSURE Arabellek yöneticisi, sistemde sanal belleğin azaldığını algıladı, ancak herhangi bir arabelleği değiştiremedi. 8 tampon düşünüldü ve 8'i kilitlendi. Yeterli yüklü olmadığı, diğer işlemler kullandığı veya çok fazla arabellek kilitli olduğu için işlem hattında yeterli bellek yoktur.

SSIS için bellek tüketimini izleme

En yüksek bellek kullanımını hesaplamak üzere çeşitli SQL Server Integration Services Çalışma Zamanı işlemleri için en yüksek kullanımı ölçmek üzere belleği izleyin

Performans İzleyicisi'deki Process nesnesinin Özel Bayt sayacını kullanarak DTExec.exe ve DTSHost.exe işlemleri gibi çeşitli SQL Server Integration Services Çalışma Zamanı işlemlerinin en yüksek bellek kullanımını izleyin.

SQL Server Integration Services paketleri çalışırken, Performans İzleyicisi'de Process nesnesinin Özel Bayt sayacı için en yüksek değeri bulun. Birden çok paketin paralel çalıştığı senaryoyu ele alalım. Bu senaryoda, en yüksek bellek kullanımını elde etmek için çalışan tüm işlemlerin en yüksek değerlerini ekleyin.

Tepe ve vadileri bulmak için dış işlemleri izleyin

Performans İzleyicisi'deki Process nesnesinin Özel Bayt sayacını kullanarak SQL Server hizmeti ve SSIS hizmeti dışındaki işlemlerin en yüksek bellek kullanımını izleyin. SQL Server Integration Services için yetersiz belleğe neden olabilecek en yüksek kullanım sürelerine bakın. Örneğin, birden çok kullanıcının sunucuya bağlanmak için Uzak Masaüstü Protokolü (RDP) kullandığı yoğun zamanları ve yedekleme yazılımının çalıştığı saatleri göz önünde bulundurun.

Tepe ve vadileri bulmak için SQL Server bellek kullanımını izleyin

En son ErrorLog dosyasında "Arabellek havuzu için kilitli sayfalar kullanılıyor." iletisi yoksa, Sqlservr.exe işleminin Özel Bayt sayacı, SQL Server hizmetleri tarafından ne kadar bellek kullanıldığını gösterebilir.

İleti en son Hata Günlüğü dosyasında mevcutsa, SQL Server arabellek havuzunun bellek kullanımını ölçmek için SQL Server: Bellek Yöneticisi performans nesnesinin Toplam Sunucu Belleği (KB) sayacını kullanın. Ayrıca, arabellek havuzu (MemToLeave) dışındaki bellek ayırmalarını bulmak için Sqlservr.exe işlemi için Özel Bayt sayacını kullanın. İki değerin toplamı, Toplam Sunucu Belleği (KB) değeri ve MemToLeave değeri, toplam SQL Server bellek tüketiminin iyi bir tahminidir.

Aşağıdakilerden biri doğruysa, Performans İzleyicisi ve Görev Yöneticisi bu arabellek havuzu sayfaları tarafından tüketilen belleği göstermez:

  • Sayfaları Bellekte Kilitle kullanıcı hakkı SQL ServerSQL Server service başlangıç hesabına atanırsa.
  • AWE belleği etkinleştirilmişse.

Not Sayfaları Bellekte Kilitle kullanıcı hakkı SQL Server hizmeti başlangıç hesabına atanmamışsa ve AWE etkinleştirilmemişse, Sqlservr.exe işlemi için Özel Bayt sayacı, çeşitli SQL Server örnekleri için SQL Services tarafından tüketilen belleği göstermelidir.

Windows'ta minimum kullanılabilir bellek değerini izleyin

Windows'ta kullanılabilir belleği izlemek için aşağıdaki yöntemlerden birini kullanın:

  • Performans İzleyicisi'deki Kullanılabilir MBytes sayacı.

  • Fiziksel Bellek (MB) – Görev Yöneticisi'nin Performans sekmesindeki Boş değer.

    Not: Bazı işletim sistemlerinde, Fiziksel Bellek (MB) – Boş, Fiziksel Bellek (K) – Kullanılabilir olarak etiketlenir.

Başvurular

MainPipeClass.BufferTempStoragePath özelliği hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.pipeline.wrapper.mainpipeclass.buffertempstoragepath.aspx
Bellek yapılandırma seçeneklerini kullanarak sunucu performansını iyileştirme hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:

http://msdn.microsoft.com/en-us/library/aa178118(SQL.80).aspx
Performans İzleyicisi Sayaçları hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:

http://technet.microsoft.com/en-us/library/cc768048.aspx
Çok noktaya yayın kapsamlarını kullanma hakkında daha fazla bilgi için, aşağıdaki Microsoft Web sitesini ziyaret edin:

http://technet.microsoft.com/en-us/library/cc758554(WS.10).aspx SQL Server için Artımlı Hizmet Modeli hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

935897 Bildirilen sorunlara yönelik düzeltmeler sağlamak için SQL Server ekibi tarafından bir Artımlı Bakım Modeli sağlanır

SQL Server güncelleştirmelerin adlandırma şeması hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

822499 Microsoft SQL Server yazılım güncelleştirme paketleri için yeni adlandırma şeması

Yazılım güncelleştirme terminolojisi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

824684 Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması