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 istatistikler, bellek optimize edilmiş tablolarda hash indeksleri için bucket sayılarını anlamak ve ayarlamak için faydalıdır. Ayrıca, indeks anahtarının çok sayıda kopyası olduğu durumları tespit etmek için de kullanılabilir.
Büyük ortalama zincir uzunluğu, birçok satırın aynı kovaya hash edildiğini gösterir. Bu nedenlerle olabilir:
Boş kovaların sayısı azsa veya ortalama ve maksimum zincir uzunlukları benzerse, toplam kova sayısının çok düşük olması muhtemeldir. Bu durum, birçok farklı indeks anahtarının aynı kovaya hash etmesine neden olur.
Boş kovaların sayısı yüksekse veya maksimum zincir uzunluğu ortalama zincir uzunluğuna göre yüksekse, iki olası açıklama vardır. Birçok satır yuptanmış endeks anahtar değeri vardır veya anahtar değerlerde bir eğri vardır. Her iki durumda da, aynı endeks anahtar değerine sahip tüm satırlar aynı kovaya hash edilir ve bu da o kovada uzun bir zincir uzunluğuna yol açar.
Uzun zincir uzunlukları, ve dahil olmak üzere bireysel SELECTINSERTsatırlardaki tüm DML işlemlerinin performansını önemli ölçüde etkileyebilir. Kısa zincir uzunlukları ve yüksek boş kova sayısı, bucket_count çok yüksek olduğunu gösterir. Bu durum, indeks taramalarının performansını düşürür.
Uyarı
Bu DMV tüm tabloyu tarıyor. Yani, veritabanınızda büyük tablolar varsa, sys.dm_db_xtp_hash_index_stats bu uzun zaman alabilir.
Daha fazla bilgi için bkz. Memory-Optimized Tablolar için Hash Indexes.
| Sütun adı | Türü | Description |
|---|---|---|
| object_id | int | Ebeveyn tablonun nesne kimliği. |
| xtp_object_id | bigint | Bellek optimize edilmiş tablonun ID'si. |
| index_id | int | Indeks ID. |
| total_bucket_count | bigint | Indeksteki toplam hash kovası sayısı. |
| empty_bucket_count | bigint | Indeksteki boş hash kovalarının sayısı. |
| avg_chain_length | bigint | Indeksteki tüm hash kovaları üzerindeki sıralı zincirlerin ortalama uzunluğu. |
| max_chain_length | bigint | Hash kovalarındaki sıra zincirlerinin maksimum uzunluğu. |
| xtp_object_id | bigint | In-Memory OLTP nesne kimliği, bellek optimize edilmiş tabloya karşılık gelir. |
Permissions
Veritabanında VIEW DATABASE STATE izni gerektirir.
SQL Server 2022 ve üzeri için izinler
Veritabanında veritabanı performans durumunu görüntüleme izni gerektirir.
Örnekler
A. Sorun gideri hash index bucket sayısı
Aşağıdaki sorgu, mevcut bir tablonun hash index bucket sayısını sorun gidermek için kullanılabilir. Sorgu, kullanıcı tablolarındaki tüm hash indeksleri için boş kovaların yüzdesi ve zincir uzunluğu hakkında istatistikler getirir.
SELECT
QUOTENAME(SCHEMA_NAME(t.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(h.object_id)) as [table],
i.name as [index],
h.total_bucket_count,
h.empty_bucket_count,
FLOOR((
CAST(h.empty_bucket_count as float) /
h.total_bucket_count) * 100)
as [empty_bucket_percent],
h.avg_chain_length,
h.max_chain_length
FROM sys.dm_db_xtp_hash_index_stats as h
INNER JOIN sys.indexes as i
ON h.object_id = i.object_id
AND h.index_id = i.index_id
INNER JOIN sys.memory_optimized_tables_internal_attributes ia ON h.xtp_object_id=ia.xtp_object_id
INNER JOIN sys.tables t on h.object_id=t.object_id
WHERE ia.type=1
ORDER BY [table], [index];
Bu sorgu sonuçlarının nasıl yorumlanacağına dair detaylar için Troubleshooting Troubleshooting Hash Indexes for Memory-Optimized Tables bölümüne bakınız.
B. İç tablolar için hash index istatistikleri
Bazı özellikler, örneğin bellek optimize edilmiş tablolarda columnstore indeksleri gibi hash indeksleri kullanan dahili tablolar kullanır. Aşağıdaki sorgu, kullanıcı tablolarına bağlı olan iç tablolardaki hash indekslerinin istatistiklerini döndürür.
SELECT
QUOTENAME(SCHEMA_NAME(t.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(h.object_id)) as [user_table],
ia.type_desc as [internal_table_type],
i.name as [index],
h.total_bucket_count,
h.empty_bucket_count,
h.avg_chain_length,
h.max_chain_length
FROM sys.dm_db_xtp_hash_index_stats as h
INNER JOIN sys.indexes as i
ON h.object_id = i.object_id
AND h.index_id = i.index_id
INNER JOIN sys.memory_optimized_tables_internal_attributes ia ON h.xtp_object_id=ia.xtp_object_id
INNER JOIN sys.tables t on h.object_id=t.object_id
WHERE ia.type!=1
ORDER BY [user_table], [internal_table_type], [index];
İç tablolardaki indeks sayıları değiştirilemez, bu nedenle bu sorgunun çıktısı yalnızca bilgilendirici olarak kabul edilmelidir. Eylem gerekmez.
Bu sorgu, dahili tablolarda hash indeksleri kullanan bir özellik kullanıyorsanız satır döndürmesi beklenmez. Aşağıdaki bellek optimize edilmiş tablo, bir columnstore indeksi içerir. Bu tabloyu oluşturduktan sonra, dahili tablolarda hash indekslerini göreceksiniz.
CREATE TABLE dbo.table_columnstore
(
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED,
INDEX ix_columnstore CLUSTERED COLUMNSTORE
) WITH (MEMORY_OPTIMIZED=ON);
İlgili içerik
- Bellek-Optimize Edilmiş Tablolara Giriş
- Memory-Optimized Tablo Dinamik Yönetim Görünümleri
- SQL Server ve Azure SQL indeks mimarisi ve tasarım rehberi: Hash index tasarım kılavuzları
- In-Memory OLTP Genel Bakış ve Kullanım Senaryoları
- Memory-Optimized Tablolar için Hash Index'lerde Sorun Giderme
- 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