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
Bellek içi çevrimiçi işlem işleme (OLTP), yorumlanan (geleneksel) Transact-SQL göre daha hızlı veri erişimi ve daha verimli sorgu yürütme sağlamak için yerel derleme kullanır. Tabloların ve saklı yordamların yerel olarak derlenmesi dinamik bağlantı kitaplıkları (DLL' ler) oluşturur.
SQL Server Database Engine, bellek için iyileştirilmiş tabloları, bellek için iyileştirilmiş tablolara erişen saklı yordamları ve bellek için iyileştirilmiş tablo türlerini yerel olarak derleyebilir. Daha fazla bilgi için bkz. Bellek iyileştirmesi kullanarak geçici tablolar ve tablo değişkenleri daha hızlı hale getirilebilir.
Bellek içi OLTP, bunları oluşturduğunuzda bellek için iyileştirilmiş tabloları derler ve depolanmış yordamları yüklendiklerinde yerel DLL'ler halinde yerel olarak derler. Buna ek olarak, DLL'ler veritabanı veya sunucu yeniden başlatıldıktan sonra yeniden derlenir. Veritabanı, DLL'leri meta verilerde yeniden oluşturmak için gereken bilgileri depolar. DLL'ler veritabanının bir parçası olmasa da veritabanıyla ilişkilidir. Örneğin, DLL'ler veritabanı yedeklemelerine dahil değildir.
Uyarı
Sunucu yeniden başlatıldıktan sonra bellek için iyileştirilmiş tablolar yeniden derlenir. Veritabanı kurtarmayı hızlandırmak için sunucu, yeniden başlatma sırasında yerel olarak derlenmiş saklı yordamları yeniden derlemez. Bunun yerine, ilk yürütme sırasında bunları derler. Bu ertelenmiş derlemenin bir sonucu olarak, yerel olarak derlenmiş saklı yordamlar yalnızca ilk yürütmeden sonra sys.dm_os_loaded_modules çağrılırken görünür.
Bellek içi OLTP DLL'lerinin bakımı
Aşağıdaki sorgu, şu anda sunucuda belleğe yüklenmiş olan tüm tablo ve saklı yordam DLL'lerini gösterir:
SELECT mod1.name,
mod1.description
FROM sys.dm_os_loaded_modules AS mod1
WHERE mod1.description = 'XTP Native DLL';
Veritabanı yöneticilerinin yerel derleme tarafından oluşturulan dosyaları tutması gerekmez. Database Engine artık gerekli olmayan oluşturulan dosyaları otomatik olarak kaldırır. Örneğin, bir tablo ve saklı yordam silindiğinde veya veritabanı bırakıldığında oluşturulan dosyalar silinir.
Uyarı
Derleme başarısız olursa veya kesintiye uğrarsa, oluşturulan bazı dosyalar kaldırılmaz. Bu dosyalar desteklenebilirlik için kasıtlı olarak geride bırakılır ve veritabanı bırakıldığında kaldırılır.
Database Engine, veritabanı kurtarma için gereken tüm tablolar için DLL'leri derler. Veritabanı yeniden başlatılmadan hemen önce bir tablo bırakılırsa, denetim noktası dosyalarında veya işlem günlüğünde tablonun artıkları olabilir. Sonuç olarak, veritabanı başlatma sırasında tablonun DLL'i yeniden derlenebilir. Veritabanı yeniden başlatıldıktan sonra bu işlem gerçekleşirse, normal temizleme işlemi DLL'yi kaldırır ve dosyaları kaldırır.
Tabloların yerel derlemesi
deyimini CREATE TABLE kullanarak bellek için iyileştirilmiş bir tablo oluşturduğunuzda, tablo bilgileri veritabanı meta verilerine yazılır ve tablo ve dizin yapıları bellekte oluşturulur. Tablo daha sonra bir DLL'ye derlenmiş olur.
Aşağıdaki örnek betik, bir veritabanı ve bellek için optimize edilmiş bir tablo oluşturur.
FILENAME yolunu, DATA alt dizininizin bulunduğu konuma ayarladığınızdan emin olun.
USE master;
GO
CREATE DATABASE DbMemOpt3;
GO
ALTER DATABASE DbMemOpt3
ADD FILEGROUP DbMemOpt3_mod_memopt_1_fg
CONTAINS MEMORY_OPTIMIZED_DATA;
GO
-- Change the FILENAME path to where your DATA subdirectory is located,
-- keeping only the trailing portion '\DATA\DbMemOpt3_mod_memopt_1_fn'.
ALTER DATABASE DbMemOpt3
ADD FILE (
NAME = 'DbMemOpt3_mod_memopt_1_name',
FILENAME = 'C:\DATA\DbMemOpt3_mod_memopt_1_fn'
)
TO FILEGROUP DbMemOpt3_mod_memopt_1_fg;
GO
USE DbMemOpt3;
GO
CREATE TABLE dbo.t1
(
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED,
c2 INT
)
WITH (MEMORY_OPTIMIZED = ON);
GO
-- Retrieve the path of the DLL for table t1.
DECLARE @moduleName AS NVARCHAR (256);
SET @moduleName = ('%xtp_t_'
+ CAST (db_id() AS NVARCHAR (16))
+ '_' + CAST (object_id('dbo.t1') AS NVARCHAR (16))
+ '%.dll');
-- Search for the name: mod1.name LIKE '%xtp_t_8_565577053%.dll'
PRINT @moduleName;
SELECT mod1.name,
mod1.description
FROM sys.dm_os_loaded_modules AS mod1
WHERE mod1.name LIKE @moduleName
ORDER BY mod1.name;
GO
-- Clean up.
-- DROP DATABASE DbMemOpt3;
-- GO
Tablo oluşturulurken tablo DLL'sini de oluşturur ve DLL'yi belleğe yükler.
CREATE TABLE deyiminden hemen sonraki DMV sorgusu, tablo DLL’sinin yolunu alır.
Tablo DLL'i tablonun dizin yapılarını ve satır biçimini anlar. Database Engine dizinleri çapraz geçiş, satırları alma ve satırların içeriğini depolama için DLL'yi kullanır.
Depolanmış yordamların yerel derlenmesi
Saklı yordamları yerel olarak derlemek için NATIVE_COMPILATION ile işaretleyin. Yordamdaki Transact-SQL deyimlerinin tümü, performans açısından kritik iş mantığının verimli bir şekilde yürütülmesi için yerel koda derlenir.
Yerel olarak derlenen saklı yordamlar hakkında daha fazla bilgi için bkz. Bellek için optimize edilmiş tablolar için sorgu işleme kılavuzu.
Aşağıdaki örnek saklı yordam, önceki örnekteki t1 tablosuna satırlar ekler:
CREATE PROCEDURE dbo.native_sp
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
DECLARE @i AS INT = 1000000;
WHILE @i > 0
BEGIN
INSERT dbo.t1
VALUES (@i, @i + 1);
SET @i -= 1;
END
END;
GO
EXECUTE dbo.native_sp;
GO
-- Reset.
DELETE dbo.t1;
GO
native_sp için DLL, satırları mümkün olan en hızlı şekilde eklemek amacıyla t1 için DLL ile ve bellek içi OLTP depolama altyapısıyla doğrudan etkileşime girebilir. Sorgu iyileştiricisi, saklı yordamdaki sorguların her biri için verimli bir yürütme planı oluşturur.
Tablodaki veriler değişirse yerel olarak derlenmiş saklı yordamlar otomatik olarak yeniden derlenmez. Bellek içi OLTP ile istatistiklerin ve depolanmış yordamların bakımını yapma hakkında daha fazla bilgi için bkz. Bellek için iyileştirilmiş tablolar için istatistikler.
Yerel derleme için güvenlikle ilgili dikkat edilmesi gerekenler
Tabloların ve saklı yordamların yerel derlemesi bellek içi OLTP derleyicisini kullanır. Derleyici diske yazılan ve belleğe yüklenen dosyalar üretir. Database Engine, bu dosyalara erişimi sınırlamak için aşağıdaki mekanizmaları kullanır.
Derleyici
Yerel derleme için gereken derleyici yürütülebilir dosyası, ikili dosyalar ve başlık dosyaları, Database Engine örneğinin bir parçası olarak MSSQL\Binn\Xtp klasörü altına yüklenir. Varsayılan örneği C:\Program Files altına yüklerseniz, derleyici dosyaları C:\Program Files\Microsoft SQL Server\MSSQL\<version>.MSSQLSERVER\MSSQL\Binn\Xtp içindedir.
Derleyiciye erişimi sınırlamak için, Database Engine ikili dosyalara erişimi kısıtlamak için erişim denetim listelerini (ACL' ler) kullanır. ACL'ler tüm Database Engine ikili dosyalarını değişiklik veya kurcalamaya karşı korur. Yerel derleyicinin ACL'leri de derleyici kullanımını sınırlar; yalnızca Database Engine hizmet hesabı ve sistem yöneticileri yerel derleyici dosyaları için okuma ve yürütme izinlerine sahiptir.
Yerel derleme tarafından oluşturulan dosyalar
Bir tablo veya saklı yordam derlendiğinde oluşturulan dosyalar DLL'yi ve şu uzantılara sahip dosyaları içeren ara dosyaları içerir: .c, .obj, .xmlve .pdb. Oluşturulan dosyalarxtpInstanceDefaultDataPath olarak tanımlanan varsayılan veri klasörünün alt klasörüne kaydedilir. Örnek dosya yolu: C:\Program Files\Microsoft SQL Server\MSSQL\<version>.MSSQLSERVER\MSSQL\DATA\Xtp.
Database Engine, oluşturulan DLL'lerle oynanmasını üç şekilde engeller:
Bir tablo veya saklı yordam bir DLL'ye derlendiğinde, DLL hemen belleğe yüklenir ve
sqlserver.exeişlemine bağlanır. Bir işleme bağlıyken DLL'yi değiştiremezsiniz.Veritabanı yeniden başlatıldığında, tüm tablolar ve saklı yordamlar, ilk yürütmede derlenen saklı yordamlarla veritabanı meta verilerinden yeniden derlenir (yani, kaldırılır ve yeniden oluşturulur). Yeniden derleme, kötü niyetli bir aktör tarafından kurcalanması gibi, oluşturulmuş bir dosyada yapılan tüm değişiklikleri yok sayar.
Oluşturulan dosyalar kullanıcı verileri olarak kabul edilir ve ACL'ler aracılığıyla veritabanı dosyalarıyla aynı güvenlik kısıtlamalarına sahiptir. Bu dosyalara yalnızca Database Engine hizmet hesabı ve sistem yöneticileri erişebilir.
Bu dosyaları yönetmeniz gerekmez. Database Engine dosyaları gerektiği gibi oluşturur ve kaldırır.