Aracılığıyla paylaş


Sorgu Profili Oluşturma Altyapısı

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

SQL Server Veritabanı Altyapısı, sorgu yürütme planlarıyla ilgili çalışma zamanı bilgilerine erişim sağlar. Bir performans sorunu oluştuğunda en önemli eylemlerden biri, yürütülen iş yükü ve kaynak kullanımının nasıl yönlendirildiğini tam olarak anlamaktır. Bu nedenle , gerçek yürütme planına erişim önemlidir.

Gerçek bir sorgu planının kullanılabilirliği için sorgu tamamlama önkoşulu olsa da canlı sorgu istatistikleri, veriler bir sorgu planı işlecinden diğerine akarken sorgu yürütme işlemiyle ilgili gerçek zamanlı içgörüler sağlayabilir. Canlı sorgu planı, genel sorgu ilerleme durumunu ve üretilen satır sayısı, geçen süre, işleç ilerlemesi gibi işleç düzeyinde çalışma zamanı yürütme istatistiklerini görüntüler. Bu veriler sorgunun tamamlanmasını beklemeye gerek kalmadan gerçek zamanlı olarak kullanılabilir olduğundan, bu yürütme istatistikleri uzun süre çalışan sorgular ve süresiz çalıştırılan ve hiç bitmeyen sorgular gibi sorgu performansı sorunlarının hatalarını ayıklamak için son derece kullanışlıdır.

Standart sorgu yürütme istatistikleri profil oluşturma altyapısı

Satır sayısı, CPU ve G/Ç kullanımı gibi yürütme planları hakkında bilgi toplamak için sorgu yürütme istatistikleri profil altyapısının veya standart profil oluşturmanın etkinleştirilmesi gerekir. Hedef oturum için yürütme planı bilgilerini toplamak için aşağıdaki yöntemler standart profil oluşturma altyapısını kullanır:

Note

SQL Server Management Studio'da Canlı Sorgu İstatistiklerini Ekle düğmesini seçtiğinizde standart profil oluşturma altyapısı kullanılır. SQL Server'ın sonraki sürümlerinde , basit profil oluşturma altyapısı etkinleştirildiyse Etkinlik İzleyicisi aracılığıyla görüntülendiğinde veya doğrudan sys.dm_exec_query_profiles DMV sorgulandığında standart profil oluşturma yerine canlı sorgu istatistikleri tarafından kullanılır.

Tüm oturumlar için yürütme planı bilgilerini genel olarak toplamak için aşağıdaki yöntemler standart profil oluşturma altyapısını kullanır:

Olayı kullanan query_post_execution_showplan genişletilmiş bir olay oturumu çalıştırılırken, etkinlikizleyicisi kullanılarak veya doğrudan DMV'yi sorgulayarak tüm oturumlar için canlı sorgu istatistiklerini etkinleştiren sys.dm_exec_query_profiles DMV de doldurulur. Daha fazla bilgi için bkz. Canlı Sorgu İstatistikleri.

Hafif sorgu yürütme istatistikleri profilleme altyapısı

SQL Server 2014 (12.x) SP2 ve SQL Server 2016 (13.x) ile başlayarak, yeni bir hafif sorgu yürütme istatistikleri profilleme altyapısı, yani hafif profilleme tanıtıldı.

Note

Yerel olarak derlenmiş saklı yordamlar basit profil oluşturma ile desteklenmez.

Basit sorgu yürütme istatistikleri profil oluşturma altyapısı v1

Şunlar için geçerlidir: SQL Server 2014 (12.x) SP2 ile SQL Server 2016 (13.x) arasında.

SQL Server 2014 (12.x) SP2 ve SQL Server 2016 (13.x) ile başlayarak, basit profil oluşturmanın kullanıma sunulmasıyla yürütme planları hakkında bilgi toplamaya yönelik performans yükü azaltıldı. Standart profil oluşturmanın aksine, basit profil oluşturma CPU çalışma zamanı bilgilerini toplamaz. Ancak, hafif profil oluşturma hala satır sayısını ve Girdi/Çıktı kullanım bilgilerini toplar.

Basit profil oluşturma kullanan yeni query_thread_profile bir genişletilmiş olay da tanıtıldı. Bu uzatılmış etkinlik, her operatör için yürütme istatistiklerini kullanıma sunarak her düğüm ve iş parçacığının performansı hakkında daha fazla içgörü sağlamaya olanak tanır. Bu genişletilmiş olayı kullanan örnek oturum aşağıdaki örnekte olduğu gibi yapılandırılabilir:

