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:
- İş yükünde önemli CPU kullanan yeni sorgular mı görüntüleniyor yoksa düzenli olarak çalışan sorguların sıklığında bir artış mı görüyorsunuz? Araştırmak için aşağıdaki yöntemlerden birini kullanın. Sınırlı geçmişe sahip sorguları (yeni sorgular) ve daha uzun geçmişe sahip sorgular için yürütme sıklığını arayın.
- İş yükündeki bazı sorgular yürütme başına geçmiştekinden daha fazla CPU mu kullanıyor? Öyleyse, sorgu yürütme planı değişti mi? Bu sorgularda parametreye duyarlı plan (PSP) sorunları olabilir. Araştırmak için aşağıdaki tekniklerden birini kullanın. CPU kullanımında önemli farklılıklar olan birden çok sorgu yürütme planına sahip sorguları arayın:
- Büyük miktarda derleme veya yeniden derlemenin gerçekleştiğine dair kanıt var mı? En sık derlenen sorguları sorgu karmasıyla sorgulayıp ne sıklıkta derlendiklerini gözden geçirin.
- Sorgular aşırı paralellik mi kullanıyor? MAXDOP veritabanı kapsamlı yapılandırmanızı sorgulayıp sanal çekirdek sayınızı gözden geçirin. Aşırı paralellik genellikle MAXDOP değerinin sekizden yüksek çekirdek sayısıyla 0 olarak ayarlandığı veritabanlarında oluşur.
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.
Azure portal CPU kullanım ölçümlerini ve ilgili en önemli sorguları gözden geçirin
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.
- Azure portal veritabanına gidin.
- 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.
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.
- SSMS’i açın.
- Nesne Gezgini'da Azure SQL Veritabanınıza bağlanın.
- Nesne Gezgini'de veritabanı düğümünü genişletme
- Sorgu Deposu klasörünü genişletin.
- İzlenen Sorgular bölmesini açın.
- Ekranın sol üst kısmındaki İzleme sorgusu kutusuna sorgu kimliğini girin ve Enter tuşuna basın.
- 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.
- SSMS'yi açın ve Nesne Gezgini'da veritabanınıza bağlanın.
- Nesne Gezgini'de veritabanı düğümünü genişletme
- Sorgu Deposu klasörünü genişletin.
- 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.
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.
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.
- İş yükünde önemli CPU kullanan yeni sorgular bulduysanız, dizinlerin bu sorgular için iyileştirilmiş olduğunu doğrulayın. Otomatik dizin ayarlama ile dizinleri el ile ayarlayabilir veya CPU kullanımını azaltabilirsiniz. Artan iş yükünüz için maksimum paralellik derecesi ayarınızın doğru olup olmadığını değerlendirin.
- Sorguların genel yürütme sayısının eskisinden daha yüksek olduğunu fark ettiyseniz , en yüksek CPU kullanan sorgularınız için dizinleri ayarlayın ve otomatik dizin ayarlamayı göz önünde bulundurun. Artan iş yükünüz için maksimum paralellik derecesi ayarınızın doğru olup olmadığını değerlendirin.
- İş yükünde parametreye duyarlı plan (PSP) sorunları olan sorgular bulduysanız , otomatik plan düzeltmesini (zorla planı) göz önünde bulundurun. Ayrıca Sorgu Deposu'ndaki bir planı el ile zorlayabilir veya sorgu için Transact-SQL'i sürekli olarak yüksek performanslı bir sorgu planına neden olacak şekilde ayarlayabilirsiniz.
- Büyük miktarda derleme veya yeniden derlemenin gerçekleştiğine dair kanıt bulduysanız, sorguları düzgün parametrelendirilmeleri veya yeniden derleme ipuçları gerektirmemeleri için ayarlayın.
- Sorguların aşırı paralellik kullandığını fark ettiyseniz maksimum paralellik derecesini ayarlayın.
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.
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:
- Dinamik yönetim görünümlerini kullanarak veritabanı ve Azure SQL Yönetilen Örneği performansını Azure SQL izleme
- dizin mimarisini ve tasarım kılavuzunu SQL Server
- Sorguları izlemek ve iş yükü performansını geliştirmek için otomatik ayarlamayı etkinleştirme
- Sorgu işleme mimarisi kılavuzu
- Sorgu Deposu ile ilgili en iyi yöntemler
- Azure SQL Veritabanı'nda algılanabilir sorgu performansı sorunu türleri
- Azure SQL Veritabanında kilitlenmeleri analiz etme ve önleme