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.
Çoğu Azure Batch uygulaması, Batch hizmetini sorgulayan izleme veya diğer işlemleri gerçekleştirir. Bu tür liste sorguları genellikle düzenli aralıklarla gerçekleşir. Örneğin, bir işteki kuyruğa alınmış görevleri denetleyebilmeniz için önce bu işteki her görevle ilgili verileri almanız gerekir. Batch hizmetinin sorgular için döndürdüğü veri miktarını azaltmak uygulamanızın performansını artırır. Bu makalede, bu tür sorguları verimli bir şekilde oluşturma ve yürütme açıklanmaktadır. Azure.Compute.Batch kitaplığıyla Batch işleri, görevler, işlem düğümleri ve diğer kaynaklar için filtrelenmiş sorgular oluşturabilirsiniz.
Note
Batch hizmeti, bir işteki görevleri sayma ve Batch havuzundaki işlem düğümlerini sayma gibi yaygın senaryolar için API desteği sağlar. Liste sorgusu kullanmak yerine Görev Sayılarını Al ve Havuz Düğümü Sayılarını Listele işlemlerini çağırabilirsiniz. Ancak, bu daha verimli işlemler güncel olmayabilecek daha sınırlı bilgiler döndürür. Daha fazla bilgi için Görevleri ve işlem düğümlerini duruma göre sayma bölümüne bakın.
Ayrıntı düzeyi belirtme
Üretim Batch uygulamasında işler, görevler ve işlem düğümleri gibi binlerce varlık olabilir. Kaynaklar hakkında yaptığınız her sorgu için batch hizmetinden uygulamanıza büyük miktarda veri gönderilir. Performansı artırmak için sorgunuzun döndürdüğü öğe sayısını ve hangi bilgileri sınırlayın.
Bu Azure.Compute.Batch API kod parçacığı, bir işle ilişkilendirilmiş her görevi, her görevin tüm özellikleriyle birlikte listeler.
// Get a collection of all of the tasks and all of their properties for job-001
AsyncPageable<BatchTask> allTasks = batchClient.GetTasksAsync("job-001");
Bilgileri daha verimli bir şekilde listelemek için sorgunuza ayrıntı düzeyi uygulayın. , filterve select dizelerini expand yöntemine geçirin. Bu kod parçacığı yalnızca tamamlanan görevlerin kimlik, komut satırı ve işlem düğümü bilgi özelliklerini döndürür.
// Specify filter and select strings to return only a subset of tasks and their properties.
AsyncPageable<BatchTask> completedTasks = batchClient.GetTasksAsync(
jobId: "job-001",
filter: "state eq 'completed'",
select: new[] { "id", "commandLine", "nodeInfo" });
Bu örnek senaryoda, işte binlerce görev varsa, ikinci sorgunun sonuçları genellikle ilk sorgudan daha hızlı döndürülür.
filter, select ve expand parametrelerinin Azure.Compute.Batch API'si ile kullanımı hakkında daha fazla bilgi için Efficient querying in Azure.Compute.Batch bölümüne bakın.
Önemli
Uygulamanızın en yüksek verimlilik ve performansı için .NET API listenize her zaman filter, select ve (uygun olduğunda) expand dizeleri sağlamanızı öneririz. Bir ayrıntı düzeyi belirterek Batch hizmeti yanıt sürelerini azaltmaya, ağ kullanımını iyileştirmeye ve istemci uygulamaları tarafından bellek kullanımını en aza indirmeye yardımcı olabilirsiniz.
Sorgu dizelerini kullanma
Bir sorgunun döndürdüğü öğe sayısını ve sorgunun her öğe için döndürdüğü bilgi miktarını azaltmak için Azure.Compute.Batch ve Batch REST API’lerini kullanabilirsiniz. Sorgunuzu daraltmak için kullanabileceğiniz üç sorgu dizesi türü vardır: $filter, $select ve $expand.
Azure.Compute.Batch API’si için, kullanmak istediğiniz filter, select ve expand parametrelerine sahip list yöntemi için BatchClient başvurusuna bakın. Ayrıca Azure.Compute.Batch'te Verimli sorgulama bölümünü gözden geçirin.
Batch REST API'si için Batch REST API referansına bakın. Sorgulamak istediğiniz kaynağın Liste başvurusunu bulun. Ardından, , ve $filterhakkındaki $selectayrıntılar için $expand bölümünü gözden geçirin. Örneğin, Pool - List için URI parametrelerine bakın. Ayrıca Azure CLI ile verimli Batch sorguları yapmayı öğrenin.
Note
Üç sorgu dizesi türünden herhangi birini oluştururken, özellik adlarının ve büyük/küçük harflerinin REST API öğesi karşılık gelenleriyle eşleştiğinden emin olmanız gerekir. Örneğin, .NET BatchTask sınıfıyla çalışırken, .NET özelliği BatchTask.State olsa bile State yerine state belirtmeniz gerekir. Daha fazla bilgi için bkz. .NET ve REST API'leri arasındaki özellik eşlemeleri.
Filtre
İfade $filter dizesi, döndürülen öğe sayısını azaltır. Örneğin, yalnızca bir işin çalışan görevlerini listeleyebilir veya yalnızca görevleri çalıştırmaya hazır işlem düğümlerini listeleyebilirsiniz.
Bu dize, bir özellik adı, işleci ve değerinden oluşan bir ifadeye sahip bir veya daha fazla ifadeden oluşur. Belirtilebilen özellikler, her özellik için desteklenen işleçler gibi sorguladığınız her varlık türüne özeldir. Ve andmantıksal işleçleri or kullanılarak birden çok ifade birleştirilebilir.
Bu örnekte yalnızca çalışan işleme görevleri listelenir: (state eq 'running') and startswith(id, 'renderTask').
Seç
İfade $select dizesi, her öğe için döndürülen özellik değerlerini sınırlar. Virgülle ayrılmış özellik adlarının listesini belirtirsiniz ve sorgu sonuçlarındaki öğeler için yalnızca bu özellik değerleri döndürülür. Sorguladığınız varlık türünün özelliklerinden herhangi birini belirtebilirsiniz.
Bu örnek, her görev için yalnızca üç özellik değerinin döndürülmesi gerektiğini belirtir: id, state, stateTransitionTime.
Genişlet
İfade $expand dizesi, belirli bilgileri almak için gereken API çağrılarının sayısını azaltır. Tek bir API çağrısıyla her öğe hakkında daha fazla bilgi edinmek için bu dizeyi kullanabilirsiniz. Bu yöntem, API çağrılarını azaltarak performansı geliştirmeye yardımcı olur. Varlık listesini almak ve her liste öğesi hakkında bilgi istemek yerine bir $expand dize kullanın.
benzer şekilde $select, $expand belirli verilerin liste sorgusu sonuçlarına eklenip eklenmeyeceğini denetler. Tüm özellikler gerekli olduğunda ve hiçbir seçme dizesi belirtilmediğinde, $expandistatistik bilgilerini almak için kullanılmalıdır. Özelliklerin bir alt kümesini almak için bir seçme dizesi kullanılıyorsa, stats seçme dizesinde belirtilebilir ve $expand belirtilmesi gerekmez.
Bu dizenin desteklenen kullanımları arasında işleri, iş zamanlamalarını, görevleri ve havuzları listeleme yer alır. Şu anda dize yalnızca istatistik bilgilerini destekler.
Bu örnek, listedeki her öğe için istatistik bilgilerinin döndürülmesi gerektiğini belirtir: stats.
Dizeleri filtreleme, seçme ve genişletme kuralları
- Özelliklerin filtre, seçme ve genişletme dizelerindeki adlarının Batch REST API'sinde olduğu gibi göründüğünden emin olun. Bu kural, Azure.Compute.Batch veya diğer Batch SDK’larından birini kullandığınızda bile geçerlidir.
- Tüm özellik adları büyük/küçük harfe duyarlıdır, ancak özellik değerleri büyük/küçük harfe duyarlı değildir.
- Tarih/saat dizeleri iki biçimden biri olabilir ve önünde
DateTimebulunması gerekir.- W3C-DTF biçim örneği:
creationTime gt DateTime'2011-05-08T08:49:37Z' - RFC 1123 biçim örneği:
creationTime gt DateTime'Sun, 08 May 2011 08:49:37 GMT'
- W3C-DTF biçim örneği:
- Boole dizeleri veya
truefalseşeklindedir. - Geçersiz bir özellik veya işleç belirtilirse hata
400 (Bad Request)oluşur.
Azure'da verimli sorgulama. Compute.Batch
Azure.Compute.Batch API’sinde, BatchClient üzerindeki liste yöntemleri filter, select ve expand parametrelerini doğrudan kabul eder:
-
filter: Döndürülen öğe sayısını sınırlayın. -
select: Her öğeyle hangi özellik değerlerinin döndürüleceğini belirtin. -
expand: Her öğe için ayrı çağrılar yerine tek bir API çağrısındaki tüm öğelerin verilerini alın.
Aşağıdaki kod parçacığı, belirli bir havuz kümesine ait istatistikler için Batch hizmetini verimli bir şekilde sorgulamak amacıyla Azure.Compute.Batch API'sini kullanır. Batch kullanıcısının hem test hem de üretim havuzları vardır. Test havuzu kimliklerine "test" ön eki eklenir ve üretim havuzu kimliklerine "prod" ön eki eklenir. myBatchClient , BatchClient sınıfının düzgün şekilde başlatılan bir örneğidir.
// Pull only the "test" pools, and limit the data crossing the wire by selecting only
// the Id and Statistics properties. Use expand="stats" so the .NET API pulls the
// statistics for the BatchPools in a single underlying REST API call. Note that we
// use the pool's REST API element name "stats" here as opposed to "Statistics" as it
// appears in the .NET API (BatchPool.Statistics).
List<BatchPool> testPools = new List<BatchPool>();
await foreach (BatchPool pool in myBatchClient.GetPoolsAsync(
filter: "startswith(id, 'test')",
select: new[] { "id", "stats" },
expand: new[] { "stats" }))
{
testPools.Add(pool);
}
Tip
Döndürülen veri miktarını sınırlamak için filter gibi uygun Get yöntemlerine de aynı select, expandve parametreleri geçirilebilir.
Toplu REST to .NET API eşlemeleri
Filtre, seçme ve genişletme dizelerindeki özellik adları hem ad hem de büyük/küçük harf olarak REST API karşılıklarını yansıtmalıdır. Aşağıdaki tablolarda .NET ve REST API'sinin karşılık gelenleri arasında eşlemeler sağlanır.
Filtre dizeleri için eşlemeler
-
.NET liste yöntemleri: Bu sütundaki .NET API yöntemlerinin her biri
filter,selectveexpanddize parametrelerini kabul eder. -
REST listesi istekleri: Bu sütunda listelenen her REST API sayfası, filtre dizelerinde izin verilen özelliklere ve işlemlere sahip bir tablo içerir. Bir dize oluştururken
filterbu özellik adlarını ve işlemlerini kullanabilirsiniz.
Belirli dizeler için eşlemeler
- Azure. Compute.Batch türleri: Azure. Compute.Batch API türleri.
-
REST API varlıkları: Bu sütundaki her sayfa türü için REST API özellik adlarını listeleyen bir veya daha fazla tablo içerir. Bu özellik adları select dizeleri oluştururken kullanılır. Bir dize oluştururken
selectaynı özellik adlarını kullanırsınız.
| Azure.Compute.Batch türleri | REST API varlıkları |
|---|---|
| BatchJob | İş hakkında bilgi alma |
| BatchWorkSchedule | İş zamanlaması hakkında bilgi alma |
| BatchNode | Düğüm hakkında bilgi alma |
| BatchPool | Havuz hakkında bilgi alma |
| BatchTask | Bir görev hakkında bilgi alın |
Örnek: filtre dizesi oluşturma
Liste yönteminin filter parametresi için bir filtre dizesi oluşturmak için ilgili REST API sayfasını bulun. Seçilebilir özellikler ve desteklenen işleçler ilk çok satırlı tabloda yer alır. Örneğin, çıkış kodu sıfır olmayan tüm görevleri almak için, geçerli özellik dizesi ve izin verilen işleçler için bir işle ilişkili görevleri listeleme seçeneğini işaretleyin:
| Özellik | İzin verilen işlemler | Type |
|---|---|---|
executionInfo/exitCode |
eq, ge, gt, le , lt |
Int |
İlgili filtre dizesi:
(executionInfo/exitCode lt 0) or (executionInfo/exitCode gt 0)
Örnek: seçme dizesi oluşturma
Bir select dize oluşturmak için, listelediğiniz varlığa karşılık gelen REST API sayfasını bulun. Seçilebilir özellikler ve desteklenen işleçler ilk çok satırlı tabloda yer alır. Örneğin, bir listedeki her görevin yalnızca kimliğini ve komut satırını almak için Görev hakkında bilgi al'ı işaretleyin:
| Özellik | Type | Notes |
|---|---|---|
id |
String |
The ID of the task. |
commandLine |
String |
The command line of the task. |
İlgili seçim dizesi şöyledir:
id, commandLine
Kod örnekleri
Verimli liste sorguları
EfficientListQueries örnek projesi, liste sorgulamanın verimli bir şekilde uygulama performansını nasıl etkilediğini gösterir. Bu C# konsol uygulaması bir işe çok sayıda görev oluşturur ve ekler. Daha sonra uygulama BatchClient.GetTasks yöntemine birden çok çağrı yapar ve döndürülecek veri miktarını değiştirmek için farklı filter, selectve expand parametre değerlerini geçirir. Bu örnek şuna benzer bir çıkış oluşturur:
Adding 5000 tasks to job jobEffQuery...
5000 tasks added in 00:00:47.3467587, hit ENTER to query tasks...
4943 tasks retrieved in 00:00:04.3408081 (ExpandClause: | FilterClause: state eq 'active' | SelectClause: id,state)
0 tasks retrieved in 00:00:00.2662920 (ExpandClause: | FilterClause: state eq 'running' | SelectClause: id,state)
59 tasks retrieved in 00:00:00.3337760 (ExpandClause: | FilterClause: state eq 'completed' | SelectClause: id,state)
5000 tasks retrieved in 00:00:04.1429881 (ExpandClause: | FilterClause: | SelectClause: id,state)
5000 tasks retrieved in 00:00:15.1016127 (ExpandClause: | FilterClause: | SelectClause: id,state,environmentSettings)
5000 tasks retrieved in 00:00:17.0548145 (ExpandClause: stats | FilterClause: | SelectClause: )
Sample complete, hit ENTER to continue...
Örnek, döndürülen özellikleri ve öğe sayısını sınırlayarak sorgu yanıt sürelerini büyük ölçüde azaltabileceğinizi gösterir. Bunu ve diğer örnek projeleri GitHub'daki azure-batch-samples deposunda bulabilirsiniz.
BatchMetrics kitaplığı
Aşağıdaki BatchMetrics örnek projesi, Batch API'sini kullanarak Azure Batch işinin ilerleme durumunu verimli bir şekilde izleme işlemini gösterir.
Bu örnek, kendi projelerinize ekleyebileceğiniz bir .NET sınıf kitaplığı projesi içerir. Ayrıca, kitaplığın kullanımını alıştırmak ve göstermek için basit bir komut satırı programı da vardır.
Proje içindeki örnek uygulama şu işlemleri gösterir:
- Yalnızca ihtiyacınız olan özellikleri indirmek için belirli öznitelikleri seçme
- Son sorgudan bu yana yalnızca değişiklikleri indirmek için durum geçiş sürelerini filtreleme
Örneğin, BatchMetrics kitaplığında aşağıdaki yöntem görüntülenir. Sorgulanan varlıklar için yalnızca id ve state özelliklerinin alınması gerektiğini ve yalnızca durumu belirtilen DateTime parametresinden bu yana değişmiş varlıkların döndürülmesi gerektiğini belirten select ve filter dizelerini içeren bir demet döndürür.
return (
Filter: string.Format("stateTransitionTime gt DateTime'{0:o}'", time),
Select: new[] { "id", "state" });
Sonraki Adımlar
- Eşzamanlı düğüm görevleriyle Azure Batch işlem kaynağı kullanımını en üst düzeye çıkarın. Bazı iş yükü türleri, daha büyük (ancak daha az) işlem düğümünde paralel görevlerin yürütülmesinden yararlanabilir. Bu tür bir senaryoyla ilgili ayrıntılar için makaledeki örnek senaryoya göz atın.
- Görevleri ve düğümleri duruma göre sayarak Batch çözümlerini izleme