CREATE EVENT SESSION [NodePerfStats] ON SERVER
ADD EVENT sqlserver.query_thread_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Note

Sorgu profili oluşturmanın performans yükü hakkında daha fazla bilgi için Developers Choice: Query progress - her zaman, her yerdeblog gönderisine bakın.

Olayı kullanan query_thread_profile genişletilmiş bir olay oturumu çalıştırırken , sys.dm_exec_query_profiles DMV de etkinlik İzleyicisi kullanılarak veya doğrudan DMV'yi sorgulayarak tüm oturumlar için canlı sorgu istatistiklerini etkinleştiren basit profil oluşturma kullanılarak doldurulur.

Basit sorgu yürütme istatistikleri profil oluşturma altyapısı v2

Şunlar için geçerlidir: SQL Server 2016 (13.x) SP1 ile SQL Server 2017 (14.x) arasında.

SQL Server 2016 (13.x) SP1, minimum ek yükle basit profil oluşturmanın düzeltilmiş bir sürümünü içerir. Hafif profil oluşturma, daha önce Uygulandığı sürümler için izleme bayrağı 7412 kullanılarak tüm sistemlerde de etkinleştirilebilir. Uçuş içi istekler için sorgu yürütme planını döndürmek için yeni bir DMF sys.dm_exec_query_statistics_xml kullanıma sunulmuştur.

SQL Server 2016 (13.x) SP2 CU3 ve SQL Server 2017 (14.x) CU11'den başlayarak, basit profil oluşturma genel olarak etkinleştirilmediyse, yeni USE HINT sorgu ipucu bağımsız değişkeni QUERY_PLAN_PROFILE tüm oturumlarda sorgu düzeyinde basit profil oluşturmayı etkinleştirmek için kullanılabilir. Bu yeni ipucunu içeren bir sorgu tamamlandığında, genişletilmiş olaya benzer query_plan_profile gerçek bir yürütme planı XML'i sağlayan yeni query_post_execution_showplan bir genişletilmiş olay da çıkışlanır.

Note

Genişletilmiş query_plan_profile olay, sorgu ipucu kullanılmasa bile basit profil oluşturmayı da kullanır.

Genişletilmiş olayı kullanan query_plan_profile örnek oturum aşağıdaki örnekte olduğu gibi yapılandırılabilir:

CREATE EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
ADD EVENT sqlserver.query_plan_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Basit sorgu yürütme istatistikleri profil oluşturma altyapısı v3

için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler ve Azure SQL Veritabanı

SQL Server 2019 (15.x) ve Azure SQL Veritabanı, tüm yürütmeler için satır sayısı bilgilerini toplayan basit profil oluşturmanın yeni düzeltilmiş bir sürümünü içerir. Basit profil oluşturma, SQL Server 2019 (15.x) ve Azure SQL Veritabanı'nda varsayılan olarak etkindir. SQL Server 2019 (15.x) ve sonraki sürümlerinde izleme bayrağı 7412'nin hiçbir etkisi yoktur. Basit profil oluşturma, veritabanı LIGHTWEIGHT_QUERY_PROFILING kullanılarak veritabanı düzeyinde devre dışı bırakılabilir: ALTER DATABASE SCOPED CONFIGURATION SET LIGHTWEIGHT_QUERY_PROFILING = OFF;.

Çoğu sorgu için bilinen son gerçek yürütme planının eşdeğerini döndürmek için yeni bir DMF sys.dm_exec_query_plan_stats tanıtılır veson sorgu planı istatistikleri olarak adlandırılır. Son sorgu planı istatistikleri, veritabanı LAST_QUERY_PLAN_STATS kullanılarak veritabanı düzeyinde etkinleştirilebilir: ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;.

Yeni query_post_execution_plan_profile bir genişletilmiş olay, standart profil oluşturma kullanan sürümünden farklı olarak query_post_execution_showplanbasit profil oluşturma temelinde gerçek bir yürütme planının eşdeğerini toplar. SQL Server 2017 (14.x), CU14 ile başlayan bu olayı da sunar. Genişletilmiş olayı kullanan query_post_execution_plan_profile örnek oturum aşağıdaki örnekte olduğu gibi yapılandırılabilir:

CREATE EVENT SESSION [PerfStats_LWP_All_Plans] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Örnek 1 - Standart profilleme kullanılarak Genişletilmiş Etkinlik oturumu

CREATE EVENT SESSION [QueryPlanOld] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan
    (
    ACTION (sqlos.task_time,
            sqlserver.database_id,
            sqlserver.database_name,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.sql_text)
    )
