Azure SQL Veritabanı’nda yüksek CPU sorunlarını tanılama ve giderme

Şunlar için geçerlidir: Azure SQL Veritabanı

Azure SQL Veritabanı, yüksek CPU kullanımının nedenlerini belirlemek ve iş yükü performansını iyileştirmek için yerleşik araçlar sağlar. Bu araçları kullanarak yüksek CPU kullanımı sırasında veya olay tamamlandıktan sonra tepkisel olarak sorun giderebilirsiniz. Ayrıca veritabanınız için zaman içinde CPU kullanımını proaktif olarak azaltmak için otomatik ayarlamayı etkinleştirebilirsiniz. Bu makalede, Azure SQL Veritabanındaki yerleşik araçlarla yüksek CPU tanılama ve sorunlarını giderme öğretilir ve CPU kaynaklarının ne zaman ekleneceği açıklanır.

Sanal çekirdek sayısını anlama

Yüksek CPU olayını tanılarken veritabanınızda kullanılabilen sanal çekirdek (sanal çekirdek) sayısını anlamak yararlı olur. Sanal çekirdek, mantıksal CPU'ya eşdeğerdir. Sanal çekirdek sayısı, veritabanınızda kullanılabilen CPU kaynaklarını anlamanıza yardımcı olur.

Azure portal sanal çekirdek sayısını belirleme

Sağlanan işlem katmanıyla sanal çekirdek tabanlı bir hizmet katmanı kullanıyorsanız Azure portal bir veritabanının sanal çekirdek sayısını hızla belirleyebilirsiniz. Bu durumda, Genel Bakış sayfasında veritabanı için listelenen fiyatlandırma katmanı sanal çekirdek sayısını içerir. Örneğin, veritabanının fiyatlandırma katmanı 'Genel Amaçlı: 5. Nesil, 16 sanal çekirdek' olabilir.

Sunucusuz işlem katmanındaki veritabanları için sanal çekirdek sayısı her zaman veritabanı için maksimum sanal çekirdek ayarına eşdeğer olacaktır. Sanal çekirdek sayısı, Genel Bakış sayfasında veritabanı için listelenen fiyatlandırma katmanında gösterilir. Örneğin, veritabanının fiyatlandırma katmanı 'Genel Amaçlı: Sunucusuz, 5. Nesil, 16 sanal çekirdek' olabilir.

DTU tabanlı satın alma modeli kapsamında bir veritabanı kullanıyorsanız, veritabanının sanal çekirdek sayısını sorgulamak için Transact-SQL kullanmanız gerekir.

Transact-SQL ile sanal çekirdek sayısını belirleme

Transact-SQL ile herhangi bir veritabanı için geçerli sanal çekirdek sayısını belirleyebilirsiniz. transact-SQL'i SQL Server Management Studio (SSMS), Azure Data Studio veya Azure portal sorgu düzenleyicisi (önizleme) ile Azure SQL Veritabanında çalıştırabilirsiniz.

Veritabanınıza bağlanın ve aşağıdaki sorguyu çalıştırın:

SELECT 
    COUNT(*) as vCores
FROM sys.dm_os_schedulers
WHERE status = N'VISIBLE ONLINE';
GO

Not

4. Nesil donanımı kullanan veritabanları için, içindeki sys.dm_os_schedulers görünür çevrimiçi zamanlayıcı sayısı, veritabanı oluşturma sırasında belirtilen ve Azure portal'de gösterilen sanal çekirdek sayısının iki katı olabilir.

Yüksek CPU'nun nedenlerini belirleme

Azure portal, SSMS'de Sorgu Deposu etkileşimli araçlarını ve SSMS ile Azure Data Studio'daki Transact-SQL sorgularını kullanarak CPU kullanımını ölçebilir ve analiz edebilirsiniz.

