Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di Linux
Jika Anda adalah pengguna Linux yang baru menggunakan SQL Server, tugas berikut memanjakan Anda melalui beberapa fitur performa. Ini tidak unik atau khusus untuk Linux, tetapi membantu memberi Anda gambaran tentang area untuk menyelidiki lebih lanjut. Dalam setiap contoh, disediakan tautan ke dokumentasi mendalam untuk area tersebut.
Catatan
Contoh berikut menggunakan AdventureWorks2022 database sampel. Untuk instruksi tentang cara mendapatkan dan menginstal database sampel ini, lihat Memigrasikan database SQL Server dari Windows ke Linux menggunakan pencadangan dan pemulihan.
Membuat indeks penyimpan kolom
Indeks penyimpan kolom adalah teknologi untuk menyimpan dan mengkueri penyimpanan data besar dalam format data kolom, yang disebut penyimpan kolom.
Tambahkan indeks penyimpan kolom ke
SalesOrderDetailtabel dengan menjalankan perintah Transact-SQL berikut:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOJalankan kueri berikut yang menggunakan indeks penyimpan kolom untuk memindai tabel:
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;Verifikasi bahwa indeks columnstore digunakan dengan memeriksa
object_iduntuk indeks columnstore dan mengonfirmasi bahwa indeks tersebut muncul dalam statistik penggunaan untuk tabelSalesOrderDetail.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');
Gunakan OLTP Dalam Memori
SQL Server menyediakan fitur OLTP Dalam Memori yang dapat sangat meningkatkan performa sistem aplikasi. Bagian ini memandu Anda melalui langkah-langkah untuk membuat tabel yang dioptimalkan memori yang disimpan dalam memori dan prosedur tersimpan yang dikompilasi secara asli yang dapat mengakses tabel tanpa perlu dikompilasi atau ditafsirkan.
Mengonfigurasi Database untuk OLTP Dalam Memori
Anda harus mengatur database ke tingkat kompatibilitas setidaknya 130 untuk menggunakan OLTP Dalam Memori. Gunakan kueri berikut untuk memeriksa tingkat kompatibilitas saat ini dari
AdventureWorks2022:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOJika perlu, perbarui tingkat ke 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GOKetika transaksi melibatkan tabel berbasis disk dan tabel yang dioptimalkan memori, sangat penting bahwa bagian transaksi yang dioptimalkan memori beroperasi pada tingkat isolasi transaksi bernama SNAPSHOT. Untuk menerapkan tingkat ini dengan andal untuk tabel yang dioptimalkan memori dalam transaksi lintas kontainer, jalankan hal berikut:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GOSebelum dapat membuat tabel yang dioptimalkan memori, Anda harus terlebih dahulu membuat grup file memori yang dioptimalkan, dan kontainer untuk file data:
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
Membuat tabel memori yang dioptimalkan
Penyimpanan utama untuk tabel yang dioptimalkan memori adalah memori utama dan tidak seperti tabel berbasis disk, data tidak perlu dibaca dari disk ke dalam buffer memori. Untuk membuat tabel yang dioptimalkan memori, gunakan klausa MEMORY_OPTIMIZED = ON.
Jalankan kueri berikut untuk membuat tabel dbo.ShoppingCart yang dioptimalkan memori. Sebagai default, data disimpan pada disk untuk tujuan durabilitas (DURABILITY juga dapat diatur untuk mempertahankan skema saja).
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); GOSisipkan beberapa rekaman ke dalam tabel:
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);
Prosedur tersimpan yang dikompilasi secara asli
SQL Server mendukung prosedur tersimpan yang dikompilasi secara asli yang mengakses tabel yang dioptimalkan memori. Pernyataan T-SQL dikompilasi ke kode mesin dan disimpan sebagai DLL asli, memungkinkan akses data yang lebih cepat dan eksekusi kueri yang lebih efisien daripada T-SQL tradisional. Prosedur tersimpan yang ditandai dengan NATIVE_COMPILATION dikompilasi secara asli.
Jalankan skrip berikut untuk membuat prosedur tersimpan yang dikompilasi secara asli yang menyisipkan sejumlah besar rekaman ke dalam tabel ShoppingCart:
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;Sisipkan 1.000.000 baris:
EXECUTE usp_InsertSampleCarts 1000000;Verifikasi bahwa baris telah disisipkan:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Menggunakan Query Store
Penyimpanan Kueri mengumpulkan informasi performa terperinci tentang kueri, rencana eksekusi, dan statistik runtime.
Sebelum SQL Server 2022 (16.x), Penyimpanan Kueri tidak diaktifkan secara default, dan dapat diaktifkan dengan ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Jalankan kueri berikut untuk menampilkan informasi tentang kueri dan rencana di Penyimpanan Kueri.
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;
Tampilan manajemen dinamis kueri
Tampilan manajemen dinamis mengembalikan informasi status server yang dapat digunakan untuk memantau kesehatan instans server, mendiagnosis masalah, dan menyetel performa.
Untuk mengkueri tampilan manajemen dinamis statistik dm_os_wait:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Konten terkait
- Survei Area Awal pada OLTP Dalam Memori
- Rencanakan adopsi Fitur OLTP Dalam Memori Anda di SQL Server
- Mempercepat tabel sementara dan variabel tabel melalui pengoptimalan memori
- Memantau dan memecahkan masalah penggunaan memori dengan OLTP dalam memori
- Gambaran umum dan skenario penggunaan OLTP Dalam Memori
- Alat pemantauan dan penyetelan performa
- Praktik terbaik performa dan panduan konfigurasi untuk SQL Server di Linux
- Mulai cepat: Menginstal SQL Server dan membuat database di Red Hat