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. Yüksek CPU kullanımı sırasında veya olay tamamlandıktan sonra reaktif olarak sorun gidermek için bu araçları kullanabilirsiniz. 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ı'daki yerleşik araçlarla yüksek CPU'nun tanılaması 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ı anlamanız 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ında sanal çekirdek sayısını belirleme

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

Sunucusuz işlem katmanındaki veritabanları için sanal çekirdek sayısı her zaman veritabanının en yüksek 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, standart seri (5. Nesil), 16 sanal çekirdek" olabilir.

DTU tabanlı satın alma modeli altı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 ile Azure SQL Veritabanı karşı çalıştırabilirsiniz.

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

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

Yüksek CPU'nun nedenlerini belirleme

Azure portalını, 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çüp analiz edebilirsiniz.

Azure portalı ve Sorgu Deposu tamamlanmış 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 regresyon da dahil olmak üzere sorgu planı regresyonu, bir veya daha fazla sorgunun daha fazla CPU kullanmasına neden olur.
  • 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 oluştuğunu 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ını 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. Azure SQL Veritabanı'de kaynak yönetimi hakkında daha fazla bilgi edinin.

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ını 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 hangi sorguların CPU tüketileceğini belirleyebilirsiniz.

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

  1. Azure portalında veritabanına gidin.
  2. Soldaki menüde 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 grubu 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.

Screenshot shows Query Performance Insight in the Azure portal.

Sorgunun ayrıntılarını açmak için yüksek CPU gösteren her sorgu kimliğini seçin. Ayrıntılar, sorgunun performans geçmişiyle birlikte sorgu metnini içerir. Son zamanlarda sorgu için CPU'nun artmış olup olmadığı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ında tanımlanan en çok kullanılan sorgular için sorgu planlarını gözden geçirme

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ı Bağlan.
  3. Nesne Gezgini'da veritabanı düğümünü genişletin.
  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 oluştuğu 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 ana kadar kullandıkları CPU süresiyle şu anda çalışan sorguları belirlemenize olanak tanır. Transact-SQL kullanarak veritabanınızdaki son CPU kullanımını, CPU'ya göre en çok kullanılan sorguları ve en sık derlenen sorguları sorgulayabilirsiniz.

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

Aşağıdaki sorguyu yürüterek ŞU anda CPU kullanımı ve yürütme planlarıyla ç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ütunuquery_plan, sys.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 yürütme istatistikleri 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ütunquery_plan_with_in_flight_statistics, şu anda çalışan bir sorgu tarafından şu ana kadar döndürülen gerçek satır sayısı gibi "uçuşta" 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çirme

aşağıdaki sorgu sys.dm_db_resource_stats , yaklaşık 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.

Azure SQL Veritabanı'de kaynak yönetimi hakkında daha fazla bilgi edinin.

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 parametrelendirilip parametrelendirilmediğini araştırın. Parametrelenmemiş 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ı belirlemek üzere kullanın.

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

Sorgu planını derlemek yoğun CPU kullanan bir işlemdir. Yeniden kullanmak için bellekteki önbellek planlarını Azure SQL Veritabanı. 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'nda derleme sayısına göre ilk 20 sorguyu ve dakika başına ortalama derleme sayısını 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ı belirlemek üzere kullanın.

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

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 veritabanınıza bağlanın.
  2. Nesne Gezgini'da 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.

Screenshot shows the Overall Resource Consumption view of Query Store in SSMS.

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 süresine göre en çok kullanılan sorguları 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, doğrudan Nesne Gezgini veritabanınızın altındaki Sorgu Deposu düğümünden En Çok Kaynak Tüketen Sorgular'ı açabilirsiniz.

Screenshot shows the Top Resource Consuming Queries pane for Query Store in S S M S.

Varsayılan görünümde, En Çok Kaynak Tüketen Sorgular bölmesi, Süreye (ms) göre sorguları gösterir. 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 yüksek olabilir. Sorguları CPU süresine 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ğinde bu sorgu için Sorgu Deposu'nda kaç yürütme planı olduğu gösterilir ve bu planlar yürütülürken ve seçtiğiniz ölçümün ne kadarının kullanıldığına göre eşlenir. 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 yorumlama kılavuzu 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ümde 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 genellikle 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ı olmayan dizinleri iyileştirmek için makine öğrenmesini kullanır.

Azure portalında dizin önerileri de dahil olmak üzere performans önerilerini gözden geçirin. Bu önerileri el ile uygulayabilir veya veritabanınızda 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, plan otomatik ayarlamayı zorla seçeneği otomatik olarak etkinleştirilir. Veritabanınız bu saatten önce oluşturulduysa, plan otomatik ayarlamayı zorlama seçeneğini etkinleştirmek isteyebilirsiniz.

Dizinleri el ile ayarlama

En çok CPU kullanan sorgularınızın sorgu planlarını tanımlamak 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 kullandığınız sorguları incelediğinizde "geveze" davranış, parçalamadan yararlanabilecek iş yükleri ve en iyi olmayan veritabanı erişim tasarımı gibi uygulama kötü modellerini bulabilirsiniz. Yoğun okuma içeren iş yükleri için salt okunur sorgu iş yüklerini boşaltmak için salt okunur çoğaltmaları ve sık okunan verilerin ölçeğini genişletmeye yönelik uzun vadeli stratejiler olarak uygulama katmanı önbelleğe almayı 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 transact-SQL deyimlerini yeniden yazmayı, Sorgu Deposu'ndaki planları zorlamayı ve sorgu ipuçlarını uygulamayı içerir.

Sorguların bazen performans için en uygun olmayan bir yürütme planı kullandığı durumları belirlerseniz, parametreye duyarlı plan (PSP) sorunlarına neden olan 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ı azaltma

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. Aşırı paralellik büyük olasılıkla MAXDOP'un yüksek bir sayıya veya sıfıra ayarlandığı çok sayıda sanal çekirdek içeren veritabanlarında ortaya çıkar. MAXDOP sıfır olarak ayarlandığında, veritabanı altyapısı paralel iş parçacıkları tarafından kullanılacak zamanlayıcı sayısını mantıksal çekirdeklerin toplam sayısına veya hangisi daha küçükse 64'e ayarlar.

Transact-SQL ile veritabanınız için en yüksek paralellik derecesini belirleyebilirsiniz. SSMS veya Azure Data Studio ile veritabanınıza Bağlan 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

MAXDOP yapılandırmasında veritabanı düzeyinde küçük değişikliklerle denemeler yapmayı veya tek tek sorunlu sorguları sorgu ipucu kullanarak bilinmeyen 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 ayarlama işleminin iç işlemler veya başka nedenlerle kısa vadede yapamayacağınız değişiklikler gerektirdiğini fark edebilirsiniz. Daha fazla CPU kaynağı eklemek bu veritabanları için yararlı olabilir. Veritabanı kaynaklarını en düşük kapalı kalma süresiyle ölçeklendikleyebilirsiniz.

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ı daha fazla CPU kaynağı ekleyebilirsiniz.

DTU tabanlı satın alma modeli altında hizmet katmanınızı yükseltebilir 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ı DTU tabanlı modelden sanal çekirdek tabanlı modele geçirebilirsiniz.

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