Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Linux üzerinde SQL Server
SQL Server'ı yeni kullanan bir Linux kullanıcısıysanız, aşağıdaki görevler bazı performans özelliklerinde size yol gösterir. Bunlar Linux'a özgü veya benzersiz değildir, ancak size daha fazla araştırma yapmanız gereken alanlar hakkında fikir vermenize yardımcı olur. Her örnekte, bu alanın derinlik belgelerine bir bağlantı sağlanır.
Not
Aşağıdaki örneklerde AdventureWorks2022 örnek veritabanı kullanılmıştır. Bu örnek veritabanını alma ve yükleme yönergeleri için bkz. Yedekleme ve geri yüklemekullanarak SQL Server veritabanını Windows'tan Linux'a geçirme.
Columnstore dizini oluşturma
Columnstore dizini, büyük veri depolarını columnstore adı verilen sütunlu veri biçiminde depolamaya ve sorgulamaya yönelik bir teknolojidir.
Aşağıdaki Transact-SQL komutlarını yürüterek
SalesOrderDetailtablosuna bir columnstore dizini ekleyin:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOTabloyu taramak için columnstore dizinini kullanan aşağıdaki sorguyu yürütür:
SELECT ProductID, SUM(UnitPrice) AS SumUnitPrice, AVG(UnitPrice) AS AvgUnitPrice, SUM(OrderQty) AS SumOrderQty, AVG(OrderQty) AS AvgOrderQty FROM Sales.SalesOrderDetail GROUP BY ProductID ORDER BY ProductID;Kolon deposu dizininin kullanıldığını doğrulamak için,
object_id'ı kolon deposu dizini için kontrol edin veSalesOrderDetailtablosunun kullanım istatistiklerinde göründüğünü onaylayın.SELECT * FROM sys.indexes WHERE name = 'IX_SalesOrderDetail_ColumnStore'; GO SELECT * FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID('AdventureWorks2022') AND object_id = OBJECT_ID('AdventureWorks2022.Sales.SalesOrderDetail');
In-Memory OLTP kullanma
SQL Server, uygulama sistemlerinin performansını büyük ölçüde geliştirebilecek In-Memory OLTP özellikleri sağlar. Bu bölüm, bellekte saklanan bellek için optimize edilmiş bir tablo ve tabloya derleme veya yorumlama gerektirmeden erişebilen yerel olarak derlenmiş bir saklı yordam oluşturma adımlarında size yol gösterir.
In-Memory OLTP için Veritabanı Yapılandırma
In-Memory OLTP kullanmak için veritabanını en az 130 uyumluluk düzeyine ayarlamanız gerekir.
AdventureWorks2022geçerli uyumluluk düzeyini denetlemek için aşağıdaki sorguyu kullanın:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOGerekirse düzeyi 130 olarak güncelleştirin:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GOBir işlem hem disk tabanlı bir tablo hem de bellek için iyileştirilmiş bir tablo içerdiğinde, işlemin bellek için iyileştirilmiş bölümünün SNAPSHOT adlı işlem yalıtım düzeyinde çalışması önemlidir. Kapsayıcılar arasında bir işlemde bellek için optimize edilmiş tablolar için bu düzeyi güvenilir bir şekilde uygulamak için aşağıdakileri yapabilirsiniz:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GOBellek için iyileştirilmiş bir tablo oluşturabilmeniz için önce bellek için iyileştirilmiş bir dosya grubu ve veri dosyaları için bir kapsayıcı oluşturmanız gerekir:
ALTER DATABASE AdventureWorks2022 ADD FILEGROUP AdventureWorks_mod CONTAINS MEMORY_OPTIMIZED_DATA; GO ALTER DATABASE AdventureWorks2022 ADD FILE (NAME = 'AdventureWorks_mod', FILENAME = '/var/opt/mssql/data/AdventureWorks_mod') TO FILEGROUP AdventureWorks_mod; GO
Bellek için iyileştirilmiş tablo oluşturma
Bellek için iyileştirilmiş tabloların birincil deposu ana bellektir ve bu nedenle disk tabanlı tablolardan farklı olarak verilerin diskten bellek arabelleklerine okunması gerekmez. Bellek için iyileştirilmiş bir tablo oluşturmak için MEMORY_OPTIMIZED = ON yan tümcesini kullanın.
Bellek için iyileştirilmiş dbo.ShoppingCart tablosunu oluşturmak amacıyla aşağıdaki sorguyu çalıştırın. Varsayılan olarak, veriler dayanıklılık amacıyla diskte kalıcı hale getirilir (DAYANıKLıLıK, yalnızca şemayı kalıcı hale getirmek için de ayarlanabilir).
CREATE TABLE dbo.ShoppingCart ( ShoppingCartId INT IDENTITY (1, 1) PRIMARY KEY NONCLUSTERED, UserId INT NOT NULL INDEX ix_UserId NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000), CreatedDate DATETIME2 NOT NULL, TotalPrice MONEY ) WITH (MEMORY_OPTIMIZED = ON); GOTabloya bazı kayıtlar ekleyin:
INSERT dbo.ShoppingCart VALUES (8798, SYSDATETIME(), NULL); INSERT dbo.ShoppingCart VALUES (23, SYSDATETIME(), 45.4); INSERT dbo.ShoppingCart VALUES (80, SYSDATETIME(), NULL); INSERT dbo.ShoppingCart VALUES (342, SYSDATETIME(), 65.4);
Yerel olarak derlenmiş saklı yordamlar
SQL Server, bellek için iyileştirilmiş tablolara erişen yerel olarak derlenmiş saklı yordamları destekler. T-SQL deyimleri makine koduna derlenir ve yerel DLL'ler olarak depolanır, böylece geleneksel T-SQL'den daha hızlı veri erişimi ve daha verimli sorgu yürütmesi sağlanır. NATIVE_COMPILATION ile işaretlenmiş saklı yordamlar yerel olarak derlenir.
ShoppingCart tablosuna çok sayıda kayıt ekleyen doğal olarak derlenmiş bir prosedür oluşturmak için aşağıdaki komut dosyasını işleyin:
CREATE PROCEDURE dbo.usp_InsertSampleCarts @InsertCount INT WITH NATIVE_COMPILATION, SCHEMABINDING AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') DECLARE @i AS INT = 0; WHILE @i < @InsertCount BEGIN INSERT INTO dbo.ShoppingCart VALUES (1, SYSDATETIME(), NULL); SET @i += 1; END END;1.000.000 satır ekleyin:
EXECUTE usp_InsertSampleCarts 1000000;Satırların eklendiğini doğrulayın:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Sorgu Deposu'yu kullanma
Sorgu Deposu sorgular, yürütme planları ve çalışma zamanı istatistikleri hakkında ayrıntılı performans bilgileri toplar.
SQL Server 2022 (16.x) öncesinde Sorgu Deposu varsayılan olarak etkinleştirilmez ve ALTER DATABASE ile etkinleştirilebilir:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Sorgu Deposu'ndaki sorgular ve planlar hakkında bilgi döndürmek için aşağıdaki sorguyu çalıştırın:
SELECT Txt.query_text_id,
Txt.query_sql_text,
Pl.plan_id,
Qry.*
FROM sys.query_store_plan AS Pl
INNER JOIN sys.query_store_query AS Qry
ON Pl.query_id = Qry.query_id
INNER JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id;
Dinamik yönetim görünümlerini sorgulama
Dinamik yönetim görünümleri, sunucu örneğinin durumunu izlemek, sorunları tanılamak ve performansı ayarlamak için kullanılabilecek sunucu durumu bilgilerini döndürür.
dm_os_wait istatistikleri dinamik yönetim görünümünü sorgulamak için:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
İlgili içerik
- Başlangıç Alanlarının In-Memory OLTP'de Araştırması
- SQL Server'da In-Memory OLTP Özelliklerini benimsemenizi planlama
- Bellek iyileştirme kullanarak daha hızlı geçici tablo ve tablo değişkeni
- Bellek içi OLTP ile bellek kullanımını izleme ve sorun giderme
- In-Memory OLTP'ye genel bakış ve kullanım senaryoları
- Performans izleme ve ayarlama araçları
- Linux üzerinde SQL Server için en iyi performans yöntemleri ve yapılandırma yönergeleri
- Hızlı Başlangıç: SQL Server'ı yükleme ve Red Hat'de veritabanı oluşturma