Birden Çok Etkin Sonuç Kümesini Etkinleştirme

Birden Çok Etkin Sonuç Kümesi (MARS), tek bir bağlantıda birden çok toplu işlemin yürütülmesine izin vermek için SQL Server ile birlikte çalışan bir özelliktir. MARS, SQL Server ile kullanılmak üzere etkinleştirildiğinde, kullanılan her komut nesnesi bağlantıya bir oturum ekler.

Not

Tek bir MARS oturumu, MARS'ın kullanması için bir mantıksal bağlantı ve her etkin komut için bir mantıksal bağlantı açar.

Bağlan Ion Dizesinde MARS'ı Etkinleştirme ve Devre Dışı Bırakma

Not

Aşağıdaki bağlantı dizesi SQL Server'da bulunan örnek AdventureWorks veritabanını kullanır. Sağlanan bağlantı dizesi veritabanının MSSQL1 adlı bir sunucuya yüklendiği varsayılır. ortamınız için gerekli bağlantı dizesi değiştirin.

MARS özelliği varsayılan olarak devre dışıdır. bağlantı dizesi "MultipleActiveResultSets=True" anahtar sözcük çifti eklenerek etkinleştirilebilir. "True", MARS'ın etkinleştirilmesi için tek geçerli değerdir. Aşağıdaki örnekte SQL Server örneğine nasıl bağlanılacağı ve MARS'ın etkinleştirilmesi gerektiğinin nasıl belirtileceği gösterilmektedir.

Dim connectionString As String = "Data Source=MSSQL1;" & _  
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" & _  
    "MultipleActiveResultSets=True"  
string connectionString = "Data Source=MSSQL1;" +
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" +  
    "MultipleActiveResultSets=True";  

bağlantı dizesi "MultipleActiveResultSets=False" anahtar sözcük çiftini ekleyerek MARS'ı devre dışı bırakabilirsiniz. "False", MARS'ın devre dışı bırakılması için tek geçerli değerdir. Aşağıdaki bağlantı dizesi MARS'ı devre dışı bırakma işlemini gösterir.

Dim connectionString As String = "Data Source=MSSQL1;" & _  
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" & _  
    "MultipleActiveResultSets=False"  
string connectionString = "Data Source=MSSQL1;" +
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" +  
    "MultipleActiveResultSets=False";  

MARS Kullanırken Dikkat Edilmesi Gereken Özel Noktalar

Genel olarak, mars özellikli bir bağlantı kullanmak için mevcut uygulamaların değiştirilmesi gerekmez. Ancak, uygulamalarınızda MARS özelliklerini kullanmak istiyorsanız aşağıdaki özel noktaları anlamanız gerekir.

Deyim Araya Ekleme

MARS işlemleri sunucuda zaman uyumlu olarak yürütülür. SELECT ve BULK INSERT deyimlerinin deyimleri arasında geçişe izin verilir. Ancak, veri işleme dili (DML) ve veri tanımı dili (DDL) deyimleri atomik olarak yürütülür. Atomik bir toplu iş yürütülürken yürütülmeye çalışan tüm deyimler engellenir. Sunucuda paralel yürütme bir MARS özelliği değildir.

Mars bağlantısı altında biri SELECT deyimi, diğeri DML deyimi içeren iki toplu iş gönderilirse, DML, SELECT deyiminin yürütülmesi içinde yürütmeye başlayabilir. Ancak SELECT deyiminin ilerleme kaydedebilmesi için önce DML deyiminin tamamlanması gerekir. Her iki deyim de aynı işlem altında çalışıyorsa, SELECT deyimi yürütülmeye başladıktan sonra DML deyimi tarafından yapılan değişiklikler okuma işlemine görünmez.

SELECT deyimi içindeki WAITFOR deyimi, beklerken, yani ilk satır oluşturulana kadar işlemi vermez. Bu, bir WAITFOR deyimi beklerken aynı bağlantı içinde başka hiçbir toplu işlemin yürütülemebileceği anlamına gelir.

MARS Oturum Önbelleği

