Aracılığıyla paylaş


use plan sorgu ipucu imleçler ile sorgular kullanma

imleç isteklerini belirtin sorgularıyla kullanma plan sorgu ipucu kullanabilirsiniz.Aşağıdaki tablo imleç planı kullanmak API sunucu imleçler için desteklenen kaydırma seçenekleri birleşimlerini gösterir Transact-SQL kullanır, imleçleri Transact-SQL sözdizimi, genişletilmiş ve Transact-SQL imleçler kullanan ISO sözdizimi.

Kaydırma seçeneği (API sunucu imleçler için @ scrollopt değeri)

KULLANIM için API sunucu imleçler desteklenen planla

KULLANMAK için genişletilmiş Transact-sql sözdizimi kullanan Transact-sql imleçler desteklenen planla

KULLANIN ISO sözdizimi kullanan Transact-sql imleçler desteklenen planla

STATİK

Y

Y

Uygulanabilir değil

DİNAMİK

N

N

Uygulanabilir değil

ANAHTAR KÜMESİ

N

N

Uygulanabilir değil

FORWARD_ONLY

N

N

Uygulanabilir değil

FAST_FORWARD

Y

Y

Uygulanabilir değil

FORWARD_ONLY STATİK

Uygulanabilir değil

Y

Uygulanabilir değil

DUYARLI

Uygulanabilir değil

Uygulanabilir değil

Y

İmleçler ile sorgular, sunulan işaretçiler sorgularla ilişkili tek planı yerine ilişkili iki sorgu planları vardır.Bu planlar, Aç, getirme veya imleç türüne bağlı olarak, yenileme türü olabilir.

Bir imleç için iki planlardan birini doğrudan giriş sorgudan oluşturulur ve diğer plan otomatik olarak oluşturulur.Bu planlar sırasıyla giriş sorgu planını ve oluşturulan planı denir.Aşağıdaki tablo fast_forward ve statik (küçük harf duyarlı) imleçler için üretilen planlarını gösterir.

İmleç türü

Açık imleç planı

imleç planı Getir

imleç planı yenileme

FAST_FORWARD

Uygulanabilir değil

Giriş sorgu

Üretilen

STATİK

Giriş sorgu

Üretilen

Uygulanabilir değil

xml sorgu planları imleç sorgu için bazen hem planları içeren tek bir xml belge görünür.Bu planlar planları iki bölümü adı verilir.

Bir imleç planları da bazen iki ayrı planları görünür.Örneğin, bir SQL Server Profiler statik bir API izlemesi veya Transact-SQL imleç sorgu planı, bu iki farklı görebilirsiniz Showplan için sorgu xml derle olayları oluşturulur.Yalnızca bir giriş sorgu (Aç) planı plan Bu konuda zorlamak için önemli durum.Giriş sorgu planı kullanmak planı hint içinde kullanmanız gerekir.Basit oluşturulan (fetch) planı da oluşturulur ancak onu değil gerekli veya izin verilen, plan zorlamak için.imleç sorgu eşleşen satır küme ilk toplayan planı olduğu için (açık) giriş sorgu planını tanıyabilir.

Önemli notÖnemli

Bir imleç sorgu için ya da tam tersi bir noncursor plan zorlamak deneyin.Bunu imleç sorgu ve sorgu noncursor aynı bile plan zorlamak başarısız olabilir.

İmleç planları tanımlayan xml sorgu planı çıkışları aşağıdaki türleri, belirli bir imleç türleri için use plan ile bir plan zorlamak için kullanılabilir:

  • Bir imleç için iki bölümü planı

  • imleç için bir tek parça giriş sorgu planı

Size zorla imleç planı bir xml sorgu planı elde etmek için aşağıdaki mekanizmalardan herhangi biri üzerinden alınan bir plan olabilir:

  • xml tabanlı SQL Server Profiler izleme olayları.Bu olaylar dahil edebilirsiniz showplan xml, Showplan için sorgu xml derle, ve Showplan xml istatistikleri profil.

  • SET SHOWPLAN_XML ON

  • İSTATİSTİK XML EDER

  • Dinamik yönetimi görünümler ve İşlevler, aşağıdaki sorgu gibi:

    SELECT *
    FROM sys.dm_exec_query_stats 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
    

API Server imleç kullanımı uygulamalar tarafından gözleme

db Kitaplığı'nı, ado, odbc ve oledb uygulamaları sık ile etkileşimine SQL Server kullanarak API sunucu imleçler.You can see the calls that are submitted to API server cursor stored procedures by examining the SQL Server Profiler RPC:Starting events when an application that is built by using one of these interfaces is running.