Azure portal ve Sorgu Deposu, tamamlanan sorgular için CPU ölçümleri gibi yürütme istatistiklerini gösterir. Devam eden bir veya daha fazla uzun süre çalışan sorgudan kaynaklanabilir geçerli bir yüksek CPU olayıyla karşılaşıyorsanız, Transact-SQL ile şu anda çalışan sorguları belirleyin.

Yeni ve olağan dışı yüksek CPU kullanımının yaygın nedenleri şunlardır:

  • İş yükünde büyük miktarda CPU kullanan yeni sorgular.
  • Düzenli olarak çalıştırılan sorguların sıklığındaki artış.
  • Parametreye duyarlı plan (PSP) sorunları nedeniyle oluşan ve bir veya daha fazla sorgunun daha fazla CPU kullanmasına neden olan sorgu planı regresyonu.
  • Sorgu planlarının derlenmesinde veya yeniden derlenmesinde önemli artış.
  • Sorguların aşırı paralellik kullandığı veritabanları.

Yüksek CPU olayınıza neyin neden olduğunu anlamak için veritabanınızda yüksek CPU kullanımının ne zaman gerçekleştiğini ve o sırada CPU kullanan en çok kullanılan sorguları belirleyin.

Incelemek:

Not

Azure SQL Veritabanı yüksek kullanılabilirlik ve olağanüstü durum kurtarma, veritabanı yedekleme ve geri yükleme, izleme, Sorgu Deposu, otomatik ayarlama gibi temel hizmet özelliklerini uygulamak için işlem kaynakları gerektirir. Bu işlem kaynaklarının kullanımı, düşük sanal çekirdek sayısına sahip veritabanlarında veya yoğun elastik havuzlardaki veritabanlarında özellikle fark edilebilir. daha fazla bilgi için bkz. Azure SQL Veritabanında kaynak yönetimi.

Veritabanınız tarafından zaman içinde kullanılan kullanılabilir CPU yüzdesi de dahil olmak üzere çeşitli CPU ölçümlerini izlemek için Azure portal kullanın. Azure portal, CPU ölçümlerini veritabanınızın Sorgu Deposu'ndaki bilgilerle birleştirir ve bu sayede belirli bir zamanda veritabanınızda cpu kullanan sorguları belirleyebilirsiniz.

CPU yüzdesi ölçümlerini bulmak için bu adımları izleyin.

  1. Azure portal veritabanına gidin.
  2. Soldaki menüden Akıllı Performans'ın altında Sorgu Performansı İçgörüleri'ni seçin.

Sorgu Performansı İçgörüleri'nin varsayılan görünümünde 24 saatlik veriler gösterilir. CPU kullanımı, veritabanı için kullanılan toplam kullanılabilir CPU yüzdesi olarak gösterilir.

Bu dönemde çalıştırılan ilk beş sorgu, CPU kullanım grafiğinin üzerindeki dikey çubuklarda görüntülenir. Grafikte bir zaman bandı seçin veya belirli zaman aralıklarını keşfetmek için Özelleştir menüsünü kullanın. Gösterilen sorgu sayısını da artırabilirsiniz.

Azure portal Sorgu Performansı İçgörüleri'ni gösteren ekran görüntüsü.

Sorgunun ayrıntılarını açmak için yüksek CPU gösteren her sorgu kimliğini seçin. Ayrıntılar, sorgu metninin yanı sıra sorgunun performans geçmişini içerir. Son zamanlarda sorgu için CPU'nun arttığını inceleyin.

Aşağıdaki bölümde Sorgu Deposu kullanarak sorgu planını daha fazla araştırmak için sorgu kimliğini not alın.

Azure portal tanımlanan en önemli sorgular için sorgu planlarını gözden geçirin

