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:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu konudaki kod örneği, bellek için iyileştirilmiş tabloların hızlı performansını gösterir. Bellek için iyileştirilmiş bir tablodaki verilere geleneksel, yorumlanmış Transact-SQL'den erişildiğinde performans artışı belirgindir. Bellek için iyileştirilmiş bir tablodaki verilere yerel olarak derlenmiş bir saklı yordamdan (NCSProc) erişildiğinde bu performans artışı daha da artar.
In-Memory OLTP'nin olası performans geliştirmelerinin daha kapsamlı bir tanıtımını görmek için bkz. OLTP Performans Tanıtımı v1.0In-Memory.
Bu makaledeki kod örneği tek iş parçacıklı olup In-Memory OLTP'nin eşzamanlılık avantajlarından yararlanmaz. Eşzamanlılık kullanan bir iş yükü daha yüksek bir performans kazancı görür. Kod örneği, performans geliştirmenin yalnızca bir yönünü gösterir; yani INSERT için veri erişimi verimliliği.
Bellek için iyileştirilmiş tablolar tarafından sunulan performans iyileştirmesi, bellek için iyileştirilmiş bir tablodaki verilere NCSProc'tan erişildiğinde tam olarak gerçekleştirilir.
Kod Örneği
Aşağıdaki alt bölümlerde her adım açıklanmaktadır.
Adım 1a: SQL Server Kullanılıyorsa Önkoşul
Bu ilk alt bölümdeki adımlar yalnızca SQL Server'da çalışıyorsanız ve Azure SQL Veritabanı'nda çalışıyorsanız geçerli değildir. Aşağıdakileri yapın:
SQL Server'ınıza bağlanmak için SQL Server Management Studio 'yu (SSMS.exe) kullanın. Veya SSMS.exe benzer herhangi bir araç uygundur.
C:\data\ adlı bir dizini el ile oluşturun. Örnek Transact-SQL kodu dizinin önceden var olmasını bekler.
Veritabanını ve bellek için iyileştirilmiş dosya grubunu oluşturmak için kısa T-SQL'i çalıştırın.
go
CREATE DATABASE imoltp; -- Transact-SQL
go
ALTER DATABASE imoltp ADD FILEGROUP [imoltp_mod]
CONTAINS MEMORY_OPTIMIZED_DATA;
ALTER DATABASE imoltp ADD FILE
(name = [imoltp_dir], filename= 'c:\data\imoltp_dir')
TO FILEGROUP imoltp_mod;
go
USE imoltp;
go
1b. Adım: Azure SQL Veritabanı Kullanılıyorsa Önkoşul
Bu alt bölüm yalnızca Azure SQL Veritabanı kullanıyorsanız geçerlidir. Aşağıdakileri yapın:
Kod örneği için hangi mevcut test veritabanını kullanacağınıza karar verin.
Yeni bir test veritabanı oluşturmaya karar verirseniz Azure portalını kullanarak imoltp adlı bir veritabanı oluşturun.
Bunun için Azure portalını kullanma yönergelerini istiyorsanız bkz. Azure SQL Veritabanı'nı Kullanmaya Başlama.
2. Adım: Memory-Optimized Tablolar ve NCSProc Oluşturma
Bu adım, bellek iyileştirmeli tablolar ve yerel olarak derlenmiş bir saklı yordam (NCSProc) oluşturur. Aşağıdakileri yapın:
Yeni veritabanınıza bağlanmak için SSMS.exe kullanın.
Veritabanınızda aşağıdaki T-SQL'i çalıştırın.
go
DROP PROCEDURE IF EXISTS ncsp;
DROP TABLE IF EXISTS sql;
DROP TABLE IF EXISTS hash_i;
DROP TABLE IF EXISTS hash_c;
go
CREATE TABLE [dbo].[sql] (
c1 INT NOT NULL PRIMARY KEY,
c2 NCHAR(48) NOT NULL
);
go
CREATE TABLE [dbo].[hash_i] (
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
c2 NCHAR(48) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
go
CREATE TABLE [dbo].[hash_c] (
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
c2 NCHAR(48) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
go
CREATE PROCEDURE ncsp
@rowcount INT,
@c NCHAR(48)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
DECLARE @i INT = 1;
WHILE @i <= @rowcount
BEGIN;
INSERT INTO [dbo].[hash_c] VALUES (@i, @c);
SET @i += 1;
END;
END;
go
3. Adım: Kodu Çalıştırma
Artık bellek için iyileştirilmiş tabloların performansını gösterecek sorguları yürütebilirsiniz. Aşağıdakileri yapın:
Veritabanınızda aşağıdaki T-SQL'i çalıştırmak için SSMS.exe kullanın.
İlk çalıştırmada oluşan hız ve diğer performans verilerini görmezden gelin. İlk çalıştırma, ilk bellek ayırmaları gibi tek seferlik birkaç işlemin gerçekleştirilmesini sağlar.
Veritabanınızda aşağıdaki T-SQL'i yeniden çalıştırmak için SSMS.exe kullanın.
go
SET STATISTICS TIME OFF;
SET NOCOUNT ON;
-- Inserts, one at a time.
DECLARE @starttime DATETIME2 = sysdatetime();
DECLARE @timems INT;
DECLARE @i INT = 1;
DECLARE @rowcount INT = 100000;
DECLARE @c NCHAR(48) = N'12345678901234567890123456789012345678';
-- Harddrive-based table and interpreted Transact-SQL.
BEGIN TRAN;
WHILE @i <= @rowcount
BEGIN;
INSERT INTO [dbo].[sql] VALUES (@i, @c);
SET @i += 1;
END;
COMMIT;
SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'A: Disk-based table and interpreted Transact-SQL: '
+ cast(@timems AS VARCHAR(10)) + ' ms';
-- Interop Hash.
SET @i = 1;
SET @starttime = sysdatetime();
BEGIN TRAN;
WHILE @i <= @rowcount
BEGIN;
INSERT INTO [dbo].[hash_i] VALUES (@i, @c);
SET @i += 1;
END;
COMMIT;
SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'B: memory-optimized table with hash index and interpreted Transact-SQL: '
+ cast(@timems as VARCHAR(10)) + ' ms';
-- Compiled Hash.
SET @starttime = sysdatetime();
EXECUTE ncsp @rowcount, @c;
SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'C: memory-optimized table with hash index and native SP:'
+ cast(@timems as varchar(10)) + ' ms';
go
DELETE sql;
DELETE hash_i;
DELETE hash_c;
go
Sonraki adım, ikinci test çalıştırmamız tarafından oluşturulan çıkış zamanı istatistikleridir.
10453 ms , A: Disk-based table and interpreted Transact-SQL.
5626 ms , B: memory-optimized table with hash index and interpreted Transact-SQL.
3937 ms , C: memory-optimized table with hash index and native SP.