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
In-Memory OLTP, yerel derleme kavramını tanıtır. SQL Server, bellek için iyileştirilmiş tablolara erişen saklı yordamları yerel olarak derleyebilir. SQL Server ayrıca bellek için iyileştirilmiş tabloları yerel olarak derleyebilir. Yerel derleme, yorumlanan (geleneksel) Transact-SQL'den daha hızlı veri erişimine ve daha verimli sorgu yürütmeye olanak tanır. Tabloların ve saklı yordamların yerel derlemesi DLL'ler üretir.
Bellek için iyileştirilmiş tablo türlerinin yerel olarak derlenmesi de desteklenir. Daha fazla bilgi için bkz. Bellek iyileştirmesi kullanarak geçici tablolar ve tablo değişkenleri daha hızlı hale getirilebilir.
Yerel derleme, daha fazla derleme veya yorumlamaya gerek kalmadan işlemci yönergelerinden oluşan programlama yapılarını yerel koda dönüştürme işlemini ifade eder.
In-Memory OLTP, oluşturulduğunda bellek için iyileştirilmiş tabloları ve yerel DLL'lere yüklendiklerinde yerel olarak derlenmiş saklı yordamları derler. Ayrıca, DLL'ler bir veritabanı veya sunucu yeniden başlatıldıktan sonra yeniden derlenir. DLL'leri yeniden oluşturmak için gereken bilgiler veritabanı meta verilerinde depolanır. DLL'ler veritabanının bir parçası değildir, ancak veritabanıyla ilişkilidir. Örneğin, DLL'ler veritabanı yedeklemelerine dahil değildir.
Uyarı
Sunucunun yeniden başlatılması sırasında bellek için iyileştirilmiş tablolar yeniden derlenir. Veritabanı kurtarmayı hızlandırmak için, yerel olarak derlenmiş saklı yordamlar sunucunun yeniden başlatılması sırasında yeniden derlenmez, ilk yürütme sırasında derlenir. Bu ertelenmiş derlemenin bir sonucu olarak, yerel olarak derlenmiş saklı yordamlar yalnızca ilk yürütmeden sonra sys.dm_os_loaded_modules (Transact-SQL) çağrılırken görünür.
In-Memory 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. SQL Server, artık gerekli olmayan oluşturulan dosyaları otomatik olarak kaldırır. Örneğin, 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.
Uyarı
SQL Server, veritabanı kurtarma için gereken tüm tablolar için DLL'leri derler. Veritabanını yeniden başlatmadan hemen önce bir tablo bırakıldıysa denetim noktası dosyalarında veya işlem günlüğünde tablonun artıkları olabilir, bu nedenle veritabanı başlatma sırasında tablonun DLL'sinin yeniden derlenebilir. Yeniden başlatıldıktan sonra DLL kaldırılır ve dosyalar normal temizleme işlemi tarafından kaldırılır.
Tabloların Yerel Derlemesi
CREATE TABLE deyimini kullanarak bellek için iyileştirilmiş bir tablo oluşturmak, tablo bilgilerinin veritabanı meta verilerine ve bellekte oluşturulan tablo ve dizin yapılarına yazılmasıyla sonuçlanıyor. Tablo da bir DLL'ye derlenir.
Veritabanı ve bellek için iyileştirilmiş bir tablo oluşturan aşağıdaki örnek betiği göz önünde bulundurun:
USE master;
GO
CREATE DATABASE DbMemopt3;
GO
ALTER DATABASE DbMemopt3
add filegroup DbMemopt3_mod_memopt_1_fg
contains memory_optimized_data
;
GO
-- You must edit the front portion of filename= path, to where your DATA\ subdirectory is,
-- 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'
--filename = 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLSVR2016ID\MSSQL\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
-- You can safely rerun from here to the end.
-- Retrieve the path of the DLL for table t1.
DECLARE @moduleName nvarchar(256);
SET @moduleName =
(
'%xtp_t_' +
cast(db_id() as nvarchar(16)) +
'_' +
cast(object_id('dbo.t1') as nvarchar(16)) +
'%.dll'
)
;
-- SEARCHED FOR NAME EXAMPLE: 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
;
-- ACTUAL NAME EXAMPLE: mod1.name = 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLSVR2016ID\MSSQL\DATA\xtp\8\xtp_t_8_565577053_184009305855461.dll'
GO
-- DROP DATABASE DbMemopt3; -- Clean up.
GO
Tablo oluşturulurken tablo DLL'sini de oluşturur ve DLL'yi belleğe yükler. CREATE TABLE ifadesinden hemen sonra yapılan DMV sorgusu, tablo DLL'sinin yolunu sorgular.
Tablo DLL'i tablonun dizin yapılarını ve satır biçimini anlar. SQL Server dizinleri gezinmek, satırları almak ve satırların içeriğini depolamak için DLL'yi kullanır.
Saklı Yordamların Doğal Derlemesi
NATIVE_COMPILATION ile işaretlenmiş saklı yordamlar yerel olarak derlenir. Bu, yordamdaki Transact-SQL deyimlerinin tümünün performans açısından kritik iş mantığının verimli bir şekilde yürütülmesi için yerel koda derlenmiş olduğu anlamına gelir.
Yerel olarak derlenmiş saklı yordamlar hakkında daha fazla bilgi için bkz. Yerel Olarak Derlenmiş Saklı Yordamlar.
Aşağıdaki, önceki örnekten t1 tablosuna satır ekleyen saklı yordam örneğini göz önünde bulundurun:
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 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 from dbo.t1;
GO
native_sp DLL dosyası, satırları mümkün olabildiğince hızlı eklemek için t1'in DLL dosyasıyla ve In-Memory OLTP depolama motoruyla doğrudan çalışabilir.
In-Memory OLTP derleyicisi, saklı yordamdaki sorguların her biri için verimli bir yürütme planı oluşturmak üzere sorgu iyileştiriciden yararlanmaktadır. Tablodaki veriler değişirse yerel olarak derlenmiş saklı yordamların otomatik olarak yeniden derlenmediğini unutmayın. In-Memory OLTP ile istatistik ve saklı yordamların yönetimi hakkında daha fazla bilgi için bkz. Memory-Optimized Tabloları için İstatistikler.
Yerel Derleme için Güvenlik Konuları
Tabloların ve saklı yordamların yerel derlemesi, In-Memory OLTP derleyicisi ile yapılır. Bu derleyici diske yazılan ve belleğe yüklenen dosyalar üretir. SQL Server, bu dosyalara erişimi sınırlamak için aşağıdaki mekanizmaları kullanır.
Yerel Derleyici
Derleyici yürütülebilir dosyasının yanı sıra yerel derleme için gereken ikili dosyalar ve üst bilgi dosyaları, MSSQL\Binn\Xtp klasörünün altındaki SQL Server örneğinin bir parçası olarak yüklenir. Bu nedenle, varsayılan örnek C:\Program Files altında yüklüyse, derleyici dosyaları C:\Program Files\Microsoft SQL Server\MSSQL13 konumunda yüklenir. MSSQLSERVER\MSSQL\Binn\Xtp.
SQL Server, derleyiciye erişimi sınırlamak için, ikili dosyalara erişimi kısıtlamak için erişim denetim listelerini (ACL' ler) kullanır. Tüm SQL Server ikili dosyaları, ACL'ler aracılığıyla yapılan değişikliklere veya kurcalamalara karşı korunur. Yerel derleyicinin ACL'leri de derleyici kullanımını sınırlar; yalnızca SQL Server 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 dosyalar, varsayılan veri klasörünün bir alt klasörüne kaydedilir. Alt klasör Xtp olarak adlandırılır. Varsayılan veri klasörüyle varsayılan örneği yüklerken, oluşturulan dosyalar C:\Program Files\Microsoft SQL Server\MSSQL13 içine yerleştirilir. MSSQLSERVER\MSSQL\DATA\Xtp.
SQL Server, oluşturulan DLL'lerle oynanmasını üç şekilde engeller:
Bir tablo veya saklı yordam BIR DLL'ye derlendiğinde, bu DLL hemen belleğe yüklenir ve sqlserver.exe işlemine bağlanır. Dll bir işleme bağlıyken değiştirilemez.
Veritabanı yeniden başlatıldığında, tüm tablolar ve saklı yordamlar veritabanı meta verilerine göre yeniden derlenir (kaldırılır ve yeniden oluşturulur). Bu, kötü amaçlı bir aracı tarafından oluşturulan bir dosyada yapılan değişiklikleri kaldırır.
Oluşturulan dosyalar kullanıcı verilerinin bir parçası olarak kabul edilir ve ACL'ler aracılığıyla veritabanı dosyalarıyla aynı güvenlik kısıtlamalarına sahiptir: bu dosyalara yalnızca SQL Server hizmet hesabı ve sistem yöneticileri erişebilir.
Bu dosyaları yönetmek için kullanıcı etkileşimi gerekmez. SQL Server dosyaları gerektiği gibi oluşturur ve kaldırır.