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]