MARS etkinken bir bağlantı açıldığında ek ek yük ekleyen bir mantıksal oturum oluşturulur. SqlClient, yükü en aza indirmek ve performansı artırmak için MARS oturumunu bir bağlantı içinde önbelleğe alır. Önbellek en fazla 10 MARS oturumu içerir. Bu değer kullanıcı tarafından ayarlanmıyor. Oturum sınırına ulaşılırsa yeni bir oturum oluşturulur; hata oluşturulmaz. önbellek ve içinde yer alan oturumlar bağlantı başınadır; bunlar bağlantılar arasında paylaşılmaz. Bir oturum serbest bırakıldığında, havuzun üst sınırına ulaşılmadığı sürece havuza döndürülür. Önbellek havuzu doluysa oturum kapatılır. MARS oturumlarının süresi dolmaz. Bunlar yalnızca bağlantı nesnesi atıldığında temizlenir. MARS oturum önbelleği önceden yüklenmedi. Uygulama daha fazla oturum gerektirdiğinden yüklenir.

İş Parçacığı Güvenliği

MARS işlemleri iş parçacığı güvenli değildir.

Bağlantı Havuzu

MARS özellikli bağlantılar diğer bağlantılarda olduğu gibi havuza eklenir. Bir uygulama biri MARS etkin, diğeri MARS devre dışı olan iki bağlantı açarsa, iki bağlantı ayrı havuzlarda olur. Daha fazla bilgi için bkz. SQL Server Bağlan ion Pooling (ADO.NET).

SQL Server Batch Yürütme Ortamı

Bir bağlantı açıldığında, varsayılan ortam tanımlanır. Bu ortam daha sonra mantıksal mars oturumuna kopyalanır.

Toplu yürütme ortamı aşağıdaki bileşenleri içerir:

  • Seçenekleri ayarlama (örneğin, ANSI_NULLS, DATE_FORMAT, Dİl, METNEÇEVİr)

  • Güvenlik bağlamı (kullanıcı/uygulama rolü)

  • Veritabanı bağlamı (geçerli veritabanı)

  • Yürütme durumu değişkenleri (örneğin, @@ERROR, @@ROWCOUNT, @@FETCH_STATUS @@IDENTITY)

  • Üst düzey geçici tablolar

MARS ile, varsayılan yürütme ortamı bir bağlantıyla ilişkilendirilir. Belirli bir bağlantı altında yürütülmeye başlayan her yeni toplu işlem, varsayılan ortamın bir kopyasını alır. Kod belirli bir toplu iş kapsamında her yürütüldüğünde, ortamda yapılan tüm değişikliklerin kapsamı belirli bir toplu iş olarak belirlenmiştir. Yürütme tamamlandıktan sonra, yürütme ayarları varsayılan ortama kopyalanır. Aynı işlem altında sıralı olarak yürütülecek birkaç komut veren tek bir toplu işlem söz konusu olduğunda, semantikler önceki istemciler veya sunucuları içeren bağlantılar tarafından kullanıma sunulanlarla aynıdır.

Paralel Yürütme

MARS, bir uygulamadaki birden çok bağlantı için tüm gereksinimleri kaldıracak şekilde tasarlanmamıştır. Bir uygulamanın sunucuya yönelik komutların gerçek paralel yürütülmesi gerekiyorsa, birden çok bağlantı kullanılmalıdır.

Örneğin aşağıdaki senaryoları düşünün. Biri sonuç kümesini işlemek, diğeri de verileri güncelleştirmek için olmak üzere iki komut nesnesi oluşturulur; MARS aracılığıyla ortak bir bağlantı paylaşırlar. Bu senaryoda, .TransactionCommit ilk komut nesnesinde tüm sonuçlar okunana kadar güncelleştirmede başarısız olur ve aşağıdaki özel durumu verir:

İleti: Başka bir oturum tarafından kullanılan işlem bağlamı.

Kaynak: .NET SqlClient Veri Sağlayıcısı

Beklenen: (null)

Alındı: System.Data.SqlClient.SqlException

Bu senaryoya yönelik üç seçenek vardır:

  1. Okuyucu oluşturulduktan sonra işlemi başlatarak işlemin bir parçası olmamasını sağlayın. Ardından her güncelleştirme kendi işlemine dönüşür.

  2. Okuyucu kapatıldıktan sonra tüm işleri işleyin. Bu, önemli bir güncelleştirme toplu işlemi potansiyeline sahiptir.

  3. MARS kullanmayın; bunun yerine her komut nesnesi için MARS'ın önünde yaptığınız gibi ayrı bir bağlantı kullanın.

MARS Desteğini Algılama

Bir uygulama değeri okuyarak SqlConnection.ServerVersion MARS desteğini denetleyebilir. Ana sayı SQL Server 2005 için 9 ve SQL Server 2008 için 10 olmalıdır.

Ayrıca bkz.