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.
Bu makalede, PolyBase sorgusunun dış veri kaynağına gönderme işleminden yararlanılıp yararlanmadığının nasıl belirleneceği ayrıntılı olarak anlatılır. PolyBase 'deki dış itme hakkında daha fazla bilgi için,itme hesaplamalarına bakın.
Sorgum external pushdown'dan yararlanıyor mu?
İtme hesaplaması, dış veri kaynaklarında sorguların performansını artırır. Bazı hesaplama görevleri SQL Server'a getirilmek yerine dış veri kaynağına devredilir. Özellikle filtreleme ve birleştirme itelemesi durumlarında, SQL Server örneğindeki iş yükü büyük ölçüde azaltılabilir.
PolyBase anında iletme hesaplaması sorgunun performansını önemli ölçüde artırabilir. Bir PolyBase sorgusu yavaş çalışıyorsa PolyBase sorgunuzun aşağı itme işleminin gerçekleşip gerçekleşmediğini belirlemeniz gerekir.
Yürütme planında aşağı itme işleminin gözlemlendiği üç farklı senaryo vardır:
- Filtre koşulu anında iletme
- Pushdown'a katıl
- Toplama işleminde öne çekme
Not
Dış veri kaynaklarına nelerin gönderilebileceğiyle ilgili sınırlamalar, PolyBase pushdown hesaplamalarıdoğrultusunda vardır.
- Bazı T-SQL işlevleri aşağı göndermeyi engelleyebilir. Daha fazla bilgi için bkz. PolyBase özellikleri ve sınırlamaları.
- Aksi halde aşağı gönderilebilen T-SQL işlevlerinin listesi için bkz. PolyBaseiçindeki Pushdown hesaplamaları.
Yöneticilerin dış veri kaynağına bir PolyBase sorgusu gönderilip gönderilmediğini belirlemesine olanak sağlamak için SQL Server 2019'un (15.x) iki yeni özelliği kullanıma sunulmuştur:
- İzleme bayrağı 6408 ile Tahmini Yürütme Planı'nı görüntüleyin
-
read_commandöğesini, sys.dm_exec_external_work dinamik yönetim görünümünde görüntüleyin
Bu makalede, her birinin üçer senaryoda kullanılmasına dair iki farklı kullanım örneğinin detayları sağlanmaktadır.
TF6408 kullanma
Varsayılan olarak, tahmini yürütme planı uzak sorgu planını kullanıma sunmaz ve yalnızca uzak sorgu işleci nesnesini görürsünüz. Örneğin, SQL Server Management Studio'dan (SSMS) tahmini yürütme planı:
Veya Azure Data Studio'da:
SQL Server 2019'dan (15.x) başlayarak, DBCC TRACEONkullanarak genel olarak yeni bir izleme bayrağı 6408'i etkinleştirebilirsiniz. Mesela:
DBCC TRACEON (6408, -1);
Bu izleme bayrağı yalnızca tahmini yürütme planlarıyla çalışır ve gerçek yürütme planları üzerinde hiçbir etkisi yoktur. Bu izleme işareti, Uzak Sorgu aşamasında neler olduğunu gösteren Uzak Sorgu operatörü hakkındaki bilgileri kullanıma sunar.
Yürütme planları okların yönüyle gösterildiği gibi sağdan sola okunur. Bir işlemci başka bir işlecin sağında yer alıyorsa, o işlemcinin "öncesinde" olduğu söylenir. Bir işleç başka bir işlecin solunda olduğunda, onun "ilerisinde" olduğu söylenir.
- SSMS'de sorguyu vurgulayın ve araç çubuğundan Tahmini Yürütme Planını Görüntüle'yi seçin veya Ctrl+L kullanın.
- Azure Data Studio'da sorguyu vurgulayın ve Açıklamaseçin. Ardından, aşağı itme işleminin gerçekleşip gerçekleşmediğini belirlemek için aşağıdaki senaryoları göz önünde bulundurun.
Aşağıdaki örneklerin her biri SSMS ve Azure Data Studio çıkışını içerir.
Filtre koşulunun öne alınması (yürütme planıyla görüntüleme)
WHERE yan tümcesinde bir filtre koşulu kullanan aşağıdaki sorguyu göz önünde bulundurun:
SELECT *
FROM [Person].[BusinessEntity] AS be
WHERE be.BusinessEntityID = 17907;
Filtre koşulunun aşağı itme işlemi gerçekleşirse, filtre işleci dış işlecinden önce gelir. Filtre işleci dış işleçten önce olduğunda, filtreleme dış veri kaynağından geri seçilmeden önce oluştu ve filtre koşulunun aşağı gönderildiğini gösterir.
Filtre koşulunun aşağı itme işlemiyle (yürütme planıyla görüntüleme)
İzleme bayrağı 6408 etkinleştirildiğinde, tahmini yürütme planı çıkışında ek bilgiler görürsünüz. Çıkış, SSMS ile Azure Data Studio arasında değişiklik gösterir.
SSMS'de, uzak sorgu planı tahmini yürütme planında Sorgu 2 (sp_execute_memo_node_1) olarak görüntülenir ve Sorgu 1'deki Uzak Sorgu işlecine karşılık gelir. Mesela:
Azure Data Studio'da, uzak sorgu yürütmesi bunun yerine tek bir sorgu planı olarak temsil edilir. Mesela:
Filtre koşulunun gönderilmesi olmadan (yürütme planıyla görüntüleme)
Filtre öngercisinin aşağı itilmesi gerçekleşmiyorsa, filtre dış operatörden sonra yer alır.
SSMS'den tahmini yürütme planı:
Azure Data Studio'dan tahmini yürütme planı:
JOIN operasyonunun indirgenmesi
Aynı dış veri kaynağındaki iki dış tablo için JOIN işlecini kullanan aşağıdaki sorguyu göz önünde bulundurun:
SELECT be.BusinessEntityID, bea.AddressID
FROM [Person].[BusinessEntity] AS be
INNER JOIN [Person].[BusinessEntityAddress] AS bea
ON be.BusinessEntityID = bea.BusinessEntityID;
Eğer Birleştirme harici veri kaynağına gönderilirse, Birleştirme işleci harici işlemciden önce olur. Bu örnekte hem [BusinessEntity] hem de [BusinessEntityAddress] dış tablolardır.
Birleştirmenin aşağı itmesiyle (yürütme planıyla görüntüleme)
SSMS'den tahmini yürütme planı:
Azure Data Studio'dan tahmini yürütme planı:
Birleştirme itme olmaksızın (yürütme planıyla görüntüleme)
JOIN dış veri kaynağına gönderilmezse, Join işleci dış işlecin ardından olur. SSMS'de dış işleç, Sorgu 1'deki Uzak Sorgu işlecinde yer alan sp_execute_memo_nodeiçin sorgu planındadır. Azure Data Studio'da Join işleci dış işleçlerin peşindedir.
SSMS'den tahmini yürütme planı:
Azure Data Studio'dan tahmini yürütme planı:
Toplamanın aşağı itilmesi (yürütme planıyla görüntüleme)
Toplama işlevi kullanan aşağıdaki sorguyu göz önünde bulundurun:
SELECT SUM([Quantity]) as Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];
Toplamanın aşağı itilmesiyle (yürütme planıyla görüntüleme)
Toplamanın aşağı itilmesi gerçekleşirse toplama işleci dış işlecinden önce gelir. Toplama işleci dış işleçten önce olduğunda, toplama işlemi dış veri kaynağından geri seçilmeden önce oluştu ve toplamanın aşağı gönderildiğini gösterir.
SSMS'den tahmini yürütme planı:
Azure Data Studio'dan tahmini yürütme planı:
Toplamanın aşağı inmesi olmadan (yürütme planıyla görüntüleme)
Toplama işleminin aşağı itilmesi gerçekleşmiyorsa toplama işleci dış işlecin ardından gelir.
SSMS'den tahmini yürütme planı:
Azure Data Studio'dan tahmini yürütme planı:
DMV kullanma
SQL Server 2019 (15.x) ve sonraki sürümlerde, read_command DMV'nin sütunu dış veri kaynağına gönderilen sorguyu gösterir. Bu, pushdown (veri itme) işleminin gerçekleşip gerçekleşmediğini belirlemenize olanak tanır, ancak yürütme planını açıklamaz. Uzak sorguyu görüntülemek için TF6408 gerekmez.
Not
Hadoop ve Azure depolama için read_command her zaman NULLdöndürür.
Aşağıdaki sorguyu yürütebilir ve araştırılan sorguyu tanımlamak için start_time/end_time ve read_command kullanabilirsiniz:
SELECT execution_id, start_time, end_time, read_command
FROM sys.dm_exec_external_work
ORDER BY execution_id desc;
Not
sys.dm_exec_external_work yönteminin bir sınırlaması, DMV'deki read_command alanının 4000 karakterle sınırlı olmasıdır. Sorgu yeterince uzunsa, read_command, read_command'de WHERE/JOIN/toplama işlevini görmeden önce kesilebilir.
Filtre koşulunun aşağı itme (DMV ile görüntüleme)
Önceki filtre koşulu örneğinde kullanılan sorguyu göz önünde bulundurun:
SELECT *
FROM [Person].[BusinessEntity] be
WHERE be.BusinessEntityID = 17907;
Filtrenin aşağı itmesiyle (DMV ile görüntüleme)
DMV'deki read_command'ın kontrol ederek filtre koşulunun aşağı itilmesi olup olmadığını anlayabilirsiniz. Aşağıdaki örneğe benzer bir şey görürsünüz:
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID], [T1_1].[rowguid] AS [rowguid],
[T1_1].[ModifiedDate] AS [ModifiedDate] FROM
(SELECT [T2_1].[BusinessEntityID] AS [BusinessEntityID], [T2_1].[rowguid] AS [rowguid],
[T2_1].[ModifiedDate] AS [ModifiedDate]
FROM [AdventureWorks2022].[Person].[BusinessEntity] AS T2_1
WHERE ([T2_1].[BusinessEntityID] = CAST ((17907) AS INT))) AS T1_1;
WHERE yan tümcesi, dış veri kaynağına gönderilen komutta yer alır ve bu da filtre koşulunun dış veri kaynağında değerlendirildiği anlamına gelir. Dış veri kaynağında veri kümesi üzerinde filtreleme yapıldı ve PolyBase tarafından yalnızca filtrelenen veri kümesi alındı.
Filtre uygulaması olmadan (DMV ile görüntüleme)
İtme gerçekleşmiyorsa aşağıdakine benzer bir görünüm görürsünüz:
SELECT "BusinessEntityID","rowguid","ModifiedDate" FROM "AdventureWorks2022"."Person"."BusinessEntity"
Komutta dış veri kaynağına gönderilen WHERE yan tümcesi olmadığından filtre koşulu aşağı gönderilmez. Veri kümesi PolyBase tarafından alındıktan sonra SQL Server tarafında veri kümesinin tamamında filtreleme yapıldı.
JOIN işleminde aşağı iletme (DMV ile görüntüleme)
Önceki JOIN örneğinde kullanılan sorguyu göz önünde bulundurun:
SELECT be.BusinessEntityID, bea.AddressID
FROM [Person].[BusinessEntity] be
INNER JOIN [Person].[BusinessEntityAddress] bea ON be.BusinessEntityID = bea.BusinessEntityID;
Birleştirmenin aşağı itmesiyle (DMV ile görüntüleme)
JOIN dış veri kaynağına gönderilirse şunun gibi bir şey görürsünüz:
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID], [T1_1].[AddressID] AS [AddressID]
FROM (SELECT [T2_2].[BusinessEntityID] AS [BusinessEntityID], [T2_1].[AddressID] AS [AddressID]
FROM [AdventureWorks2022].[Person].[BusinessEntityAddress] AS T2_1
INNER JOIN [AdventureWorks2022].[Person].[BusinessEntity] AS T2_2
ON ([T2_1].[BusinessEntityID] = [T2_2].[BusinessEntityID])) AS T1_1;
JOIN yan tümcesi dış veri kaynağına gönderilen komuttadır, bu nedenle JOIN aşağı gönderilir. Veri kümesindeki birleştirme dış veri kaynağında gerçekleşti ve yalnızca birleştirme koşuluyla eşleşen veri kümesi PolyBase tarafından alındı.
Birleştirme indirme olmadan (DMV ile görüntüleme)
Birleştirmenin gönderimi gerçekleşmiyorsa, dış veri kaynağında yürütülen iki farklı sorgu olduğunu görürsünüz:
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID], [T1_1].[AddressID] AS [AddressID]
FROM [AdventureWorks2022].[Person].[BusinessEntityAddress] AS T1_1;
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID] FROM [AdventureWorks2022].[Person].[BusinessEntity] AS T1_1;
İki veri kümesini birleştirme, her iki veri kümesi de PolyBase tarafından alındıktan sonra SQL Server tarafında oluştu.
Toplama işleminin aşağıya doğru aktarılması (DMV ile görüntüleme)
Toplama işlevi kullanan aşağıdaki sorguyu göz önünde bulundurun:
SELECT SUM([Quantity]) as Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];
Toplamanın aşağı itilmesiyle (DMV ile görüntüleme)
Toplamanın aşağı itilmesi gerçekleşirse, read_commandtoplama işlevini görürsünüz. Mesela:
SELECT [T1_1].[col] AS [col] FROM (SELECT SUM([T2_1].[Quantity]) AS [col]
FROM [AdventureWorks2022].[Production].[ProductInventory] AS T2_1) AS T1_1
Toplama işlevi dış veri kaynağına gönderilen komuttadır, bu nedenle toplama aşağı gönderilir. Toplama dış veri kaynağında gerçekleşti ve polyBase tarafından yalnızca toplanan veri kümesi alındı.
Toplamanın aşağı inmesi olmadan (DMV ile görünüm)
Toplamanın aşağı itme işlemi gerçekleşmiyorsa, read_command'de toplama işlevini göremezsiniz. Mesela:
SELECT "Quantity" FROM "AdventureWorks2022"."Production"."ProductInventory"
Toplama işlemi, toplanmamış veri kümesi PolyBase tarafından alındıktan sonra SQL Server'da gerçekleştirildi.