Aracılığıyla paylaş


Komutları Hazırlama

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

OLE DB sürücüsünü indirme

SQL Server için OLE DB Sürücüsü, tek bir komutun optimize edilmiş çoklu yürütülmesi için komut hazırlığını destekler; ancak komut hazırlama ek yük oluşturur ve tüketicinin komutu birden fazla kez çalıştırmak için bir komut hazırlanmasına gerek yoktur. Genel olarak, bir komut üç kez daha fazla uygulanacaksa hazırlanmalıdır.

Performans nedenleriyle, komut hazırlığı komut uygulanana kadar ertelenir. Bu, varsayılan davranıştır. Hazırlanan komuttaki hatalar, komut yürütülene veya bir meta özellik işlemi yapılana kadar bilinmez. SQL Server özelliğini SSPROP_DEFERPREPARE FALSE olarak ayarlamak bu varsayılan davranışı kapatabilir.

SQL Server'da, bir komut doğrudan (önceden hazırlanmadan) yürütüldüğünde, bir yürütme planı oluşturulur ve önbelleğe alınır. SQL ifadesi tekrar çalıştırılırsa, SQL Server yeni ifadeyi önbellekteki mevcut yürütme planıyla eşleştiren verimli bir algoritmaya sahiptir ve o ifade için yürütme planını yeniden kullanır.

Hazırlanmış komutlar için SQL Server, komut ilamlarının hazırlanması ve yürütülmesi için yerel destek sağlar. Bir ifade hazırladığınızda, SQL Server bir yürütme planı oluşturur, önbellekler ve bu yürütme planının bir tutamacını sağlayıcıya geri gönderir. Sağlayıcı bu kullanıcı adıyla ifadeyi defalarca çalıştırır. Hiçbir depolanmış prosedür oluşturulmaz. Çünkü tutucu, önbellekteki uygulama planıyla eşleştirmek yerine (doğrudan yürütme için olduğu gibi) SQL ifadesi için uygulama planını doğrudan tanımlar, bu yüzden ifadenin birkaç kez birden fazla kez çalıştırılacağını biliyorsanız, bir ifade hazırlamak doğrudan çalıştırmaktan daha verimlidir.

SQL Server 2005 (9.x) içinde, hazırlanan ifadeler geçici nesneler oluşturmak için kullanılamaz ve geçici tablolar gibi geçici nesneler oluşturan sistem depolanmış prosedürlere referans veremez. Bu prosedürler doğrudan uygulanmalıdır.

Bazı komutlar asla hazırlıklı olmamalı. Örneğin, SQL Server için saklanan prosedür yürütmesini belirten veya geçersiz metin içeren komutlar hazırlanmamalıdır.

Geçici bir depolanmış prosedür oluşturulursa, SQL Server için OLE DB Sürücüsü geçici olarak saklanan prosedürü çalıştırır ve sonuçları ifadenin kendisi yürütülmüş gibi geri döndürür.

Geçici olarak saklanan prosedür oluşturma, SQL Server için OLE DB Sürücüsü -specific başlatma özelliği SSPROP_INIT_USEPROCFORPREP tarafından kontrol edilir. Özellik değeri SSPROPVAL_USEPROCFORPREP_ON veya SSPROPVAL_USEPROCFORPREP_ON_DROP ise, SQL Server için OLE DB Sürücüsü bir komut hazırlandığında bir işlem oluşturmaya çalışır. Uygulama kullanıcısının yeterli SQL Server iznine sahip olması durumunda saklanan prosedür oluşturma başarılı olur.

Nadiren bağlantıyı kesen tüketiciler için, geçici depolanmış prosedürlerin oluşturulması, geçici nesnelerin oluşturulduğu SQL Server sistem veritabanı tempdb'nin önemli kaynaklarını gerektirebilir. SSPROP_INIT_USEPROCFORPREP değeri SSPROPVAL_USEPROCFORPREP_ ON olduğunda, SQL Server için OLE DB Sürücüsü tarafından oluşturulan geçici depolanmış prosedürler, komutu oluşturan oturumun SQL Server örneğiyle bağlantısını kaybetmesi durumunda bırakılır. Eğer bu bağlantı, veri kaynağı başlatma sırasında varsayılan bağlantı ise, geçici saklanan prosedür ancak veri kaynağı başlatılmadığında düşürülür.

SSPROP_INIT_USEPROCFORPREP değeri SSPROPVAL_USEPROCFORPREP_ON_DROP olduğunda, aşağıdaki işlemlerden biri gerçekleştiğinde SQL Server için OLE DB Sürücüsü bırakılır:

  • Tüketici, yeni bir komut belirtmek için ICommandText::SetCommandText kullanır.

  • Tüketici, artık komut metnine ihtiyaç duymadığını belirtmek için ICommandPrepare::Unprepare kullanır.

  • Tüketici, geçici depolanmış prosedür kullanarak komut nesnesine tüm referansları serbest bırakır.

Bir komut nesnesinin tempdb'de en fazla bir geçici saklanan prosedürü vardır. Mevcut herhangi bir geçici saklanan prosedür, belirli bir komut nesnesinin mevcut komut metnini temsil eder.

Ayrıca Bkz.

Komutlar