Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Windows için SQL Server 2016 (13.x) ve sonraki sürümler
Linux için SQL Server 2017 (14.x) ve sonraki sürümler
Azure Synapse Analytics
SQL Server için PolyBase'de, dosya sayısı veya sorgulanabilecek veri miktarıyla ilgili sabit bir sınır yoktur. Sorgu performansı, veri miktarına, veri biçimine, verilerin düzenlenip düzenlenm biçimine ve sorguların ve birleştirmelerin karmaşıklığına bağlıdır.
Bu makale önemli performans konularını ve yönergelerini kapsar.
İstatistikler
Dış verilerinizle ilgili istatistikleri toplamak, sorgu iyileştirme için yapabileceğiniz en önemli şeylerden biridir. Örneğiniz verileriniz hakkında ne kadar çok bilgi edinebilirse sorguları o kadar hızlı yürütebilir. SQL altyapısı sorgu iyileştiricisi, maliyet tabanlı bir iyileştiricidir. Çeşitli sorgu planlarının maliyetini karşılaştırır ve ardından planı en düşük maliyetle seçer. Çoğu durumda, en hızlı yürüten planı seçer.
İstatistiklerin otomatik olarak oluşturulması
SQL Server 2022'den başlayarak, Veritabanı Altyapısı eksik istatistikler için gelen kullanıcı sorgularını analiz eder. İstatistikler eksikse sorgu iyileştiricisi, sorgu planı için kardinalite tahminlerini geliştirmek için sorgu koşulundaki veya birleştirme koşulundaki tek tek sütunlara ilişkin istatistikleri otomatik olarak oluşturur. İstatistiklerin otomatik olarak oluşturulması zaman uyumlu olarak yapılır, bu nedenle sütunlarınızda istatistik eksikse sorgu performansının biraz düşük olduğunu gözlemleyebilirsiniz. Tek bir sütun için istatistik oluşturma süresi, hedeflenen dosyaların boyutuna bağlıdır.
OPENROWSET el ile istatistikleri oluşturma
OPENROWSET yolu için tek sütunlu istatistikler, saklı yordam kullanılarak sys.sp_create_openrowset_statistics tek sütunlu seçme sorgusu parametre olarak geçirilerek oluşturulabilir:
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';
Varsayılan olarak, örnek istatistik oluşturmak için veri kümesinde sağlanan verilerin %100'unu kullanır. İsteğe bağlı olarak TABLESAMPLE seçeneklerini kullanarak örnek boyutunu yüzde olarak belirtebilirsiniz. Birden çok sütun için tek sütunlu istatistikler oluşturmak için, sütunların her biri için yürütür sys.sp_create_openrowset_statistics . OPENROWSET yolu için çok sütunlu istatistikler oluşturamazsınız.
Mevcut istatistikleri güncelleştirmek için önce saklı yordamı kullanarak sys.sp_drop_openrowset_statistics bunları bırakın ve ardından kullanarak sys.sp_create_openrowset_statisticsyeniden oluşturun:
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
';
El ile dış tablo istatistikleri oluşturma
Dış tablolarda istatistik oluşturmaya yönelik söz dizimi, sıradan kullanıcı tablolarında kullanılana benzer. Bir sütunda istatistik oluşturmak için istatistik nesnesi için bir ad ve sütunun adını belirtin:
CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;
WITH seçenekler zorunludur ve örnek boyutu için izin verilen seçenekler FULLSCAN ve SAMPLE n PERCENT'dir.
- Birden çok sütun için tek sütunlu istatistikler oluşturmak için, sütunların her biri için yürütür
CREATE STATISTICS. - Çok sütunlu istatistikler desteklenmez.
Bölümlenmiş verileri sorgulama
Şunun için geçerlidir: Azure SQL Yönetilen Örnek ve Azure Synapse Analytics.
Veriler klasörler veya dosyalar (bölümler olarak da adlandırılır) halinde düzenlendiğinde, yalnızca belirli klasörleri ve dosyaları sorgulamak için bölüm eleme özelliğini kullanın. Bölüm eleme, dosya sayısını ve sorgunun okuması ve işlemesi gereken veri miktarını azaltarak daha iyi performans sağlar.
Bölümleri sorgu yürütmeden kaldırmak için sorgunun yan tümcesindeki filepath() meta veri işlevini WHERE kullanın.
İlk olarak bir dış veri kaynağı oluşturun:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net'
);
GO
Aşağıdaki örnek sorgu, NYC Yellow Taxi veri dosyalarını yalnızca 2017'nin son üç ayı için okur:
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;
Depolanan verileriniz bölümlenmemişse, sorgu performansını geliştirmek için bu verileri bölümlendirebilirsiniz.
Eğer dış tablolar kullanıyorsanız, filepath() ve filename() işlevleri desteklenir ancak WHERE cümlesinde desteklenmez. Yine de veya bunları hesaplanan sütunlarda kullanıyorsanız filtreleyebilirsiniz filenamefilepath . Aşağıdaki örnek bunu gösterir:
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);
Depolanan verileriniz bölümlenmemişse, sorgu performansını geliştirmek için bu verileri bölümlendirebilirsiniz.
Hadoop'a hesaplama gönderme
Şunun için geçerlidir: Yalnızca SQL Server 2016 (13.x), SQL Server 2017 (14.x) ve SQL Server 2019 (15.x)
PolyBase, genel sorguyu iyileştirmek için bazı hesaplamaları dış kaynağa iletir. Sorgu iyileştiricisi, sorgu performansını geliştirecekse hesaplamayı Hadoop'a göndermek için maliyet tabanlı bir karar verir. Sorgu iyileştiricisi, maliyet tabanlı karar vermek için dış tablolardaki istatistikleri kullanır. Hesaplama yükünü iletmek, MapReduce işleri oluşturur ve Hadoop'un dağıtılmış hesaplama kaynaklarından yararlanır. Daha fazla bilgi için bkz. PolyBase'de pushdown hesaplamaları.
İşlem kaynaklarını ölçeklendirme
Şunun için geçerlidir: Yalnızca SQL Server 2016 (13.x), SQL Server 2017 (14.x) ve SQL Server 2019 (15.x)
Sorgu performansını geliştirmek için SQL Server PolyBase ölçeği genişletme gruplarını kullanabilirsiniz. Bu, SQL Server örnekleri ile Hadoop düğümleri arasında paralel veri aktarımını etkinleştirir ve dış verilerde çalıştırmak için işlem kaynakları ekler.
Önemli
Microsoft SQL Server PolyBase ölçek genişletme grupları kullanımdan kaldırıldı. Sql Server 2022 (16.x) ve sonraki sürümlerde ölçeği genişletme grubu işlevselliği üründen kaldırıldı. PolyBase veri sanallaştırması, SQL Server'da bir ölçek artırma özelliği olarak tam olarak desteklenmeye devam edecektir. Daha fazla bilgi için bkz. Microsoft SQL Server platformunda Büyük veri seçenekleri.
İlgili içerik
- PolyBase'de sık sorulan sorular
- SQL Server'da PolyBase ile veri sanallaştırma