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ğlantı 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. Anahtar sözcük çifti "MultipleActiveResultSets=True"
bağlantı dizesi 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 = "..." & _
"MultipleActiveResultSets=True"
string connectionString = "..." +
"MultipleActiveResultSets=True";
anahtar sözcük çiftini "MultipleActiveResultSets=False"
bağlantı dizesi ekleyerek MARS'ı devre dışı bırakabilirsiniz. "False", MARS'ın devre dışı bırakılması için tek geçerli değerdir.
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ğlantı Havuzu (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, .Transaction
Commit
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:
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.
Okuyucu kapatıldıktan sonra tüm işleri işleyin. Bu, önemli bir güncelleştirme toplu işlemi potansiyeline sahiptir.
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.