Share via


Çoklu Active sonucu kullanarak (mars) ayarlar

SQL Server 2005birden çok etkin sonuç kümeleri (mars) için destek erişen uygulamalar tanıtılan Veritabanı Altyapısı. Önceki sürümlerinde SQL Server, veritabanı uygulamaları değil korumak bir bağlantıda birden çok etkin deyimleri. Kullanırken SQL Servervarsayılan sonuç kümeleri, uygulama vardı süreç veya diğer toplu Bu bağlantı üzerinde çalıştırmak önce tüm sonuç kümeleri bir toplu iş iptal. SQL Server 2005birden çok bağlantı başına istek beklemede olan uygulamaların olanak veren yeni bir bağlantı öznitelik tanıtıldı ve özellikle, birden fazla etkin varsayılan sonuç için her bağlantı için ayarlayın.

mars, aşağıdaki yeni özellikleri ile uygulama Tasarım basitleştirir:

  • Uygulamalar, birden çok varsayılan olabilir sonuç açık belirler ve onları okuma Interleave.

  • Uygulamaları diğer deyimleri yürütebilirsiniz (örneğin, INSERT, update, delete ve saklı yordam çağrıları) varsayılan sonuç kümeleri açık iken.

mars kullanan uygulamalar aşağıdaki yönergeleri yararlı bulabilirsiniz:

  • Varsayılan sonuç kümeleri tek sql deyimleri (select, dml çıktı, alma, metin okuma ve benzeri) tarafından oluşturulan kısa süreli veya kısa sonuç kümeleri için kullanılmalıdır.

  • Sunucu imleçleri tek sql deyimleri tarafından oluşturulan uzun süreli veya büyük sonuç kümeleri için kullanılmalıdır.

  • Her zaman olup onlar veya sonuç bakılmaksızın yordam istekleri ve birden çok sonuç döndüren toplu sonuçları sonuna kadar okuyun.

  • Mümkün olan her yerde, bağlantı özelliklerini değiştirmek ve tercih işlemleri yönetmek için API çağrıları kullanın Transact-SQLdeyimleri.

  • Eşzamanlı toplu işler çalıştırılırken mars oturum kapsamlı kimliğe bürünme yasaktır.

[!NOT]

mars işlevi varsayılan olarak etkin değildir. mars bağlanırken kullanılacak SQL Serverile SQL Serveryerel istemci gerekir özellikle etkinleştirdiğiniz Bu bağlantı dizesi içinde. Daha fazla bilgi için bkz: SQL Serveryerel istemci ole db sağlayıcısı ve SQL Serveryerel istemci odbc sürücüsü bölümler, bu konunun ilerleyen bölümlerindeki.

SQL ServerYerel istemci bağlantısı etkin deyimleri sayısını sınırlamaz.

Tipik uygulamalar, daha çok bir tek deyimli toplu iş veya saklı yordam yürütme aynı zamanda from mars mars nasıl uygulanır anlamak zorunda kalmadan yararlanacak olması gerekmez. Ancak, daha karmaşık gereksinimlerini uygulamalarla bu dikkate gerek.

mars, tek bir bağlantı içinde birden çok istek Aralanmış yürütülmesini sağlar. Yani, bunu çalıştırmak bir toplu iş, ve yürütme içinde diğer istekleri yürütmek olanak sağlar. Ancak, mars Aralaması açısından değil paralel yürütme açısından tanımlandığını unutmayın.

Yürütme sadece iyi tanımlanmış noktalarda değiştirilebilir ama mars altyapı Aralanmış bir biçimde yürütmek birden çok toplu işlemi sağlar. Ayrıca, çoğu deyimleri atomically içinde bir toplu iş çalıştırmanız gerekir. Bazen olarak adlandırılır istemciye satır dönmek deyimleri noktaları verim, satırları istemciye, örneğin gönderilme süre tamamlanmadan önce yürütme Interleave izin verilir:

  • SEÇİN

  • GETİR

  • RECEIVE

Bir saklı yordam veya toplu iş bölümü tamamlanmadan önce yürütme çalıştırmanız gerekir olarak yürütülen diğer deyimleri diğer mars isteklere açık olması.