SSMS'nin etkileşimli Sorgu Deposu araçlarında sorgu kimliğini kullanarak sorgunun zaman içindeki yürütme planını incelemek için bu adımları izleyin.

  1. SSMS’i açın.
  2. Nesne Gezgini'da Azure SQL Veritabanınıza bağlanın.
  3. Nesne Gezgini'de veritabanı düğümünü genişletme
  4. Sorgu Deposu klasörünü genişletin.
  5. İzlenen Sorgular bölmesini açın.
  6. Ekranın sol üst kısmındaki İzleme sorgusu kutusuna sorgu kimliğini girin ve Enter tuşuna basın.
  7. Gerekirse, zaman aralığını yüksek CPU kullanımının gerçekleştiği zamana uyacak şekilde ayarlamak için Yapılandır'ı seçin.

Sayfada, en son 24 saat içinde sorgu için yürütme planları ve ilgili ölçümler gösterilir.

Transact-SQL ile şu anda çalışan sorguları belirleme

Transact-SQL, şu anda çalışan sorguları şu ana kadar kullandıkları CPU süresiyle tanımlamanızı sağlar. Transact-SQL'i veritabanınızdaki en son CPU kullanımını, CPU'ya göre en çok kullanılan sorguları ve en sık derlenen sorguları sorgulamak için de kullanabilirsiniz.

CPU ölçümlerini SQL Server Management Studio (SSMS), Azure Data Studio veya Azure portal sorgu düzenleyicisi (önizleme) ile sorgulayabilirsiniz. SSMS veya Azure Data Studio kullanırken yeni bir sorgu penceresi açın ve bunu (ana veritabanına değil) veritabanınıza bağlayın.

Aşağıdaki sorguyu yürüterek CPU kullanımı ve yürütme planlarıyla şu anda çalışan sorguları bulun. CPU süresi milisaniye cinsinden döndürülür.

SELECT
    req.session_id,
    req.status,
    req.start_time,
    req.cpu_time AS 'cpu_time_ms',
    req.logical_reads,
    req.dop,
    s.login_name,
    s.host_name,
    s.program_name,
    object_name(st.objectid,st.dbid) 'ObjectName',
    REPLACE (REPLACE (SUBSTRING (st.text,(req.statement_start_offset/2) + 1,
        ((CASE req.statement_end_offset    WHEN -1    THEN DATALENGTH(st.text) 
        ELSE req.statement_end_offset END - req.statement_start_offset)/2) + 1),
        CHAR(10), ' '), CHAR(13), ' ') AS statement_text,
    qp.query_plan,
    qsx.query_plan as query_plan_with_in_flight_statistics
FROM sys.dm_exec_requests as req  
JOIN sys.dm_exec_sessions as s on req.session_id=s.session_id
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as st
OUTER APPLY sys.dm_exec_query_plan(req.plan_handle) as qp
OUTER APPLY sys.dm_exec_query_statistics_xml(req.session_id) as qsx
ORDER BY req.cpu_time desc;
GO

Bu sorgu yürütme planının iki kopyasını döndürür. sütunu query_plansys.dm_exec_query_plan() yürütme planını içerir. Sorgu planının bu sürümü yalnızca satır sayısı tahminlerini içerir ve herhangi bir yürütme istatistiği içermez.

Sütun query_plan_with_in_flight_statistics bir yürütme planı döndürürse, bu plan daha fazla bilgi sağlar. sütun query_plan_with_in_flight_statistics , şu anda çalışan bir sorgunun şu ana kadar döndürdüğü satır sayısı gibi "in flight" yürütme istatistiklerini içeren sys.dm_exec_query_statistics_xml() verilerini döndürür.

Son bir saat için CPU kullanım ölçümlerini gözden geçirin

Aşağıdaki sorgu sys.dm_db_resource_stats , yaklaşık olarak son bir saat için 15 saniyelik aralıkların üzerindeki ortalama CPU kullanımını döndürür.

SELECT
    end_time,
    avg_cpu_percent,
    avg_instance_cpu_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC; 
GO

