OPRAVA: Po spuštění balíčku SSIS, který obsahuje úlohu toku dat, v případě nedostatku paměti v systému SQL Server 2005 nebo SQL Server 2008 se zobrazí chybové zprávy nebo dojde k poškození dat

Microsoft distribuuje opravy systému Microsoft SQL Server 2008 jako jeden soubor ke stažení. Vzhledem k tomu, že opravy jsou kumulativní, obsahuje každá nová verze všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008.

Příznaky

Vezměte v úvahu následující scénář:

  • Balíček služby Služby Integrace SQL Serveru (SSIS) spouštíte v systému SQL Server 2005 nebo v systému SQL Server 2008.

  • Balíček SSIS obsahuje úlohu toku dat.

  • Balíček SSIS spustíte v počítači s nedostatkem dostupné paměti. K nedostatku paměti může docházet dočasně nebo přerušovaně.

  • Při spuštění balíčku SSIS se kvůli nedostatku paměti zapisují datové vyrovnávací paměti na disk.

V tomto scénáři můžete zaznamenat jeden nebo více z následujících příznaků:

Příznak 1

Data jsou poškozena dříve, než data dosáhnou cíle toku dat. Zjistíte, že data v cíli toku dat neočekávaně nabývají následujících hodnot.

  • "" : NULL, prázdné nebo prázdné řetězcové hodnoty
  • 0: Nulová hodnota nebo nulová hodnota, která má vyšší přesnost a měřítko.
  • 0-0-0 0:0:0 : přerušovaná nulová hodnota data

Poznámka: Pokud se u vás tento příznak objeví, nezobrazí se vám žádná chybová zpráva.

Příznak 2

Zobrazí se jedna z následujících chybových zpráv o převodu datového typu:

Chybová zpráva 1

Poznámka

DTS_E_OLEDBERROR. Došlo k chybě OLE DB. Kód chyby: 0x80004005.

Záznam OLE DB je k dispozici. Zdroj: "Microsoft SQL Native Client" Hresult: 0x80004005 Popis: "Neplatná hodnota znaku pro specifikaci přetypování".

Chybová zpráva 2

Poznámka

DTS_E_COLUMNSTATUSERROR. U vstupu "OLE DB Destination Input" (IDNumber) došlo k chybě se vstupním sloupcem "ColumnName" (IDnumber). Vrácený stav sloupce byl: Převod se nezdařil, protože datová hodnota přetekla zadaným typem.

Příznak 3

Zobrazí se následující chybová zpráva o porušení omezení:

Poznámka

DTS_E_OLEDBERROR. Došlo k chybě OLE DB. Kód chyby: 0x80004005.

Záznam OLE DB je k dispozici. Zdroj: "Microsoft SQL Native Client" Hresult: 0x80004005 Popis: "Příkaz byl ukončen.".

Záznam OLE DB je k dispozici. Zdroj: "Microsoft SQL Native Client" Hresult: 0x80004005 Popis: Porušení omezení PRIMARY KEY 'PrimaryKeyName'. Do objektu TableName nelze vložit duplicitní klíč.".

Pokud navíc spustíte stejný balíček SSIS znovu, když je k dispozici paměť, k tomuto problému nedochází.

Příčina

Když se do modulu toku dat odešle oznámení o nedostatku paměti, modul toku dat dočasně zapíše vyrovnávací paměti dat na disk. K tomuto problému dochází, protože když modul toku dat zapisuje vyrovnávací paměti dat na disk, jsou hodnoty dat nastavené na hodnotu NULL nebo nesprávně na nulu. Proto když modul toku dat čte data z vyrovnávacích pamětí dat a pak zapisuje data do cíle toku dat, bude cíl toku dat obsahovat poškozené datové hodnoty. Poškozené datové hodnoty mohou také způsobit chyby převodu datového typu nebo chyby porušení omezení.

Řešení

Informace o kumulativní aktualizaci

Vydaná verze produktu SQL Server 2008

Oprava tohoto problému byla poprvé vydána v kumulativní aktualizaci 6. Další informace o získání tohoto balíčku kumulativních aktualizací pro SQL Server 2008 naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

971490 Balíček kumulativní aktualizace 6 pro SQL Server 2008Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová verze opravy obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího vydání opravy pro SQL Server 2008. Doporučujeme zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

956909 Buildy SQL Server 2008, které byly vydány po vydání SQL Server 2008

SQL Server 2008 Service Pack 1 (SP1)

Důležité: Tuto opravu musíte nainstalovat, pokud používáte SQL Server 2008 Service Pack 1 (SP1).

 Oprava tohoto problému byla také vydána v kumulativní aktualizaci 3 pro SQL Server 2008 Service Pack 1. Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