İçinde yürütme toplu Interleave kesin bir şekilde bir dizi etken tarafından etkilenmiştir ve verimi noktaları içeren birden çok toplu işlem komutları yürütüleceği tam sırası tahmin etmek zordur. Böyle karmaşık toplu Aralanmış yürütülmesi nedeniyle istenmeyen yan etkileri önlemek için dikkatli olun.

API çağrıları kullanarak sorunları önlemek yerine Transact-SQLbağlantı durumu (set, use) ve hareketleri (BEGIN tran, COMMIT, rollback) Bu ifadeler de verimi noktaları içeren multi-statement toplu dahil değil ve tüketen veya tüm sonuçları iptal etme gibi toplu işlemler yürütme seri hale getirilirken yönetmek için deyimleri.

[!NOT]

Toplu iş çıkar önce bir toplu iş veya saklı yordam mars etkinleştirildiğinde hangi elle ya da örtülü bir hareket başlatır işlemi tamamlamalısınız. Eğer o does değil, SQL Servertoplu iş tamamlandığında hareket tarafından yapılan tüm değişiklikleri geri alır. Böyle bir hareket tarafından yönetilen SQL Servertoplu iş kapsamlı bir işlem olarak. Bu işlem tanıtılan yeni bir tür olduğunu SQL Server 2005mars etkinleştirildiğinde kullanılacak mevcut iyi saklı yordamları etkinleştirmek için. Toplu iş kapsamlı hareketleri hakkında daha fazla bilgi için Hareket deyimiyle (Transact-sql)ve Controlling Transactions (Database Engine).

mars gelen ado kullanarak örnek için bkz: SQL Server yerel istemci ile ado kullanma.

SQL Server Native Client OLE DB Sağlayıcısı

SQL ServerYerel istemci ole db sağlayıcısı yoluyla DBPROPSET_SQLSERVERDBINIT özellik kümesi içinde uygulanan SSPROP_INIT_MARSCONNECTION veri kaynağı başlatma özelliği ayrıca mars destekler. Ayrıca, yeni bir bağlantı dizesi anahtar sözcüğü, MarsConn, eklenmiş. Kabul ettiği trueveya falsedeğerleri; falsevarsayılan değerdir.

Veri kaynağı özelliği varıant_true DBPROP_MULTIPLECONNECTIONS öntanımlıdır. Bu, birden çok eşzamanlı komut ve satır kümesi nesneleri desteklemek için birden çok bağlantı'nin sağlayıcı yumurtlamaya anlamına gelir. mars etkin olduğunda, SQL ServerMULTIPLE_CONNECTIONS VARIANT_FALSE için varsayılan olarak ayarlanır, böylece yerel istemci tek bir bağlantı üzerinde birden fazla komut ve satır kümesi nesneleri destekleyebilir.

DBPROPSET_SQLSERVERDBINIT özellik kümesi için yapılan geliştirmeleri hakkında daha fazla bilgi için bkz: Başlatma ve yetkilendirme özellikleri.

SQL Server yerel istemci ole db sağlayıcısı örneği

Örneğin, veri kaynağı nesnesi kullanılarak oluşturulmuş SQL ServerYerel ole db sağlayıcısı ve mars etkin oturum nesnesi oluşturmadan önce DBPROPSET_SQLSERVERDBINIT özelliği kullanılarak.

#include <sqlncli.h>

IDBInitialize *pIDBInitialize = NULL;
IDBCreateSession *pIDBCreateSession = NULL;
IDBProperties *pIDBProperties = NULL;

// Create the data source object.
hr = CoCreateInstance(CLSID_SQLNCLI10, NULL,
   CLSCTX_INPROC_SERVER,
   IID_IDBInitialize, 
    (void**)&pIDBInitialize);

hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties);

// Set the MARS property.
DBPROP rgPropMARS;

// The following is necessary since MARS is off by default.
rgPropMARS.dwPropertyID = SSPROP_INIT_MARSCONNECTION;
rgPropMARS.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMARS.dwStatus = DBPROPSTATUS_OK;
rgPropMARS.colid = DB_NULLID;
V_VT(&(rgPropMARS.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMARS.vValue)) = VARIANT_TRUE;