Yalnızca avg_cpu_percent sütuna odaklanmamak önemlidir. avg_instance_cpu_percent sütunu hem kullanıcı hem de iç iş yükleri tarafından kullanılan CPU'ları içerir. %100'e yakınsa avg_instance_cpu_percent CPU kaynakları doygunluğa sahip olur. Bu durumda, uygulama aktarım hızı yetersizse veya sorgu gecikme süresi yüksekse yüksek CPU sorunlarını gidermeniz gerekir.

daha fazla bilgi için bkz. Azure SQL Veritabanında kaynak yönetimi.

Daha fazla sorgu için sys.dm_db_resource_stats'deki örnekleri gözden geçirin.

CPU kullanımına göre en son 15 sorguyu sorgulama

Sorgu Deposu sorgular için CPU kullanımı da dahil olmak üzere yürütme istatistiklerini izler. Aşağıdaki sorgu, SON 2 saat içinde çalıştırılan ilk 15 sorguyu CPU kullanımına göre sıralanmış olarak döndürür. CPU süresi milisaniye cinsinden döndürülür.

WITH AggregatedCPU AS 
    (SELECT
        q.query_hash, 
        SUM(count_executions * avg_cpu_time / 1000.0) AS total_cpu_ms, 
        SUM(count_executions * avg_cpu_time / 1000.0)/ SUM(count_executions) AS avg_cpu_ms, 
        MAX(rs.max_cpu_time / 1000.00) AS max_cpu_ms, 
        MAX(max_logical_io_reads) max_logical_reads, 
        COUNT(DISTINCT p.plan_id) AS number_of_distinct_plans, 
        COUNT(DISTINCT p.query_id) AS number_of_distinct_query_ids, 
        SUM(CASE WHEN rs.execution_type_desc='Aborted' THEN count_executions ELSE 0 END) AS aborted_execution_count, 
        SUM(CASE WHEN rs.execution_type_desc='Regular' THEN count_executions ELSE 0 END) AS regular_execution_count, 
        SUM(CASE WHEN rs.execution_type_desc='Exception' THEN count_executions ELSE 0 END) AS exception_execution_count, 
        SUM(count_executions) AS total_executions, 
        MIN(qt.query_sql_text) AS sampled_query_text
    FROM sys.query_store_query_text AS qt
    JOIN sys.query_store_query AS q ON qt.query_text_id=q.query_text_id
    JOIN sys.query_store_plan AS p ON q.query_id=p.query_id
    JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id=p.plan_id
    JOIN sys.query_store_runtime_stats_interval AS rsi ON rsi.runtime_stats_interval_id=rs.runtime_stats_interval_id
    WHERE 
            rs.execution_type_desc IN ('Regular', 'Aborted', 'Exception') AND 
        rsi.start_time>=DATEADD(HOUR, -2, GETUTCDATE())
     GROUP BY q.query_hash), 
OrderedCPU AS 
    (SELECT *, 
    ROW_NUMBER() OVER (ORDER BY total_cpu_ms DESC, query_hash ASC) AS RN
    FROM AggregatedCPU)
SELECT *
FROM OrderedCPU AS OD
WHERE OD.RN<=15
ORDER BY total_cpu_ms DESC;
GO

Bu sorgu, sorgunun karma değerine göre gruplandırılır. Sütunda number_of_distinct_query_ids yüksek bir değer bulursanız, sık çalıştırılan bir sorgunun düzgün parametreleştirilip parametrelendirilmediğini araştırın. Parametreli olmayan sorgular her yürütmede derlenebilir ve bu da önemli CPU tüketir ve Sorgu Deposu'nun performansını etkiler.

Tek bir sorgu hakkında daha fazla bilgi edinmek için sorgu karması değerini not alın ve belirli bir sorgu karması için CPU kullanımını ve sorgu planını belirleme amacıyla kullanın.

Sorgu karması ile en sık derlenen sorguları sorgulama

Sorgu planını derlemek yoğun CPU kullanan bir işlemdir. Yeniden kullanılmak üzere bellekteki Veritabanı önbellek planlarını Azure SQL. Bazı sorgular parametrelendirilmediyse veya YENIDEN DERLENDİ ipuçları yeniden derlemeyi zorlarsa sık sık derlenebilir.

