Değişen Veritabanı Uyumluluk Düzeyinin Önbellek Üzerindeki Etkisi

Değişen Veritabanı Uyumluluk Düzeyinin Önbellek Üzerindeki Etkisi

SQL Server dünyasında, veritabanı uyumluluk düzeyi, sorgu yürütme ve yürütme planlarını optimize etme söz konusu olduğunda bir veritabanının nasıl davranacağını belirlemede hayati bir rol oynar. SQL Server, her yeni sürümde yeni algoritmalar ve geliştirmeler benimseyerek sürekli olarak performansı ve sorgu optimizasyonunu iyileştirmeye çalışır. Sonuç olarak, en son özelliklerden ve iyileştirmelerden yararlanmak için uyumluluk düzeyini değiştirmek gerekli hale gelir. Bu blog gönderimizde, uyumluluk düzeyini değiştirmenin sorgu önbelleğini nasıl etkilediğini ve etkisinin farkında olmanın neden önemli olduğunu beraber keşfedeceğiz. Bu tartışmayı genellikle Kapsamlı Veritabanı Healt Check Kontrolü sırasında yaparız.

Önbellek Yönetimi ve Sorgu Optimizasyonu: Anlama ve Uygulama

Uyumluluk düzeyini değiştirmenin etkilerine dalmadan önce, SQL Server’daki sorgu önbelleğini kısaca tartışalım. Plan önbelleği olarak da bilinen sorgu önbelleği, SQL Server sorgu iyileştiricisi tarafından oluşturulan yürütme planlarını depolar. Bir sorgu yürütüldüğünde, SQL Server önce söz konusu sorgu için mevcut bir yürütme planı olup olmadığını görmek için önbelleği kontrol eder. Bulunursa, önbelleğe alınan plan kullanılır ve yeni bir plan oluşturma ek yükünden tasarruf edilir. Bu, sorgu performansını önemli ölçüde artırır ve sorgu işleme süresini azaltır.

Örnek Yürütme Planları Oluşturma: Uyumluluk düzeyini değiştirmenin etkisini göstermek için, AdventureWorks2019 veritabanındaki sorgular için bazı örnek yürütme planları oluşturalım.

USE AdventureWorks2019;

— Query 1

SELECT p.ProductID, p.Name AS ProductName, c.Name AS CategoryName

FROM Production.Product AS p

JOIN Production.ProductSubcategory AS sc

ON p.ProductSubcategoryID = sc.ProductSubcategoryID

JOIN Production.ProductCategory AS c ON sc.ProductCategoryID = c.ProductCategoryID;

GO 5

— Query 2

SELECT SalesOrderID, SUM(LineTotal) AS TotalSalesAmount

FROM Sales.SalesOrderDetail

GROUP BY SalesOrderID;

GO 5

— Query 3

SELECT p.ProductID, p.Name AS ProductName,

AVG(sod.OrderQty) AS AvgOrderQuantity,

SUM(sod.LineTotal) AS TotalSalesAmount

FROM Production.Product AS p

JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID

GROUP BY p.ProductID, p.Name;

GO 5

Önbellek Durumunu Kontrol Etme: Ardından, aşağıdaki sorguları kullanarak önbellek durumunu inceleyelim:

USE AdventureWorks2019;

— Check the buffer cache usage

SELECT

COUNT(*) AS CachedPagesCount,

COUNT(*) * 8 / 1024 AS CachedSizeMB

FROM sys.dm_os_buffer_descriptors

WHERE database_id = DB_ID();

GO

— Check the plan cache usage

SELECT

objtype AS CacheObjectType,

COUNT(*) AS CachedPlansCount,

SUM(size_in_bytes) / 1024 AS CachedSizeKB

FROM sys.dm_exec_cached_plans

GROUP BY objtype;

GO

— Check the procedure cache usage

SELECT

cacheobjtype AS CacheObjectType,

COUNT(*) AS CachedObjectsCount

FROM sys.dm_exec_cached_plans

GROUP BY cacheobjtype;

GO

İşte göreceğimiz sonuç aşağıda verilmiştir.

Uyumluluk Düzeyini Değiştirmenin Etkisi: Şimdi, aşağıdaki sorguları kullanarak uyumluluk düzeyini değiştirmeye geçelim:

— For SQL Server 2019:

ALTER DATABASE [AdventureWorks2019] SET COMPATIBILITY_LEVEL = 150;

GO

Burada 150, SQL Server 2019 anlamına gelir. Uyumluluk seviyesini SQL Server 2022 olarak değiştirmek isterseniz 150 yerine 160 kullanabilirsiniz. Aynı şekilde SQL Server 2017 için de 140 kullanabilirsiniz.

Uyumluluk seviyesini değiştirip sorgu önbelleğini tekrar kontrol ettiğinizde, neredeyse boş olduğunu göreceksiniz.

Analiz ve Sonuç

Sonuç olarak, bir SQL Server veritabanının uyumluluk düzeyi, sorgu optimizasyon davranışını ve performansını belirlemede çok önemli bir rol oynar. Uyumluluk düzeyini değiştirmek, önbelleğe alınan yürütme planlarını etkileyebilir ve dolayısıyla genel sorgu performansını etkileyebilir. Kapsamlı Veritabanı Performansı Healt Check’in bir parçası olarak, müşterilerimizin SQL Server veritabanlarının tüm potansiyelinden yararlanmalarını sağlamak için her zaman veritabanı uyumluluk düzeyini göz önünde bulundururuz.

[vc_row full_width=”stretch_row” css=”.vc_custom_1505794887127{background-color: #2596be !important;}” gradient_animation=”#ffbc63,#d46b02″][vc_column][stm_cta button_color=”custom” button_custom_color=”#0077c2″ icon_custom_color=”#ffffff” button_icon_pos=”right” button_icon=”stmicon-chevron-right” style=”style_6″ link=”url:aryasoft.com.tr/contacts |title:İletişim”] Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz! [/stm_cta][/vc_column][/vc_row][vc_row css=”.vc_custom_1501845139892{margin-top: 50px !important;margin-bottom: 25px !important;}”][/vc_row]