// Create the structure containing the properties.
DBPROPSET PropSet;
PropSet.rgProperties = &rgPropMARS;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;

// Get an IDBProperties pointer and set the initialization properties.
pIDBProperties->SetProperties(1, &PropSet);
pIDBProperties->Release();

// Initialize the data source object.
hr = pIDBInitialize->Initialize();

//Create a session object from a data source object.
IOpenRowset * pIOpenRowset = NULL;
hr = IDBInitialize->QueryInterface(IID_IDBCreateSession, (void**)&pIDBCreateSession));
hr = pIDBCreateSession->CreateSession(
   NULL,             // pUnkOuter
   IID_IOpenRowset,  // riid
  &pIOpenRowset ));  // ppSession

// Create a rowset with a firehose mode cursor.
IRowset *pIRowset = NULL;
DBPROP rgRowsetProperties[2];

// To get a firehose mode cursor request a 
// forward only read only rowset.
rgRowsetProperties[0].dwPropertyID = DBPROP_IRowsetLocate;
rgRowsetProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[0].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[0].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[0].vValue));
rgRowsetProperties[0].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[0].vValue.boolVal = VARIANT_FALSE;

rgRowsetProperties[1].dwPropertyID = DBPROP_IRowsetChange;
rgRowsetProperties[1].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[1].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[1].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[1].vValue));
rgRowsetProperties[1].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[1].vValue.boolVal = VARIANT_FALSE;

DBPROPSET rgRowsetPropSet[1];
rgRowsetPropSet[0].rgProperties = rgRowsetProperties
rgRowsetPropSet[0].cProperties = 2
rgRowsetPropSet[0].guidPropertySet = DBPROPSET_ROWSET;

hr = pIOpenRowset->OpenRowset (NULL,
   &TableID,
   NULL,
   IID_IRowset,
   1,
   rgRowsetPropSet
   (IUnknown**)&pIRowset);

#include <sqlncli.h>

IDBInitialize *pIDBInitialize = NULL;
IDBCreateSession *pIDBCreateSession = NULL;
IDBProperties *pIDBProperties = NULL;

// Create the data source object.
hr = CoCreateInstance(CLSID_SQLNCLI10, NULL,
   CLSCTX_INPROC_SERVER,
   IID_IDBInitialize, 
    (void**)&pIDBInitialize);

hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties);

// Set the MARS property.
DBPROP rgPropMARS;

// The following is necessary since MARS is off by default.
rgPropMARS.dwPropertyID = SSPROP_INIT_MARSCONNECTION;
rgPropMARS.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMARS.dwStatus = DBPROPSTATUS_OK;
rgPropMARS.colid = DB_NULLID;
V_VT(&(rgPropMARS.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMARS.vValue)) = VARIANT_TRUE;

// Create the structure containing the properties.
DBPROPSET PropSet;
PropSet.rgProperties = &rgPropMARS;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;

// Get an IDBProperties pointer and set the initialization properties.
pIDBProperties->SetProperties(1, &PropSet);
pIDBProperties->Release();

// Initialize the data source object.
hr = pIDBInitialize->Initialize();

//Create a session object from a data source object.
IOpenRowset * pIOpenRowset = NULL;
hr = IDBInitialize->QueryInterface(IID_IDBCreateSession, (void**)&pIDBCreateSession));
hr = pIDBCreateSession->CreateSession(
   NULL,             // pUnkOuter
   IID_IOpenRowset,  // riid
  &pIOpenRowset ));  // ppSession

// Create a rowset with a firehose mode cursor.
IRowset *pIRowset = NULL;
DBPROP rgRowsetProperties[2];

// To get a firehose mode cursor request a 
// forward only read only rowset.
rgRowsetProperties[0].dwPropertyID = DBPROP_IRowsetLocate;
rgRowsetProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[0].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[0].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[0].vValue));
rgRowsetProperties[0].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[0].vValue.boolVal = VARIANT_FALSE;