Sorgu Deposu sorguların derlenme sayısını izler. Sorgu Deposu'ndaki ilk 20 sorguyu derleme sayısına göre ve dakikada ortalama derleme sayısına göre belirlemek için aşağıdaki sorguyu çalıştırın:

SELECT TOP (20)
    query_hash,
    MIN(initial_compile_start_time) as initial_compile_start_time,
    MAX(last_compile_start_time) as last_compile_start_time,
    CASE WHEN DATEDIFF(mi,MIN(initial_compile_start_time), MAX(last_compile_start_time)) > 0
        THEN 1.* SUM(count_compiles) / DATEDIFF(mi,MIN(initial_compile_start_time), 
            MAX(last_compile_start_time)) 
        ELSE 0 
        END as avg_compiles_minute,
    SUM(count_compiles) as count_compiles
FROM sys.query_store_query AS q
GROUP BY query_hash
ORDER BY count_compiles DESC;
GO

Tek bir sorgu hakkında daha fazla bilgi edinmek için sorgu karması değerini not alın ve belirli bir sorgu karması için CPU kullanımını ve sorgu planını belirleme amacıyla kullanın.

Belirli bir sorgu karması için CPU kullanımını ve sorgu planını belirleme

Belirli query_hashbir için tek tek sorgu kimliğini, sorgu metnini ve sorgu yürütme planlarını bulmak için aşağıdaki sorguyu çalıştırın. CPU süresi milisaniye cinsinden döndürülür.

değişkeninin @query_hash değerini iş yükünüz için geçerli query_hash bir değerle değiştirin.

declare @query_hash binary(8);

SET @query_hash = 0x6557BE7936AA2E91;

with query_ids as (
    SELECT
        q.query_hash,
        q.query_id,
        p.query_plan_hash,
        SUM(qrs.count_executions) * AVG(qrs.avg_cpu_time)/1000. as total_cpu_time_ms,
        SUM(qrs.count_executions) AS sum_executions,
        AVG(qrs.avg_cpu_time)/1000. AS avg_cpu_time_ms
    FROM sys.query_store_query q
    JOIN sys.query_store_plan p on q.query_id=p.query_id
    JOIN sys.query_store_runtime_stats qrs on p.plan_id = qrs.plan_id
    WHERE q.query_hash = @query_hash
    GROUP BY q.query_id, q.query_hash, p.query_plan_hash)
SELECT qid.*,
    qt.query_sql_text,
    p.count_compiles,
    TRY_CAST(p.query_plan as XML) as query_plan
FROM query_ids as qid
JOIN sys.query_store_query AS q ON qid.query_id=q.query_id
JOIN sys.query_store_query_text AS qt on q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan AS p ON qid.query_id=p.query_id and qid.query_plan_hash=p.query_plan_hash
ORDER BY total_cpu_time_ms DESC;
GO

Bu sorgu, Sorgu Deponuzun tüm geçmişi boyunca yürütme planının query_hash her varyasyonu için bir satır döndürür. Sonuçlar toplam CPU süresine göre sıralanır.

Geçmiş CPU kullanımını izlemek için etkileşimli Sorgu Deposu araçlarını kullanma

Grafik araçlarını kullanmayı tercih ediyorsanız, SSMS'deki etkileşimli Sorgu Deposu araçlarını kullanmak için bu adımları izleyin.

  1. SSMS'yi açın ve Nesne Gezgini'da veritabanınıza bağlanın.
  2. Nesne Gezgini'de veritabanı düğümünü genişletme
  3. Sorgu Deposu klasörünü genişletin.
  4. Genel Kaynak Tüketimi bölmesini açın.

Bölmenin sol alt kısmında veritabanınızın geçen ayki toplam CPU süresi milisaniye cinsinden gösterilir. Varsayılan görünümde CPU süresi güne göre toplanır.

