Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku najdete doporučení a optimalizace výkonu pro načítání dat.
Příprava dat ve službě Azure Storage
Pokud chcete minimalizovat latenci, umístěte vrstvu úložiště spolu s vyhrazeným fondem SQL do stejné lokaci.
Při exportu dat do formátu souboru ORC může dojít k chybám v jazyce Java kvůli nedostatku paměti, pokud jsou velké textové sloupce. Pokud chcete toto omezení obejít, exportujte jenom podmnožinu sloupců.
PolyBase nemůže načíst řádky, které obsahují více než 1 000 000 bajtů dat. Když vložíte data do textových souborů ve službě Azure Blob Storage nebo Azure Data Lake Store, musí mít méně než 1 000 000 bajtů dat. Toto omezení bajtů je pravdivé bez ohledu na schéma tabulky.
Všechny formáty souborů mají různé charakteristiky výkonu. Pro nejrychlejší načtení použijte komprimované textové soubory s oddělovači. Rozdíl mezi výkonem UTF-8 a UTF-16 je minimální.
Rozdělte velké komprimované soubory na menší komprimované soubory.
Provádění zátěže s dostatečným výpočetním výkonem
Pokud chcete dosáhnout nejrychlejší rychlosti načítání, spusťte najednou jenom jednu úlohu načítání. Pokud to není možné, spusťte současně minimální počet zatížení. Pokud očekáváte velkou úlohu načtení, zvažte zvýšit kapacitu fondu SQL před načtením.
Pokud chcete spouštět úlohy s příslušnými výpočetními prostředky, vytvořte uživatele pro načítání úloh určené ke spouštění úloh. Každému uživateli načítání přiřaďte konkrétní třídu prostředků nebo skupinu úloh. Pokud chcete spustit načítání, přihlaste se jako jeden z uživatelů načítání a potom načítání spusťte. Zatížení se spustí s třídou prostředků uživatele. Tato metoda je jednodušší než pokus o změnu třídy prostředků uživatele tak, aby vyhovovala aktuální třídě prostředků.
Vytvořte uživatele pro načítání
Tento příklad vytvoří uživatele načítání klasifikovaného do konkrétní skupiny úloh. Prvním krokem je připojení k hlavnímu serveru a vytvoření přihlášení.
-- Connect to master
CREATE LOGIN loader WITH PASSWORD = 'a123STRONGpassword!';
Připojte se k vyhrazenému fondu SQL a vytvořte uživatele. Následující kód předpokládá, že jste připojeni k databázi mySampleDataWarehouse. Ukazuje, jak vytvořit uživatele jménem loader a udělit mu oprávnění k vytváření tabulek a načítání pomocí příkazu COPY. Potom klasifikuje uživatele do skupiny úloh DataLoads s maximálním počtem prostředků.
-- Connect to the dedicated SQL pool
CREATE USER loader FOR LOGIN loader;
GRANT ADMINISTER DATABASE BULK OPERATIONS TO loader;
GRANT INSERT ON <yourtablename> TO loader;
GRANT SELECT ON <yourtablename> TO loader;
GRANT CREATE TABLE TO loader;
GRANT ALTER ON SCHEMA::dbo TO loader;
CREATE WORKLOAD GROUP DataLoads
WITH (
MIN_PERCENTAGE_RESOURCE = 0
,CAP_PERCENTAGE_RESOURCE = 100
,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 100
);
CREATE WORKLOAD CLASSIFIER [wgcELTLogin]
WITH (
WORKLOAD_GROUP = 'DataLoads'
,MEMBERNAME = 'loader'
);
Důležité
Toto je extrémní příklad přidělení 100% prostředků fondu SQL na jednu zátěž. Tím získáte maximální souběžnost 1. Mějte na paměti, že by se to mělo použít jenom pro počáteční zatížení, ve kterém budete muset vytvořit další skupiny úloh s vlastními konfiguracemi pro vyrovnávání prostředků napříč úlohami.
Pokud chcete spustit zatížení s prostředky pro pracovní skupinu načítání, přihlaste se jako uživatel 'loader' a spusťte zatížení.
Povolit načtení více uživatelů
Často je potřeba, aby několik uživatelů načítalo data do datového skladu. Načítání pomocí příkazu CREATE TABLE AS SELECT (Transact-SQL) vyžaduje oprávnění CONTROL databáze. Oprávnění CONTROL dává řízení přístup ke všem schématům. Možná nebudete chtít, aby všichni uživatelé s oprávněním pro načítání měli kontrolu přístupu ke všem schématům. Pokud chcete omezit oprávnění, použijte příkaz DENY CONTROL.
Představte si například schémata databáze, schema_A pro oddělení A a schema_B pro oddělení B. Umožnit uživatelům databáze user_A a user_B být uživateli při načítání PolyBase v oddělení A a B. Oba mají udělená oprávnění k databázi CONTROL. Tvůrci schématU A a B teď svá schémata uzamknou pomocí DENY:
DENY CONTROL ON SCHEMA :: schema_A TO user_B;
DENY CONTROL ON SCHEMA :: schema_B TO user_A;
User_A a user_B jsou teď uzamčené ze schématu druhého oddělení.
Načtení do pracovní tabulky
Pro dosažení nejrychlejšího načítání dat do tabulky datového skladu načtěte data do přechodné tabulky. Definujte pracovní tabulku jako haldu a jako možnost distribuce použijte kruhový distribuční algoritmus.
Uvědomte si, že načítání je obvykle dvoustupňový proces, ve kterém nejprve načtete do staging tabulky a pak vložíte data do tabulky produkčního datového skladu. Pokud produkční tabulka používá distribuci hash, může být celková doba načtení a vložení kratší, pokud definujete přechodovou tabulku s distribucí hash. Načtení do pracovní tabulky trvá déle, ale druhým krokem vložení řádků do produkční tabulky nedochází k přesunu dat mezi distribucemi.
Načtení do indexu columnstore
Indexy columnstore vyžadují k kompresi dat do vysoce kvalitních skupin řádků velké množství paměti. Kvůli dosažení nejlepší efektivity komprese a indexu musí index columnstore do každé skupiny řádků komprimovat maximálně 1 048 576 řádků. Pokud je zatížení paměti, index columnstore nemusí být schopen dosáhnout maximální míry komprese. Má to vliv na výkonnost dotazů. Podrobné informace najdete v tématu Optimalizace paměti columnstore.
- Abyste zajistili, že uživatel načítání má dostatek paměti k dosažení maximální míry komprese, použijte uživatele načítání, kteří jsou členem střední nebo velké skupiny prostředků.
- Načtěte dostatek řádků pro úplné vyplnění nových skupin řádků. Během hromadného načítání se každých 1 048 576 řádků zkomprimuje přímo do sloupcového úložiště jako kompletní skupina řádků. Načtení s méně než 102 400 řádky odesílají řádky do deltového úložiště, kde jsou řádky uloženy v indexu ve formě b-stromu. Pokud načtete příliš málo řádků, mohou všechny směřovat do deltastore a nebudou se okamžitě komprimovat do formátu columnstore.
Zvětšit velikost dávky při použití SQLBulkCopy API nebo BCP
Načtení pomocí příkazu COPY zajistí nejvyšší propustnost vyhrazených fondů SQL. Pokud nemůžete použít funkci COPY k načtení a musíte použít rozhraní API SqLBulkCopy nebo bcp, měli byste zvážit zvýšení velikosti dávky pro lepší propustnost.
Návod
Doporučená výchozí velikost dávky pro určení optimální kapacity je mezi 100 tisíci a 1 milionem řádků.
Správa selhání načítání
Načtení pomocí externí tabulky může selhat s chybou Dotaz byl přerušen – při čtení z externího zdroje byla dosažena maximální prahová hodnota zamítnutí. Tato zpráva označuje, že vaše externí data obsahují špinavé záznamy. Datový záznam se považuje za nečistý, pokud datové typy a počet sloupců neodpovídají definicím sloupců externí tabulky nebo pokud data neodpovídají zadanému formátu externího souboru.
Pokud chcete opravit nezašpiněné záznamy, ujistěte se, že jsou definice formátu externí tabulky a externích souborů správné a že externí data odpovídají těmto definicím. V případě, že je podmnožina záznamů externích dat chybná, můžete tyto záznamy vyloučit z dotazů pomocí možností zamítnutí v příkazu CREATE EXTERNAL TABLE.
Vložení dat do produkční tabulky
Jednorázové načtení do malé tabulky s příkazem INSERT nebo dokonce pravidelné opětovné načtení vyhledávání může fungovat dostatečně dobře s příkazem, jako je INSERT INTO MyLookup VALUES (1, 'Type 1'). Vložení jednotlivých položek ale není tak efektivní jako hromadné načítání.
Pokud máte v průběhu dne tisíce nebo více jednotlivých vložení, dávkově je seskupte, abyste je mohli hromadně nahrát. Vyvíjejte procesy, které připojují jednotlivé vložení do souboru, a pak vytvořte další proces, který soubor pravidelně načítá.
Vytvořte statistiky po načtení
Pokud chcete zvýšit výkon dotazů, je důležité vytvořit statistiky pro všechny sloupce všech tabulek po prvním načtení nebo dochází k významným změnám v datech. Vytváření statistik je možné provést ručně nebo můžete povolit automatické vytváření statistik.
Podrobné vysvětlení statistik najdete v tématu Statistika. Následující příklad ukazuje, jak ručně vytvořit statistiky o pěti sloupcích tabulky Customer_Speed.
create statistics [SensorKey] on [Customer_Speed] ([SensorKey]);
create statistics [CustomerKey] on [Customer_Speed] ([CustomerKey]);
create statistics [GeographyKey] on [Customer_Speed] ([GeographyKey]);
create statistics [Speed] on [Customer_Speed] ([Speed]);
create statistics [YearMeasured] on [Customer_Speed] ([YearMeasured]);
Otočení klíčů úložiště
Osvědčeným postupem zabezpečení je pravidelně měnit přístupový klíč k úložišti blob. Pro váš účet BLOB Storage máte dva klíče úložiště, které vám umožňují rotovat tyto klíče.
Pro rotaci klíčů účtu Azure Storage:
Pro každý účet úložiště, jehož klíč se změnil, použijte ALTER DATABASE SCOPED CREDENTIAL.
Příklad:
Vytvoří se původní klíč.
CREATE DATABASE SCOPED CREDENTIAL my_credential WITH IDENTITY = 'my_identity', SECRET = 'key1'
Otočení klíče od klíče 1 na klíč 2
ALTER DATABASE SCOPED CREDENTIAL my_credential WITH IDENTITY = 'my_identity', SECRET = 'key2'
Nejsou potřeba žádné další změny podkladových externích zdrojů dat.
Související obsah
- Další informace o PolyBase a návrhu procesu extrakce, načítání a transformace (ELT) najdete v tématu Návrh ELT pro Azure Synapse Analytics.
- Pro návod k načítání použijte PolyBase k importu dat z úložiště objektů BLOB v Azure do Azure Synapse Analytics.
- Chcete-li sledovat načítání dat, viz Sledování vaší pracovní zátěže pomocí DMVs.