rgRowsetProperties[1].dwPropertyID = DBPROP_IRowsetChange;
rgRowsetProperties[1].dwOptions = DBPROPOPTIONS_REQUIRED;
rgRowsetProperties[1].dwStatus = DBPROPSTATUS_OK;
rgRowsetProperties[1].colid = DB_NULLID;
VariantInit(&(rgRowsetProperties[1].vValue));
rgRowsetProperties[1].vValue.vt = VARIANT_BOOL;
rgRowsetProperties[1].vValue.boolVal = VARIANT_FALSE;

DBPROPSET rgRowsetPropSet[1];
rgRowsetPropSet[0].rgProperties = rgRowsetProperties
rgRowsetPropSet[0].cProperties = 2
rgRowsetPropSet[0].guidPropertySet = DBPROPSET_ROWSET;

hr = pIOpenRowset->OpenRowset (NULL,
   &TableID,
   NULL,
   IID_IRowset,
   1,
   rgRowsetPropSet
   (IUnknown**)&pIRowset);

SQL Server yerel istemci odbc sürücüsü

SQL ServerYerel istemci odbc sürücüsü aracılığıyla eklemeler mars destekler SQLSetConnectAttr ve SQLGetConnectAttr fonksiyonlar. Olarak veya varsayılan değer olan sql_mars_enabled_no ile sql_mars_enabled_no kabul sql_copt_ss_mars_enabled eklenmiştir. Ayrıca, yeni bir bağlantı dizesi anahtar sözcüğü, Mars_Connection, eklenmiş. "Evet" kabul ettiği ya da "Hayır" değerleri; "Hayır" varsayılan değerdir.

SQL Server yerel istemci odbc sürücüsü örneği

Bu örnekte, SQLSetConnectAttr işlevi aramadan önce mars etkinleştirmek için kullanılan SQLDriverConnect veritabanına bağlanmak için işlevi. Sonra bağlantı yapılmış, bu iki SQLExecDirect işlevleri aynı bağlantıda iki ayrı sonuç kümeleri oluşturmak için adı verilir.

#include <sqlncli.h>

SQLSetConnectAttr(hdbc, SQL_COPT_SS_MARS_ENABLED, SQL_MARS_ENABLED_YES, SQL_IS_UINTEGER);
SQLDriverConnect(hdbc, hwnd, 
   "DRIVER=SQL Server Native Client 10.0;
   SERVER=(local);trusted_connection=yes;", SQL_NTS, szOutConn, 
   MAX_CONN_OUT, &cbOutConn, SQL_DRIVER_COMPLETE);

SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt1);
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt2);

// The 2nd execute would have failed with connection busy error if
// MARS were not enabled.
SQLExecDirect(hstmt1, L”SELECT * FROM Authors”, SQL_NTS);
SQLExecDirect(hstmt2, L”SELECT * FROM Titles”, SQL_NTS);

// Result set processing can interleave.
SQLFetch(hstmt1);
SQLFetch(hstmt2);

#include <sqlncli.h>

SQLSetConnectAttr(hdbc, SQL_COPT_SS_MARS_ENABLED, SQL_MARS_ENABLED_YES, SQL_IS_UINTEGER);
SQLDriverConnect(hdbc, hwnd, 
   "DRIVER=SQL Server Native Client 10.0;
   SERVER=(local);trusted_connection=yes;", SQL_NTS, szOutConn, 
   MAX_CONN_OUT, &cbOutConn, SQL_DRIVER_COMPLETE);

SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt1);
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt2);

// The 2nd execute would have failed with connection busy error if
// MARS were not enabled.
SQLExecDirect(hstmt1, L”SELECT * FROM Authors”, SQL_NTS);
SQLExecDirect(hstmt2, L”SELECT * FROM Titles”, SQL_NTS);

// Result set processing can interleave.
SQLFetch(hstmt1);
SQLFetch(hstmt2);

Ayrıca bkz.

Kavramlar

SQL Server varsayılan sonuç kümeleri kullanma

Diğer Kaynaklar

SQL Server yerel istemci özellikleri