SSMS'de Sorgu Deposu'nun Genel Kaynak Tüketimi görünümünü gösteren ekran görüntüsü.

Farklı bir zaman aralığı seçmek için bölmenin sağ üst kısmındaki Yapılandır'ı seçin. Toplama birimini de değiştirebilirsiniz. Örneğin, belirli bir tarih aralığına ilişkin verileri görmeyi ve verileri saate göre toplamayı seçebilirsiniz.

CPU zamanına göre en çok sorguyu belirlemek için etkileşimli Sorgu Deposu araçlarını kullanma

Detaya gitmek ve belirli bir zaman aralığında çalışan sorguları görmek için grafikte bir çubuk seçin. En Çok Kaynak Tüketen Sorgular bölmesi açılır. Alternatif olarak, veritabanınızın altındaki Sorgu Deposu düğümünden En Çok Kaynak Tüketen Sorguları doğrudan Nesne Gezgini açabilirsiniz.

S S M S'de Sorgu Deposu için En Çok Kaynak Tüketen Sorgular bölmesini gösteren ekran görüntüsü.

Varsayılan görünümde , En Çok Kaynak Tüketen Sorgular bölmesinde Süreye (ms) göre sorgular gösterilir. Süre bazen CPU süresinden daha düşük olabilir: Paralellik kullanan sorgular genel sürelerinden çok daha fazla CPU süresi kullanabilir. Bekleme süreleri önemliyse süre CPU süresinden de uzun olabilir. Sorguları CPU zamanına göre görmek için bölmenin sol üst kısmındaki Ölçüm açılan listesini seçin ve CPU Zamanı(ms)'ni seçin.

Sol üst çeyrekteki her çubuk bir sorguyu temsil eder. Bu sorguyla ilgili ayrıntıları görmek için bir çubuk seçin. Ekranın sağ üst çeyreği, sorgu için Sorgu Deposu'nda kaç yürütme planı olduğunu gösterir ve bunları ne zaman yürütüldüklerine ve seçtiğiniz ölçümün ne kadarının kullanıldığına göre eşler. Ekranın alt yarısında hangi sorgu yürütme planının görüntüleneceğini denetlemek için her plan kimliğini seçin.

Not

Sorgu Deposu görünümlerini ve En İyi Kaynak Tüketicileri görünümünde görünen şekilleri yorumlamaya yönelik bir kılavuz için bkz. Sorgu Deposu ile ilgili en iyi yöntemler

CPU kullanımını azaltma

Sorun gidermenizin bir bölümü, önceki bölümde tanımlanan sorgular hakkında daha fazla bilgi edinilmesi gerekir. Dizinleri ayarlayarak, uygulama desenlerinizi değiştirerek, sorguları ayarlayarak ve veritabanınız için CPU ile ilgili ayarları yaparak CPU kullanımını azaltabilirsiniz.

Bu bölümdeki aşağıdaki stratejileri göz önünde bulundurun.

Otomatik dizin ayarlama ile CPU kullanımını azaltma

Etkili dizin ayarlama, birçok sorgu için CPU kullanımını azaltır. İyileştirilmiş dizinler, sorgunun mantıksal ve fiziksel okumalarını azaltır ve bu da sorgunun daha az çalışma yapması gerektiği anlamına gelir.

Azure SQL Veritabanı, birincil çoğaltmalardaki iş yükleri için otomatik dizin yönetimi sunar. Otomatik dizin yönetimi, iş yükünüzü izlemek ve veritabanınız için satır deposu disk tabanlı kümelenmemiş dizinleri iyileştirmek için makine öğrenmesini kullanır.

Azure portal dizin önerileri de dahil olmak üzere performans önerilerini gözden geçirin. Bu önerileri el ile uygulayabilir veya veritabanınızdaki yeni dizinlerin performansını oluşturmak ve doğrulamak için CREATE INDEX otomatik ayarlama seçeneğini etkinleştirebilirsiniz .

