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.
Platí pro: SQL Server 2016 (13.x) a novější verze ve Windows
SQL Serveru 2017 (14.x) a novějších verzích v Linuxu
Azure Synapse Analytics
V PolyBase pro SQL Server neexistuje žádný pevný limit počtu souborů nebo množství dat, které je možné dotazovat. Výkon dotazů závisí na množství dat, formátu dat, způsobu uspořádání dat a složitosti dotazů a spojení.
Tento článek se zabývá důležitými tématy a pokyny k výkonu.
Statistika
Shromažďování statistik o externích datech je jednou z nejdůležitějších věcí, které můžete udělat pro optimalizaci dotazů. Čím více instance ví o vašich datech, tím rychleji dokáže provádět dotazy. Optimalizátor dotazů stroje SQL je optimalizátor založený na nákladech. Porovná náklady na různé plány dotazů a pak zvolí plán s nejnižšími náklady. Ve většině případů zvolí plán, který se spustí nejrychleji.
Automatické vytváření statistik
Počínaje SQL Serverem 2022 databázový stroj analyzuje příchozí dotazy uživatelů na chybějící statistiky. Pokud statistiky chybí, optimalizátor dotazů automaticky vytvoří statistiky o jednotlivých sloupcích v predikátu dotazu nebo podmínce spojení, aby se zlepšily odhady kardinality pro plán dotazu. Automatické vytváření statistik se provádí synchronně, takže pokud ve sloupcích chybí statistika, můžete sledovat mírně snížený výkon dotazů. Doba vytvoření statistiky pro jeden sloupec závisí na velikosti cílových souborů.
Vytvoření ruční statistiky OPENROWSET
Statistiky s jedním sloupcem pro cestu OPENROWSET je možné vytvořit pomocí sys.sp_create_openrowset_statistics uložené procedury předáním výběrového dotazu s jedním sloupcem jako parametr:
EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows';
Ve výchozím nastavení instance používá k vytvoření statistiky 100 % dat poskytnutých v datové sadě. Pomocí možností TABLESAMPLE můžete volitelně zadat velikost vzorku jako procento. Pokud chcete vytvořit statistiku s jedním sloupcem pro více sloupců, proveďte sys.sp_create_openrowset_statistics pro každý ze sloupců. Pro cestu OPENROWSET nelze vytvořit statistiky s více sloupci.
Pokud chcete aktualizovat existující statistiky, nejprve sys.sp_drop_openrowset_statistics je pomocí uložené procedury odstraňte a pak je znovu vytvořte pomocí příkazu sys.sp_create_openrowset_statistics:
EXEC sys.sp_drop_openrowset_statistics
N'SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows
';
Vytvoření ručních statistik externí tabulky
Syntaxe pro vytváření statistik u externích tabulek se podobá syntaxi používané pro běžné uživatelské tabulky. Pokud chcete vytvořit statistiku pro sloupec, zadejte název objektu statistiky a název sloupce:
CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;
Možnosti WITH jsou povinné a pro velikost vzorku jsou povolené možnosti FULLSCAN a SAMPLE n PERCENT.
- Pokud chcete vytvořit statistiku s jedním sloupcem pro více sloupců, proveďte
CREATE STATISTICSpro každý ze sloupců. - Statistiky s více sloupci nejsou podporovány.
Dotazování na dělená data
Platí pro Spravovaná instance Azure SQL a Azure Synapse Analytics
Pokud jsou data uspořádaná do složek nebo souborů (označovaných také jako oddíly), použijte odstranění oddílů k dotazování pouze na konkrétní složky a soubory. Odstranění oddílů snižuje počet souborů a množství dat, která dotaz potřebuje ke čtení a zpracování, což vede k lepšímu výkonu.
Pokud chcete odstranit oddíly z provádění dotazu, použijte funkci filepath() metadat v WHERE klauzuli dotazu.
Nejprve vytvořte externí zdroj dat:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net'
);
GO
Následující ukázkový dotaz čte datové soubory NYC Yellow Taxi pouze za poslední tři měsíce roku 2017:
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
)
WITH (
vendorID INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY filepath;
Pokud uložená data nejsou rozdělená na oddíly, zvažte jejich rozdělení, aby se zlepšil výkon dotazů.
Pokud používáte externí tabulky, jsou podporovány funkce filepath() a filename(), ale ne v klauzuli WHERE. Můžete je i nadále filtrovat filename podle nebo filepath pokud je použijete ve počítaných sloupcích. Následující příklad ukazuje toto:
CREATE EXTERNAL TABLE tbl_TaxiRides (
vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
tpepPickupDateTime DATETIME2,
tpepDropoffDateTime DATETIME2,
passengerCount INT,
tripDistance FLOAT,
puLocationId VARCHAR(8000),
doLocationId VARCHAR(8000),
startLon FLOAT,
startLat FLOAT,
endLon FLOAT,
endLat FLOAT,
rateCodeId SMALLINT,
storeAndFwdFlag VARCHAR(8000),
paymentType VARCHAR(8000),
fareAmount FLOAT,
extra FLOAT,
mtaTax FLOAT,
improvementSurcharge VARCHAR(8000),
tipAmount FLOAT,
tollsAmount FLOAT,
totalAmount FLOAT,
[Year] AS CAST(filepath(1) AS INT), --use filepath() for partitioning
[Month] AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = NYCTaxiExternalDataSource,
FILE_FORMAT = DemoFileFormat
);
GO
SELECT *
FROM tbl_TaxiRides
WHERE
[year]=2017
AND [month] in (10,11,12);
Pokud uložená data nejsou rozdělená na oddíly, zvažte jejich rozdělení, aby se zlepšil výkon dotazů.
Předání výpočtů Hadoopu
Platí pro POUZE SQL Server 2016 (13.x), SQL Server 2017 (14.x) a SQL Server 2019 (15.x)
PolyBase odešle některé výpočty do externího zdroje za účelem optimalizace celkového dotazu. Optimalizátor dotazů provede rozhodnutí založené na nákladech na nabízení výpočtů do Hadoopu, pokud to zlepší výkon dotazů. Optimalizátor dotazů používá k rozhodování na základě nákladů statistiky externích tabulek. Nasdílení výpočtů vytvoří úlohy MapReduce a využívá distribuované výpočetní prostředky Hadoopu. Další informace naleznete v tématu Pushdown computations v PolyBase.
Škálování výpočetních prostředků
Platí pro POUZE SQL Server 2016 (13.x), SQL Server 2017 (14.x) a SQL Server 2019 (15.x)
Ke zlepšení výkonu dotazů můžete použít škálovací skupiny SQL Serveru PolyBase. To umožňuje paralelní přenos dat mezi instancemi SQL Serveru a uzly Hadoop a přidává výpočetní prostředky pro provoz na externích datech.
Důležité
Škálovatelné skupiny systému Microsoft SQL Server PolyBase byly zrušeny. Funkce škálování na více systémů byla v produktu odstraněna počínaje SQL Serverem 2022 (16.x) a novějšími verzemi. Virtualizace dat PolyBase bude nadále plně podporována jako funkce vertikálního navýšení kapacity na SQL Serveru. Další informace najdete v tématu možnosti velkých objemů dat na platformě Microsoft SQL Server.
Související obsah
- Nejčastější dotazy k PolyBase
- virtualizace dat pomocí PolyBase v SQL Serveru