Örnek: Bir sorguyu bir imleçle bir Plan zorlama

Bu örnek ile kurduğu bir uygulama kullanarak varsayar AdventureWorks2008R2 kullanarak odbc İmleçler ve veritabanı için gönderilen sorgu planı zorlamak istediğiniz SQL Server bir API kullanarak sunucu imleci yordamına girildi.Toplamak yoluyla gönderilen sorgu için bir planı plan zorlamak için bir imleç yordam API ve o sorgu için plan zorlamak için bir plan Kılavuzu oluşturun.Sorguyu yeniden çalıştırın ve onu zorla olduğunu doğrulamak için planı incelemek uygulama vardır.

1. Adım: Planı toplamak

Start bir SQL Server Profiler İzleme ve seçin showplan xml ve rpc: Başlangıç olayları.Uygulamanın olması yürütmek plan zorlamak istediğiniz sorguyu.' I rpc: Başlangıç oluşturulan bir olay.Varsayalım rpc: Başlangıç olay aşağıdaki metin verileri vardır:

DECLARE @p1 int
SET @p1=-1
DECLARE @p2 int
SET @p2=0
DECLARE @p5 int
SET @p5=8
DECLARE @p6 int
SET @p6=8193
DECLARE @p7 int
SET @p7=0
EXEC sp_cursorprepexec @p1 OUTPUT,@p2 OUTPUT,NULL,N'SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d WHERE h.SalesOrderID = d.SalesOrderID AND h.OrderDate BETWEEN ''20030101'' AND ''20040101''',@p5 OUTPUT,@p6 OUTPUT,@p7 OUTPUT
SELECT @p1, @p2, @p5, @p6, @p7

Sağ tıklatarak sorgu planı toplamak showplan xml bağımsız değişken olarak görüntülenen sorgu giriş sorgu planını içeren İzleme olayısp_cursorprepexec Yukarıdaki deyim ve ardından Olay Veri Ayıkla.Olay verileri (xml gösterim planı) bir dosyaya kaydetmek CursorPlan.SQLPlan Masaüstü.Dosyayı kopyalamak CursorPlan.SQLPlan için CursorPlan.txt.De SQL Server Management Studio, açık CursorPlan.txt bir düzenleyici penceresinde.Daha sonra saat kazanmak için kullanmak Bul ve Değiştir her tek tırnak işareti koymak (') plandaki dört tek tırnak işareti ('''').Kaydet CursorPlan.txt.

2. Adım: Plan zorlamak için Plan kılavuzu oluşturma

Yazma ve yürütme aşağıdaki bir plan kılavuz oluşturmak sp_create_plan_guide deyim plan zorlamak için.Bu plan Kılavuzu tanım önceki adımda use plan sorgu ipucu plan Kılavuzu'nda yakalanan xml planı içerir.

Bu plan Kılavuzu tanım yazarken, içeriğini yapıştırmak CursorPlan.txt uygun pozisyon @hints bağımsız değişkeni (hemen sonrasına OPTION(USE PLAN N'').

exec sp_create_plan_guide 
@name = N'CursorGuide1',
@stmt = N'SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d WHERE h.SalesOrderID = d.SalesOrderID AND h.OrderDate BETWEEN ''20030101'' AND ''20040101''',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION(USE PLAN N''<ShowPlanXML xmlns=''''https://schemas.microsoft.com/sqlserver/2004/07/showplan'''' Version=''''0.5'''' Build=''''9.00.1116''''><BatchSequence><Batch><Statements><StmtSimple>
   …
</StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>'')'

3. Adım: Sorguyu çalıştırmak ve Plan kılavuzu için geçerli olduğunu doğrulayın

Sorguyu yeniden çalıştırın ve kullanarak kendi xml yürütme planı toplamak uygulama sahip xml showplan olay SQL Server Profiler.

' I xml showplan olay planı için.Plan, plan Kılavuzu'nda zorunlu olduğunu göreceksiniz.

İmleç parametreleştirilmiş sorguları

If the API server cursor query that you want to create a plan guide for is parameterized, make sure you include both the statement string and the parameter definition string you see in the SQL Server Profiler RPC:Starting event in the plan guide definition.Parametre tanımına dize kullanılarak gönderilen parametreleştirilmiş sorguları ile olduğu gibi Ayrıca, başarılı bir plan Kılavuzu eşleştirme elde etmek için gerekli sp_executesql.