Otomatik plan düzeltmesi (zorlama planı) ile CPU kullanımını azaltma

Yüksek CPU olaylarının bir diğer yaygın nedeni de yürütme planı seçimi regresyonudur. Azure SQL Veritabanı, birincil çoğaltmalardaki iş yüklerindeki sorgu yürütme planlarındaki regresyonları belirlemek için zorlama planı otomatik ayarlama seçeneği sunar. Bu otomatik ayarlama özelliği etkinleştirildiğinde, Azure SQL Veritabanı sorgu yürütme planını zorlamanın yürütme planı regresyonu olan sorgular için güvenilir iyileştirilmiş performansa neden olup olmadığını test eder.

Veritabanınız Mart 2020'de oluşturulduysa , zorla planı otomatik ayarlama seçeneği otomatik olarak etkinleştirilmiştir. Veritabanınız bu zamandan önce oluşturulduysa , zorla planı otomatik ayarlama seçeneğini etkinleştirmek isteyebilirsiniz.

Dizinleri el ile ayarlama

En çok CPU kullanan sorgularınızın sorgu planlarını belirlemek için Yüksek CPU'nun nedenlerini belirleme başlığında açıklanan yöntemleri kullanın. Bu yürütme planları, sorgularınızı hızlandırmak için kümelenmemiş dizinleri tanımlamanıza ve eklemenize yardımcı olur.

Veritabanınızdaki her disk tabanlı kümelenmemiş dizin , depolama alanı gerektirir ve SQL altyapısı tarafından korunmalıdır. Mümkün olduğunda yeni dizinler eklemek yerine mevcut dizinleri değiştirin ve yeni dizinlerin CPU kullanımını başarıyla azalttığından emin olun. Kümelenmemiş dizinlere genel bakış için bkz. Kümelenmemiş Dizin Tasarım Yönergeleri.

Bazı iş yükleri için columnstore dizinleri sık okunan sorguların CPU'sunu azaltmak için en iyi seçenek olabilir. Bkz . Columnstore dizinleri - Columnstore dizinlerinin uygun olabileceği senaryolarla ilgili üst düzey öneriler için tasarım kılavuzu.

Uygulama, sorgu ve veritabanı ayarlarınızı yapma

En çok kullanılan sorgularınızı incelerken ,"geveleme" davranışı, parçalamadan yararlanabilecek iş yükleri ve yetersiz veritabanı erişim tasarımı gibi ayar yapmak için uygulama özelliklerini bulabilirsiniz. Yoğun okuma içeren iş yüklerinde, sık okunan verilerin ölçeğini genişletmek için uzun vadeli stratejiler olarak salt okunur sorgu iş yüklerini ve uygulama katmanı önbelleğe almayı boşaltmak için salt okunur çoğaltmaları göz önünde bulundurun.

Ayrıca, iş yükünüzde tanımlanan sorguları kullanarak en yüksek CPU'ya el ile ayarlamayı da seçebilirsiniz. El ile ayarlama seçenekleri arasında Transact-SQL deyimlerini yeniden yazma, Sorgu Deposu'ndaki planları zorlama ve sorgu ipuçları uygulama sayılabilir.

Sorguların bazen performans için en uygun olmayan yürütme planını kullandığı durumları belirlerseniz, parametreye duyarlı plan (PSP) sorunlarına yönelik sorgulardaki çözümleri gözden geçirin

Parametrelenmemiş sorguları çok sayıda planla tanımlarsanız, uzunluk ve duyarlık dahil olmak üzere parametre veri türlerini tam olarak bildirerek bu sorguları parametreleştirmeyi göz önünde bulundurun. Bu, sorguları değiştirerek, belirli bir sorgunun parametreleştirilmesini zorlamak için bir plan kılavuzu oluşturarak veya veritabanı düzeyinde zorlamalı parametreleştirme etkinleştirilerek yapılabilir.