ADD TARGET package0.event_file
    (
    SET filename = N'C:\Temp\QueryPlanStd.xel'
    )
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Örnek 2 - Hafif profil oluşturma kullanarak genişletilmiş Olay oturumu

CREATE EVENT SESSION [QueryPlanLWP] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
    (
    ACTION (sqlos.task_time,
            sqlserver.database_id,
            sqlserver.database_name,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.sql_text)
    )
ADD TARGET package0.event_file
    (
    SET filename = N'C:\Temp\QueryPlanLWP.xel'
    )
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Sorgu Profili Oluşturma Altyapısı kullanım kılavuzu

Aşağıdaki tabloda, hem genel olarak (sunucu düzeyinde) hem de tek bir oturumda standart profil oluşturmayı veya basit profil oluşturmayı etkinleştirme eylemleri özetlenmiştir. Ayrıca eylemin erişilebilir olduğu sürümün en eski halini de içerir.

Scope Standart Profil Oluşturma Basit Profil Oluşturma
Global XE ile query_post_execution_showplan Genişletilmiş Olay oturumu; SQL Server 2012 'den (11.x) başlayarak İzleme bayrağı 7412; SQL Server 2016 (13.x) SP1'den başlayarak
Global İzleme olayıyla Showplan XML SQL İzleme ve SQL Server Profiler XE ile query_thread_profile Genişletilmiş Olay oturumu; SQL Server 2014 (12.x) SP2'den başlayarak
Global Mevcut Değil XE ile query_post_execution_plan_profile Genişletilmiş Olay oturumu; SQL Server 2017 (14.x) CU14 ve SQL Server 2019 (15.x) ile başlayarak
Session SET STATISTICS XML ON komutunu kullanma QUERY_PLAN_PROFILE XE ile genişletilmiş olay oturumuyla birlikte sorgu ipucunu query_plan_profile kullanın; SQL Server 2016 (13.x) SP2 CU3 ve SQL Server 2017 (14.x) CU11 ile başlayarak
Session SET STATISTICS PROFILE ON komutunu kullanma Mevcut Değil
Session SSMS'de Canlı Sorgu İstatistikleri düğmesini seçin; SQL Server 2014 (12.x) SP2'den başlayarak Mevcut Değil

Remarks

Important

sys.dm_exec_query_statistics_xml başvuran bir izleme saklı yordamı yürütülürken olası bir rastgele erişim ihlali yaşanabileceğinden, SQL Server 2016 (13.x) ve SQL Server 2017'de (14.x) KB 4078596'nın yüklü olduğundan emin olun.

Basit profil oluşturma v2 ve düşük yükünden başlayarak, henüz CPU sınırı olmayan tüm sunucular sürekli olarak basit profil oluşturma çalıştırabilir ve veritabanı uzmanlarının herhangi bir zamanda çalışan yürütmeye (örneğin Etkinlik İzleyicisi'ni kullanarak veya doğrudan sorgulayarak sys.dm_exec_query_profiles) bağlanmalarına ve çalışma zamanı istatistikleriyle sorgu planını almalarına olanak tanır.

Sorgu profili oluşturmanın performans yükü hakkında daha fazla bilgi için Developers Choice: Query progress - her zaman, her yerdeblog gönderisine bakın.

Basit profil oluşturma kullanan Genişletilmiş Olaylar, standart profil oluşturma altyapısının zaten etkin olması durumunda standart profil oluşturma bilgilerini kullanır. Örneğin, query_post_execution_showplan kullanan genişletilmiş bir olay oturumu çalıştırılır ve query_post_execution_plan_profile kullanan başka bir oturum başlatılır. İkinci oturum hala standart profil oluşturma bilgilerini kullanır.

Note

SQL Server 2017'de (14.x), Basit Profil Oluşturma varsayılan olarak kapalıdır, ancak bağlı query_post_execution_plan_profile olan Genişletilmiş Olay izleme başlatıldığında etkinleştirilir ve izleme durdurulduğunda yeniden devre dışı bırakılır. Sonuç olarak, bir SQL Server 2017 (14.x) örneğinde temel alan query_post_execution_plan_profile Genişletilmiş Olay izlemeleri sık sık başlatılır ve durdurulursa, yinelenen etkinleştirme/devre dışı bırakma ek yükünü önlemek için basit profil oluşturmayı izleme bayrağı 7412 ile genel düzeyde etkinleştirmeniz gerekir.