971491 Balíček kumulativní aktualizace 3 pro SQL Server 2008 Service Pack 1Poznámka: Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008. Společnost Microsoft doporučuje zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

970365 Buildy SQL Server 2008 vydané po vydání aktualizace Service Pack 1 SQL Server 2008
 Opravy hotfix pro Microsoft SQL Server 2008 se vytvářejí pro konkrétní aktualizace Service Pack pro SQL Server. Opravu hotfix pro SQL Server 2008 Service Pack 1 je nutné nainstalovat k instalaci systému SQL Server 2008 Service Pack 1. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.

SQL Server 2005 Service Pack 2 (SP2)

Důležité: Tuto opravu musíte nainstalovat, pokud používáte SQL Server 2005 Service Pack 2.

Oprava tohoto problému byla poprvé vydána v kumulativní aktualizaci 15 pro SQL Server 2005 Service Pack 2. Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

972510 Balíček kumulativní aktualizace 15 pro SQL Server 2005 Service Pack 2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího vydání opravy pro SQL Server 2005. Společnost Microsoft doporučuje zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

937137 Buildy SQL Server 2005 vydané po vydání aktualizace Service Pack 2 SQL Server 2005
Opravy hotfix pro Microsoft SQL Server 2005 se vytvářejí pro konkrétní aktualizace Service Pack pro SQL Server. Opravu hotfix pro SQL Server 2005 Service Pack 2 je nutné nainstalovat pro instalaci systému SQL Server 2005 Service Pack 2. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.

SQL Server 2005 Service Pack 3 (SP3)

Důležité: Tuto opravu musíte použít, pokud používáte SQL Server 2005 Service Pack 3.

Oprava tohoto problému byla také vydána v rámci kumulativní aktualizace 5 pro SQL Server 2005 Service Pack 3. Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

972511 Balíček kumulativní aktualizace 5 pro SQL Server 2005 Service Pack 3Poznámka Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2005. Společnost Microsoft doporučuje zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

960598 Buildy SQL Server 2005, které byly vydány po vydání aktualizace Service Pack 3 SQL Server 2005
Opravy hotfix pro Microsoft SQL Server 2005 se vytvářejí pro konkrétní aktualizace Service Pack pro SQL Server. Opravu hotfix pro SQL Server 2005 Service Pack 3 je nutné použít u instalace systému SQL Server 2005 Service Pack 3. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.

Alternativní řešení

Tento problém můžete vyřešit vyřešením problému s nedostatkem paměti. Minimální velikost paměti, která může tento problém spustit, se v jednotlivých počítačích liší. Obecně se tato velikost pohybuje mezi 32 megabajty (MB) a 64 MB dostupné paměti. Proto doporučujeme nakonfigurovat server tak, aby SSIS přidělil více než 64 MB dostupné paměti.

Výchozí dostupné množství dostupné paměti, které signalizuje událost oznámení o nedostatku paměti, je přibližně 32 MB na 4 gigabajty (GB) až maximálně 64 MB na 4 GB. Další informace naleznete na následujícím webu MSDN (web MSDN (Microsoft Developer Network)):

https://msdn.microsoft.com/library/aa366541(vs.85).aspx
        
Je však obtížné tomuto problému zcela zabránit, protože dostupná paměť může na vytížených produkčních serverech značně kolísat. Kromě toho se při běžných činnostech může z různých důvodů snížit paměť. Abyste snížili frekvenci tohoto problému, použijte jednu z následujících metod:

Metoda 1

Přidejte do počítače další fyzickou paměť.

Metoda 2

Spusťte balíček SSIS na jiném počítači, než je počítač, na kterém běží instance SQL Server.

Metoda 3

Pokud spustíte balíček SSIS ve stejném počítači, na kterém běží instance SQL Server, nastavte možnost konfigurace maximální paměti serveru pro instanci na menší hodnotu, aby se zvýšila dostupná paměť v počítači.

Metoda 4

Při spouštění balíčků SSIS, které obsahují úlohy Tok dat, ukončete stresující aplikace, které spotřebovávají hodně paměti.

Metoda 5

Spouštějte balíčky SSIS a úlohy toku dat sériově místo paralelně, abyste snížili kumulativní spotřebu využití paměti.

Metoda 6

Použijte metodu popsanou v dílčí části "Sledování spotřeby paměti pro SSIS" v části "Další informace" k řešení potíží s nedostatkem paměti a optimalizaci využití paměti pro SSIS.

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Další informace

Další podrobnosti o příznacích

Příznak 1

Pokud v cíli toku dat najdete poškozené datové hodnoty, můžou se poškozené datové hodnoty zobrazit jako různé reprezentace v závislosti na datovém typu. Následující datové typy se například zobrazují jako různě odlišné znázornění poškozených datových hodnot:

DT_STR = "" NULL, prázdné nebo prázdné řetězcové hodnoty
DT_I4 = 0 Nulová hodnota datového typu Celé číslo
DT_UI1 = 0 Nulová hodnota datového typu Celé číslo bez znaménka
DT_NUMERIC = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Nulová hodnota, která má vyšší přesnost a měřítko.
DT_DBTIMESTAMP = 0-0-0 0:0:0 Přerušovaná nulová hodnota data

Ve většině scénářů mají poškozené hodnoty dat všechny sloupce a všechny řádky, případně má poškozená data významná část sloupců a řádků. Navíc celkový počet řádků, které dosáhnou cíle, obvykle odpovídá počtu očekávaných řádků v cíli, a to i v případě poškození dat. Příčinou je problém s vyrovnávací pamětí. Může to mít vliv na celou vyrovnávací paměť nebo sadu vyrovnávacích pamětí ve spuštěné úloze toku dat. V závislosti na velikosti vyrovnávací paměti a velikosti dat na řádek může každá vyrovnávací paměť obsahovat stovky řádků.

V některých pokročilých návrzích nejsou ovlivněny všechny sloupce v úloze toku dat. Pokud se s daty v úloze toku dat manipuluje pomocí transformací, jako jsou výrazy, transformace odvozeného sloupce a transformace vyhledávání, můžou některé sloupce dat zůstat stejné jako očekávané hodnoty. Důvodem je, že SSIS nahrazuje poškozená data během úlohy toku dat těmito transformovanými hodnotami.

V jiných pokročilých návrzích může dojít ke ztrátě některých řádků. Vzhledem k flexibilní povaze směru dat v návrzích toku dat SSIS můžou být poškozená data směrována do neočekávaného cíle, pokud návrh vnímá neočekávané hodnoty dat v podmíněném sloupci. Při použití transformací, jako jsou podmíněné split transformace nebo transformace vyhledávání, může dojít ke ztrátě některých řádků, pokud transformace přesměruje poškozené datové hodnoty. Pokud například při transformacích vyhledávání poškozené řádky neodpovídají žádným referenčním datům, budou řádky zahozeny.

Příznak 2

Vzhledem k tomu, že nulové hodnoty nejsou v některých datových typech platnými hodnotami, můžou při převodu datových typů zprostředkovatelem OLE DB dojít k chybám převodu datových typů. Někdy může také dojít k přetečení datového typu. Například sloupec datového typu datetime má hodnotu "0-0-0 0:0:0". Tato neplatná hodnota způsobí tento typ chyby, protože zprostředkovatel OLE DB nemůže naformátovat nuly na platnou hodnotu kalendářního data pro zprostředkovatele SQL Native Client.

Příznak 3

K porušení omezení může dojít, protože do cíle toku dat jsou vloženy duplicitní hodnoty primárního klíče. Do sloupce datového typu Celé číslo se například vloží několik nulových hodnot nebo do sloupce datového typu varchar se vloží několik hodnot NULL. Podobně může dojít k narušení relace cizího klíče vložením duplicitních hodnot klíčů do cílové tabulky.

Jak zjistit, zda dochází k tomuto problému

K určení, zda dochází k těmto potížím, lze použít následující indikátory:

  • Můžete monitorovat čítač zařazování vyrovnávacích pamětí pro objekt SQL Server:SSIS Pipelineperformance a určit, zda modul toku dat zapisuje datové vyrovnávací paměti na disk kvůli oznámení o nedostatku paměti.

  • Můžete také zkontrolovat soubor DTS.tmp umístěný v dočasném adresáři, který je určen ve vlastnosti BufferTempStoragePath úlohy toku dat. Pokud si všimnete, že velikost souboru DTS.tmp se zvětšuje, modul toku dat zapisuje datové vyrovnávací paměti na disk.

  • Pokud chcete zjistit, jestli má existující balíček SSIS tento problém, můžete do úlohy toku dat v balíčku SSIS přidat transformaci vícesměrového vysílání, která nasměruje kopii dat do cíle plochého souboru pro snadnější pozorování.

  • Dalším indikátorem velmi nízké dostupné paměti je následující zpráva zaznamenaná v protokolu balíčků SSIS:

    Poznámka

    DTS_I_CANTRELIEVEPRESSURE Správce vyrovnávací paměti zjistil, že systém má nedostatek virtuální paměti, ale nebyl schopen zrušit žádné vyrovnávací paměti. Bylo uvažováno o 8 nárazníkových zónách a 8 bylo uzamčeno. Buď není pro kanál k dispozici dostatek paměti, protože není nainstalováno dostatek, používají ho jiné procesy nebo je uzamčeno příliš mnoho vyrovnávacích pamětí.

Jak monitorovat spotřebu paměti pro SSIS

Monitorováním paměti můžete změřit využití ve špičce u různých procesů modulu runtime služby Služby Integrace SQL Serveru a vypočítat maximální využití paměti

Monitorujte maximální využití paměti různými procesy modulu runtime Služby Integrace SQL Serveru, jako jsou procesy DTExec.exe a DTSHost.exe, pomocí čítače Private Bytes objektu Process v Sledování výkonu.

Když jsou spuštěné balíčky služby Služby Integrace SQL Serveru, vyhledejte maximální hodnotu čítače soukromých bajtů objektu Proces v nástroji Sledování výkonu. Představte si scénář, kdy se paralelně spouští více balíčků. V tomto scénáři přidejte maximální hodnoty všech spuštěných procesů, abyste dosáhli maximálního využití paměti.

Monitorování externích procesů pro nalezení vrcholů a minim

Monitorujte maximální využití paměti jinými procesy, než je služba SQL Server a služba SSIS, pomocí čítače Private Bytes objektu Process v nástroji Sledování výkonu. Hledejte časy špičkového využití, které můžou způsobovat nedostatek paměti pro službu Služby Integrace SQL Serveru. Vezměte například špičku, kdy více uživatelů používá pro připojení k serveru protokol RDP (Vzdálená plocha Protocol) a doby, kdy je spuštěn zálohovací software.

Monitorujte využití paměti systému SQL Server a vyhledejte vrcholy a minima

Pokud se v nedávném souboru Errorlog nenachází zpráva "Using locked pages for buffer pool." (Použití uzamčených stránek pro fond vyrovnávacích souborů), může čítač Private Bytes pro proces Sqlservr.exe uvádět, kolik paměti služby SQL Server spotřebovávají.

Pokud se zpráva nachází v nedávném souboru Errorlog, použijte čítač celkové paměti serveru (kB) objektu výkonu služby SQL Server: Memory Manager k měření využití paměti fondu vyrovnávacích pamětí systému SQL Server. Kromě toho použijte čítač Private Bytes pro proces Sqlservr.exe k vyhledání přidělení paměti mimo fond vyrovnávacích pamětí (MemToLeave). Součet těchto dvou hodnot, celková velikost paměti serveru (kB) a hodnota MemToLeave, je dobrým odhadem celkové spotřeby paměti SQL Server.

Sledování výkonu a Správce úloh nezobrazují paměť spotřebovanou těmito stránkami fondu vyrovnávací paměti, pokud platí jedna z následujících skutečností:

  • Pokud je ke spouštěcímu účtu služby SQL Server přiřazeno uživatelské právo Zamknout stránky v paměti.
  • Pokud je povolena paměť AWE.

Poznámka: Pokud není ke spouštěcímu účtu služby SQL Server přiřazeno uživatelské právo Uzamknout stránky v paměti a AWE není povoleno, čítač Private Bytes pro proces Sqlservr.exe by měl indikovat paměť spotřebovanou službami SQL Services pro různé instance SQL Server.

Monitorování minimální hodnoty dostupné paměti ve Windows

Pokud chcete monitorovat dostupnou paměť ve Windows, použijte jednu z následujících metod:

  • Dostupný čítač MBytes v nástroji Sledování výkonu.

  • Fyzická paměť (MB) – volná hodnota na kartě Výkon ve Správci úloh.

    Poznámka: V některých operačních systémech je fyzická paměť (MB) – volná označena jako fyzická paměť (K) – k dispozici.

Reference

Další informace o vlastnosti MainPipeClass.BufferTempStoragePath naleznete na následujícím webu MSDN (web MSDN (Microsoft Developer Network)):

https://msdn.microsoft.com/library/microsoft.sqlserver.dts.pipeline.wrapper.mainpipeclass.buffertempstoragepath.aspx
Další informace o optimalizaci výkonu serveru pomocí možností konfigurace paměti naleznete na následujícím webu MSDN (web MSDN (Microsoft Developer Network)):

https://msdn.microsoft.com/library/aa178118(sql.80).aspx
Další informace o čítačích funkce Sledování výkonu naleznete na následujícím webu společnosti Microsoft:

https://technet.microsoft.com/library/cc768048.aspx
Další informace o použití oborů vícesměrového vysílání naleznete na následujícím webu společnosti Microsoft:

https://technet.microsoft.com/library/cc758554(ws.10).aspxDalší informace o modelu přírůstkové údržby pro SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

935897 Tým SQL Server poskytuje k poskytování oprav hotfix pro hlášené problémy model přírůstkové údržby

Další informace o schématu pojmenování aktualizací pro aktualizace serveru SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

822499 Nové schéma pojmenovávání balíčků aktualizací softwaru Microsoft SQL Server

Další informace o terminologii aktualizací softwaru naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

824684 Popis standardní terminologie používané k popisu aktualizací softwaru společnosti Microsoft