Yüksek derleme oranlarına sahip sorguları tanımlarsanız, sık derlemeye neyin neden olduğunu belirleyin. Sık derlemenin en yaygın nedeni RECOMPILE ipuçlarıdır. Mümkün olduğunda ipucunun RECOMPILE ne zaman eklendiğini ve hangi sorunu çözmenin amaçlandığını belirleyin. Bir ipucu olmadan sık çalıştırılan sorgular için tutarlı performans sağlamak üzere alternatif bir RECOMPILE performans ayarlama çözümünün uygulanıp uygulanamayacağını araştırın.

Maksimum paralellik derecesini ayarlayarak CPU kullanımını azaltın

Maksimum paralellik derecesi (MAXDOP) ayarı, veritabanı altyapısında sorgu içi paralelliği denetler. Daha yüksek MAXDOP değerleri genellikle sorgu başına daha fazla paralel iş parçacığına ve daha hızlı sorgu yürütmeye neden olur.

Bazı durumlarda, eşzamanlı olarak çalışan çok sayıda paralel sorgu iş yükünü yavaşlatabilir ve yüksek CPU kullanımına neden olabilir. MaxDOP'un yüksek bir sayıya veya sıfıra ayarlandığı çok sayıda sanal çekirdek içeren veritabanlarında aşırı paralellik oluşma olasılığı yüksektir. MAXDOP sıfır olarak ayarlandığında, veritabanı altyapısı paralel iş parçacıkları tarafından kullanılacak zamanlayıcı sayısını toplam mantıksal çekirdek sayısına veya hangisi daha küçükse 64'e ayarlar.

Transact-SQL ile veritabanınız için maksimum paralellik derecesi ayarını belirleyebilirsiniz. SSMS veya Azure Data Studio ile veritabanınıza bağlanın ve aşağıdaki sorguyu çalıştırın:

SELECT 
    name, 
    value, 
    value_for_secondary, 
    is_value_default 
FROM sys.database_scoped_configurations
WHERE name=N'MAXDOP';
GO

VERITABANı düzeyinde MAXDOP yapılandırmasında küçük değişikliklerle denemeler yapmayı veya sorgu ipucu kullanarak tek tek sorunlu sorguları varsayılan olmayan bir MAXDOP kullanacak şekilde değiştirmeyi göz önünde bulundurun. Daha fazla bilgi için en yüksek paralellik derecesini yapılandırma örneklerine bakın.

CPU kaynakları ne zaman eklenir?

İş yükünüzün sorgularının ve dizinlerinin düzgün ayarlandığını veya performans ayarlamasının iç işlemler veya başka nedenlerle kısa vadede yapamayacağınız değişiklikler gerektirdiğini fark edebilirsiniz. Bu veritabanları için daha fazla CPU kaynağı eklemek yararlı olabilir. Veritabanı kaynaklarını minimum kapalı kalma süresiyle ölçeklendirin.

Sanal çekirdek satın alma modelini kullanarak sanal çekirdek sayısını veya veritabanları için donanım yapılandırmasını yapılandırarak Azure SQL Veritabanınıza daha fazla CPU kaynağı ekleyebilirsiniz.

DTU tabanlı satın alma modeli altında, hizmet katmanınızı artırabilir ve veritabanı işlem birimi (DTU) sayısını artırabilirsiniz. DTU, CPU, bellek, okuma ve yazma işlemleri için karma bir ölçüyü temsil eder. Sanal çekirdek satın alma modelinin avantajlarından biri, kullanılan donanım ve sanal çekirdek sayısı üzerinde daha ayrıntılı denetime izin vermesidir. Satın alma modelleri arasında geçiş yapmak için Azure SQL Veritabanını DTU tabanlı modelden sanal çekirdek tabanlı modele geçirebilirsiniz.

Sonraki adımlar

Aşağıdaki makalelerde veritabanı Azure SQL izleme ve performans ayarlama hakkında daha fazla bilgi edinin: