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
Mevcut veritabanındaki her In-Memory OLTP tablosu (kullanıcı ve sistem) için bellek kullanım istatistiklerini döndürür. Sistem tabloları negatif nesne kimliklerine sahiptir ve In-Memory OLTP motoru için çalışma zamanı bilgilerini depolamak için kullanılır. Kullanıcı nesnelerinin aksine, sistem tabloları dahili olup sadece bellek içinde bulunur, bu nedenle katalog görünümlerinde görünmezler. Sistem tabloları, depodaki tüm veri/delta dosyaları için meta veriler, birleştirme talepleri, satır filtrelemek için delta dosyaları için watermarklar, bırakılan tablolar ve kurtarma ile yedekleme için ilgili bilgiler gibi bilgileri depolamak için kullanılır. In-Memory OLTP motorunun 8.192'ye kadar veri ve delta dosya çiftlerine sahip olabileceği göz önüne alındığında, büyük bellek içi veritabanları için sistem tablolarının aldığı bellek birkaç megabayt olabilir.
Daha fazla bilgi için bkz. In-Memory OLTP (In-Memory İyileştirme).
| Sütun adı | Veri türü | Description |
|---|---|---|
| object_id | int | Tablonun nesne kimliği.
NULL In-Memory OLTP sistem tabloları için. |
| memory_allocated_for_table_kb | bigint | Bu tablo için ayrılan bellek. |
| memory_used_by_table_kb | bigint | Tablo tarafından kullanılan bellek, satır sürümleri dahil. |
| memory_allocated_for_indexes_kb | bigint | Bu tablodaki indeksler için ayrılan bellek. |
| memory_used_by_indexes_kb | bigint | Bu tablodaki indeksler için kullanılan bellek. |
Permissions
Mevcut veritabanında VIEW DATABASE STATE izniniz varsa tüm satırlar döner. Aksi takdirde, boş bir satır kümesi geri döner.
VIEW DATABASE izniniz yoksa, SELECT izniniz olan tablolardaki satırlar için tüm sütunlar geri gönderilir.
Sistem tabloları yalnızca VIEW DATABASE STATE iznine sahip kullanıcılar için döner.
SQL Server 2022 ve üzeri için izinler
Veritabanında veritabanı performans durumunu görüntüleme izni gerektirir.
Örnekler
Veritabanındaki tablolar ve indeksler için tahsis edilen belleği almak için aşağıdaki DMV'yi sorgulayabilirsiniz:
-- finding memory for objects
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_table_memory_stats;
Veritabanındaki tüm nesneler için bellek bulmak için:
SELECT SUM( memory_allocated_for_indexes_kb + memory_allocated_for_table_kb) AS
memoryallocated_objects_in_kb
FROM sys.dm_db_xtp_table_memory_stats;
Kullanıcı Senaryosu
İlk olarak, güvenlik önlemi olarak maksimum sunucu belleğini 4GB olarak ayarlayın. Çevreniz için farklı bir değer düşünmek isteyebilirsiniz.
-- set max server memory to 4 GB
EXEC sp_configure 'max server memory (MB)', 4048
go
RECONFIGURE
go
Veritabanı için bellek optimize edilmiş nesneleri içeren bir kaynak havuzu oluşturun.
-- create a resource pool for the database with memory-optimized objects
CREATE RESOURCE POOL PoolHkDb1 WITH (MAX_MEMORY_PERCENT = 50);
ALTER RESOURCE GOVERNOR RECONFIGURE;
go
'PoolHkdb1' kaynak havuzunu 'HkDb1' veritabanına bağlayın. Bu, havuzu ilişkilendirmek için veritabanını çevrimdışı/çevrimiçi olarak almayı gerektirir.
--bind the pool to the database
EXEC sp_xtp_bind_db_resource_pool 'HkDb1', 'PoolHkdb1'
go
-- take database offline/online to associate the pool
use master
go
alter database HkDb1 set offline
go
alter database HkDb1 set online
go
Aşağıdaki tabloları bir veritabanında oluşturun HkDb1.
USE HkDb1
GO
CREATE TABLE dbo.t1 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t1_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 100000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE TABLE dbo.t2 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t2_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 100000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE TABLE dbo.t3 (
c1 int NOT NULL,
c2 char(40) NOT NULL,
c3 char(8000) NOT NULL,
CONSTRAINT [pk_t3_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 1000000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
GO
Tabloya veri yükleyin.
-- load 150K rows
DECLARE @i int = 0
WHILE (@i <= 150000)
BEGIN
insert t1 values (@i, 'a', replicate ('b', 8000))
set @i += 1;
END
GO
Veri bir tabloya yüklendiğinde, kullanıcı tanımlı tabloları ve ne kadar depolama kullandığını görebilirsiniz. Örneğin, bir tablonun her satırı yaklaşık 8070 bayt olabilir (tahsis boyutu 8K (8192 bayt)). Tablo başına indeksleri ve indeksin ne kadar depolama kullandığını görebilirsiniz. Örneğin, 1MB, her biri 8 baytlık 2 (2**17) = 131072 kaderine yuvarlanan 100K giriştir. Bir tabloda bir indeks olmayabilir, bu durumda indeks için bellek tahsisi gösterilir. Diğer satırlar sistem tablolarını temsil edebilir
select convert(char(10), object_name(object_id)) as Name,*
from sys.dm_db_xtp_table_memory_stats;
İşte çıktı, iki bölümden oluşuyor:
Name object_id memory_allocated_for_table_kb memory_used_by_table_kb
---------- ----------- ----------------------------- -----------------------
t3 629577281 0 0
t1 565577053 1372928 1202351
t2 597577167 0 0
NULL -6 0 0
NULL -5 0 0
NULL -4 0 0
NULL -3 0 0
NULL -2 192 25
memory_allocated_for_indexes_kb memory_used_by_indexes_kb
------------------------------- -------------------------
8192 8192
1024 1024
8192 8192
2 2
24 24
2 2
2 2
16 16
Çıktısı,
select sum(allocated_bytes)/(1024*1024) as total_allocated_MB,
sum(used_bytes)/(1024*1024) as total_used_MB
from sys.dm_db_xtp_memory_consumers;
dir:
total_allocated_MB total_used_MB
-------------------- --------------------
1357 1191
Sonra, kaynak havuzundan çıkan çıktıya bakalım. Havuzdan kullanılan bellek 1356 MB'tir.
select pool_id,convert(char(10), name) as Name, min_memory_percent, max_memory_percent,
max_memory_kb/1024 as max_memory_mb
from sys.dm_resource_governor_resource_pools;
select used_memory_kb/1024 as used_memory_mb ,target_memory_kb/1024 as target_memory_mb
from sys.dm_resource_governor_resource_pools;
Çıkış:
pool_id Name min_memory_percent max_memory_percent max_memory_mb
----------- ---------- ------------------ ------------------ --------------------
1 internal 0 100 3845
2 default 0 100 3845
259 PoolHkDb1 0 100 3845
used_memory_mb target_memory_mb
-------------------- --------------------
125 3845
32 3845
1356 3845
İlgili içerik
- Bellek-Optimize Edilmiş Tablolara Giriş
- Memory-Optimized Tablo Dinamik Yönetim Görünümleri
- In-Memory OLTP Genel Bakış ve Kullanım Senaryoları
- Azure SQL Veritabanı bellek içi teknolojileri kullanarak performansı iyileştirme
- Azure SQL Yönetilen Örneği'nde bellek içi teknolojileri kullanarak performansı iyileştirme