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
Microsoft Fabric'te SQL veritabanı
Veritabanındaki bir tablonun veya dizinin her bölümü için geçerli alt düzey G/Ç, kilitleme, mandallama ve erişim yöntemi etkinliğini döndürür.
Bellek için iyileştirilmiş dizinler bu DMV'de görünmez.
Not
sys.dm_db_index_operational_stats bellek için iyileştirilmiş dizinler hakkında bilgi döndürmez. Bellek için iyileştirilmiş dizin kullanımı hakkında bilgi için bkz. sys.dm_db_xtp_index_stats (Transact-SQL).
Transact-SQL söz dizimi kuralları
Sözdizimi
sys.dm_db_index_operational_stats (
{ database_id | NULL | 0 | DEFAULT }
, { object_id | NULL | 0 | DEFAULT }
, { index_id | 0 | NULL | -1 | DEFAULT }
, { partition_number | NULL | 0 | DEFAULT }
)
Bağımsız değişken
database_id | NULL | 0 | TEMERRÜT
Veritabanının kimliği. database_idsmallint. Geçerli girişler bir veritabanının kimlik numarasıdır, NULL, 0 veya DEFAULT. Varsayılan değer 0'dır. NULL, 0 ve DEFAULT bu bağlamdaki eşdeğer değerlerdir.
SQL Server örneğindeki tüm veritabanları için bilgi döndürmek için NULL değerini belirtin. database_idiçin NULL belirtirseniz, object_id, index_idve partition_numberiçin de NULL belirtmeniz gerekir.
Yerleşik işlev DB_ID belirtilebilir.
object_id | NULL | 0 | TEMERRÜT
Tablonun nesne kimliği veya dizinin açık olduğu görünümü.
Geçerli girişler, bir tablonun ve görünümün kimlik numarasıdır, NULL, 0 veya DEFAULT. Varsayılan değer 0'dır. NULL, 0 ve DEFAULT bu bağlamdaki eşdeğer değerlerdir.
Belirtilen veritabanındaki tüm tablolar ve görünümler için önbelleğe alınmış bilgileri döndürmek için NULL belirtin. object_idiçin NULL belirtirseniz, index_id ve partition_numberiçin DE NULL belirtmeniz gerekir.
index_id | 0 | NULL | -1 | TEMERRÜT
Dizinin kimliği.
Temel tablo veya görünüm için tüm dizinler için önbelleğe alınmış bilgileri döndürmek için NULL belirtin. index_idiçin NULL belirtirseniz, partition_numberiçin DE NULL belirtmeniz gerekir.
partition_number | NULL | 0 | TEMERRÜT
Nesnedeki bölüm numarası.
Dizinin veya yığının tüm bölümleri için önbelleğe alınmış bilgileri döndürmek için NULL belirtin.
partition_number 1 tabanlıdır. Bölümlenmemiş dizin veya yığın partition_number 1 olarak ayarlanmıştır.
Döndürülen Tablo
| Sütun adı | Veri tipi | Açıklama |
|---|---|---|
| database_id | smallint | Veritabanı Kimliği. Azure SQL Veritabanı'nda değerler tek bir veritabanı veya elastik havuz içinde benzersizdir, ancak mantıksal sunucu içinde değildir. |
| object_id | int | Tablo veya görünümün kimliği. |
| index_id | int | Dizinin veya yığının kimliği. 0 = Yığın |
| partition_number | int | Dizin veya yığın içindeki 1 tabanlı bölüm numarası. |
| hobt_id | bigint |
Şunlar için geçerlidir: Bir columnstore dizini için iç verileri izleyen veri yığınının veya B ağacı satır kümesinin kimliği. NULL - bu bir iç columnstore satır kümesi değildir. Diğer ayrıntılar için bkz. sys.internal_partitions (Transact-SQL) |
| leaf_insert_count | bigint | Yaprak düzeyi eklemelerin kümülatif sayısı. |
| leaf_delete_count | bigint | Yaprak düzeyi silmelerin birikmeli sayısı. leaf_delete_count yalnızca önce hayalet olarak işaretlenmemiş silinmiş kayıtlar için artırılır. Önce hayalete kaydedilen silinmiş kayıtlar için bunun yerine leaf_ghost_count artırılır. |
| leaf_update_count | bigint | Yaprak düzeyi güncelleştirmelerin birikmeli sayısı. |
| leaf_ghost_count | bigint | Silinmiş olarak işaretlenen ancak henüz kaldırılmayan yaprak düzeyi satırların birikmeli sayısı. Bu sayı, hayalet olarak işaretlenmeden hemen silinen kayıtları içermez. Bu satırlar, belirli aralıklarla bir temizleme iş parçacığı tarafından kaldırılır. Bekleyen anlık görüntü yalıtım işlemi nedeniyle bu değer korunan satırları içermez. |
| nonleaf_insert_count | bigint | Yaprak düzeyinin üzerindeki eklemelerin kümülatif sayısı. 0 = Yığın veya sütun deposu |
| nonleaf_delete_count | bigint | Yaprak düzeyinin üzerinde birikmeli silme sayısı. 0 = Yığın veya sütun deposu |
| nonleaf_update_count | bigint | Yaprak düzeyinin üzerindeki güncelleştirmelerin birikmeli sayısı. 0 = Yığın veya sütun deposu |
| leaf_allocation_count | bigint | Dizin veya yığındaki yaprak düzeyi sayfa ayırmalarının birikmeli sayısı. Dizin için sayfa ayırma, sayfa bölmeye karşılık gelir. |
| nonleaf_allocation_count | bigint | Sayfa bölmelerinin yaprak düzeyinin üzerinde neden olduğu sayfa ayırmalarının birikmeli sayısı. 0 = Yığın veya sütun deposu |
| leaf_page_merge_count | bigint | Sayfa birleştirmelerinin yaprak düzeyindeki kümülatif sayısı. Columnstore dizini için her zaman 0. |
| nonleaf_page_merge_count | bigint | Sayfa birleştirmelerinin toplam sayısı yaprak düzeyinin üzerindedir. 0 = Yığın veya sütun deposu |
| range_scan_count | bigint | Dizinde veya yığında başlatılan aralık ve tablo taramalarının birikmeli sayısı. |
| singleton_lookup_count | bigint | Dizinden veya yığından tek satırlı almaların birikmeli sayısı. |
| forwarded_fetch_count | bigint | bir iletme kaydı aracılığıyla getirilen satırların sayısı. 0 = Dizinler |
| lob_fetch_in_pages | bigint | LOB_DATA ayırma biriminden alınan büyük nesne (LOB) sayfalarının birikmeli sayısı. Bu sayfalar, metin, ntext, resim, varchar(max), nvarchar(max), varbinary(max)ve xmltüründe depolanmış veriler içerir. Daha fazla bilgi için bkz. Veri Türleri (Transact-SQL). |
| lob_fetch_in_bytes | bigint | Alınan LOB veri baytlarının birikmeli sayısı. |
| lob_orphan_create_count | bigint | Toplu işlemler için oluşturulan yalnız lob değerlerinin birikmeli sayısı. 0 = Kümelenmemiş dizin |
| lob_orphan_insert_count | bigint | Toplu işlemler sırasında eklenen yalnız lob değerlerinin birikmeli sayısı. 0 = Kümelenmemiş dizin |
| row_overflow_fetch_in_pages | bigint | ROW_OVERFLOW_DATA ayırma biriminden alınan satır taşması veri sayfalarının birikmeli sayısı. Bu sayfalar, varchar(n), nvarchar(n), varbinary(n)ve satır dışına gönderilen sql_variant türünde depolanan verileri içerir. |
| row_overflow_fetch_in_bytes | bigint | Alınan satır taşması veri baytlarının birikmeli sayısı. |
| column_value_push_off_row_count | bigint | Eklenen veya güncelleştirilen bir satırın sayfaya sığması için satır dışına gönderilen LOB verileri ve satır taşması verilerinin sütun değerlerinin birikmeli sayısı. |
| column_value_pull_in_row_count | bigint | SATıR içine çekilen LOB verileri ve satır taşması verileri için sütun değerlerinin birikmeli sayısı. Bu durum, bir güncelleştirme işlemi kayıtta yer boşalttığında ve LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimlerinden IN_ROW_DATA ayırma birimine bir veya daha fazla satır dışı değer çekme fırsatı sağladığında oluşur. |
| row_lock_count | bigint | İstenen satır kilitlerinin birikmeli sayısı. |
| row_lock_wait_count | bigint | Veritabanı Altyapısı'nın satır kilidinde bekleme sayısı. |
| row_lock_wait_in_ms | bigint | Veritabanı Altyapısı'nın satır kilidinde beklediği toplam milisaniye sayısı. |
| page_lock_count | bigint | İstenen sayfa kilitlerinin birikmeli sayısı. |
| page_lock_wait_count | bigint | Veritabanı Altyapısı'nın sayfa kilidinde bekleme sayısı. |
| page_lock_wait_in_ms | bigint | Veritabanı Altyapısı'nın sayfa kilidinde beklediği toplam milisaniye sayısı. |
| index_lock_promotion_attempt_count | bigint | Veritabanı Altyapısı'nın kilitleri yükseltmeye çalışma sayısı. |
| index_lock_promotion_count | bigint | Veritabanı Altyapısı'nın kilitleri yükseltme sayısı. |
| page_latch_wait_count | bigint | Mandal çekişmesi nedeniyle Veritabanı Altyapısı'nın beklediği toplam sayı. |
| page_latch_wait_in_ms | bigint | Mandal çekişmesi nedeniyle Veritabanı Altyapısı'nın beklediği milisaniyenin birikmeli sayısı. |
| page_io_latch_wait_count | bigint | Veritabanı Altyapısı'nın G/Ç sayfası mandalında bekleme sayısı. |
| page_io_latch_wait_in_ms | bigint | Veritabanı Altyapısı'nın sayfa G/Ç mandalı üzerinde beklediği milisaniyenin birikmeli sayısı. |
| tree_page_latch_wait_count | bigint | Yalnızca üst düzey B ağacı sayfalarını içeren page_latch_wait_count alt kümesi. Yığın veya columnstore dizini için her zaman 0. |
| tree_page_latch_wait_in_ms | bigint | Yalnızca üst düzey B ağacı sayfalarını içeren page_latch_wait_in_ms alt kümesi. Yığın veya columnstore dizini için her zaman 0. |
| tree_page_io_latch_wait_count | bigint | Yalnızca üst düzey B ağacı sayfalarını içeren page_io_latch_wait_count alt kümesi. Yığın veya columnstore dizini için her zaman 0. |
| tree_page_io_latch_wait_in_ms | bigint | Yalnızca üst düzey B ağacı sayfalarını içeren page_io_latch_wait_in_ms alt kümesi. Yığın veya columnstore dizini için her zaman 0. |
| page_compression_attempt_count | bigint | Bir tablonun, dizinin veya dizine alınmış görünümün belirli bölümleri için SAYFA düzeyi sıkıştırması için değerlendirilen sayfa sayısı. Önemli ölçüde tasarruf sağlanamadığı için sıkıştırılmayan sayfaları içerir. Columnstore dizini için her zaman 0. |
| page_compression_success_count | bigint | Tablo, dizin veya dizine alınan görünümün belirli bölümleri için PAGE sıkıştırması kullanılarak sıkıştırılmış veri sayfası sayısı. Columnstore dizini için her zaman 0. |
Not
Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, bellek için iyileştirilmiş tablolardaki columnstore dizinleri veya dizinleri için geçerli değildir. Daha fazla bilgi için
Açıklamalar
Bu dinamik yönetim nesnesi, CROSS APPLY ve OUTER APPLYbağıntılı parametreleri kabul etmez.
sys.dm_db_index_operational_stats kullanarak kullanıcıların bir tabloya, dizine veya bölüme okumak veya yazmak için beklemesi gereken süreyi izleyebilir ve önemli G/Ç etkinliği veya sık erişim noktalarıyla karşılaşan tabloları veya dizinleri tanımlayabilirsiniz.
Çekişme alanlarını belirlemek için aşağıdaki sütunları kullanın.
tablo veya dizin bölümüne ortak erişim desenini analiz etmek için şu sütunları kullanın:
leaf_insert_count
leaf_delete_count
leaf_update_count
leaf_ghost_count
range_scan_count
singleton_lookup_count
Mandallama ve kilitleme çekişmesi tanımlamak için şu sütunları kullanın:
page_latch_wait_count ve page_latch_wait_in_ms
Bu sütunlar dizinde veya yığında mandal çekişmesi olup olmadığını ve çekişme önemini gösterir.
row_lock_count ve page_lock_count
Bu sütunlar, Veritabanı Altyapısı'nın satır ve sayfa kilitlerini kaç kez almayı denediğini gösterir.
row_lock_wait_in_ms ve page_lock_wait_in_ms
Bu sütunlar dizinde veya yığında kilit çekişmesi olup olmadığını ve çekişme önemini gösterir.
Dizin veya yığın bölümü fiziksel G/Ç istatistiklerini analiz etmek için
page_io_latch_wait_count ve page_io_latch_wait_in_ms
Bu sütunlar, dizin veya yığın sayfalarını belleğe getirmek için fiziksel G/Ç verilip verilmediğini ve kaç G/Ç verildiğini gösterir.
Sütun Açıklamaları
lob_orphan_create_count ve lob_orphan_insert_count değerleri her zaman eşit olmalıdır.
lob_fetch_in_pages ve lob_fetch_in_bytes sütunlarındaki değer, dahil edilen sütunlar olarak bir veya daha fazla LOB sütunu içeren kümelenmemiş dizinler için sıfırdan büyük olabilir. Daha fazla bilgi için bkz. Eklenen Sütunlarla Dizin Oluşturma. Benzer şekilde, dizin satır dışına gönderilebilen sütunlar içeriyorsa, row_overflow_fetch_in_pages ve row_overflow_fetch_in_bytes sütunlarındaki değer, kümelenmemiş dizinler için 0'dan büyük olabilir.
Meta Veri Önbelleğindeki sayaçlar nasıl sıfırlanır?
sys.dm_db_index_operational_stats tarafından döndürülen veriler yalnızca yığını veya dizini temsil eden meta veri önbelleği nesnesi kullanılabilir olduğu sürece vardır. Bu veriler kalıcı veya işlemsel olarak tutarlı değildir. Bu, bir dizinin kullanılıp kullanılmadığını veya dizinin en son ne zaman kullanıldığını belirlemek için bu sayaçları kullanamayacağınız anlamına gelir. Bu konuda bilgi için bkz. sys.dm_db_index_usage_stats (Transact-SQL).
Yığın veya dizin meta verileri meta veri önbelleğine getirildiğinde ve önbellek nesnesi meta veri önbelleğinden kaldırılana kadar istatistikler biriktiğinde her sütun için değerler sıfır olarak ayarlanır. Bu nedenle, etkin bir yığın veya dizin büyük olasılıkla her zaman meta verileri önbellekte olur ve SQL Server örneğinin son başlatılmasından bu yana kümülatif sayılar etkinliği yansıtabilir. Daha az etkin bir yığın veya dizin için meta veriler kullanıldığında önbellekte içeri ve dışarı taşınır. Sonuç olarak, kullanılabilir değerlere sahip olabilir veya olmayabilir. Dizini bırakmak, ilgili istatistiklerin bellekten kaldırılmasına ve işlev tarafından artık rapor edilmemasına neden olur. Dizine karşı diğer DDL işlemleri, istatistiklerin değerinin sıfıra sıfırlanmasına neden olabilir.
Parametre değerlerini belirtmek için sistem işlevlerini kullanma
database_id ve object_id parametreleri için bir değer belirtmek üzere DB_ID ve OBJECT_ID Transact-SQL işlevlerini kullanabilirsiniz. Ancak, bu işlevler için geçerli olmayan değerlerin geçirilmesi istenmeyen sonuçlara neden olabilir. DB_ID veya OBJECT_ID kullandığınızda her zaman geçerli bir kimlik döndürdüğünüzden emin olun. Daha fazla bilgi için sys.dm_db_index_physical_stats (Transact-SQL)içindeki Açıklamalar bölümüne bakın.
İzinler
Aşağıdaki izinleri gerektirir:
Veritabanında belirtilen nesne üzerinde
CONTROLizni@
VIEW DATABASE STATE= NULL nesne joker karakteri kullanarak belirtilen veritabanındaki tüm nesneler hakkında bilgi döndürme izniniVIEW DATABASE PERFORMANCE STATEveya (SQL Server 2022)@
VIEW SERVER STATE= NULL veritabanı joker karakteri kullanılarak tüm veritabanları hakkında bilgi döndürme izniVIEW SERVER PERFORMANCE STATE(SQL Server 2022)
VIEW DATABASE STATE verme, veritabanındaki tüm nesnelerin, belirli nesneler üzerinde engellenen DENETIM izinlerinden bağımsız olarak döndürülmesini sağlar.
VIEW DATABASE STATE reddedilmesi, veritabanındaki tüm nesnelerin, belirli nesneler üzerinde verilen DENETIM izinlerinden bağımsız olarak döndürülmelerine izin vermemektedir. Ayrıca, veritabanı joker karakteri @database_id=NULL belirtildiğinde, veritabanı atlanır.
Daha fazla bilgi için bkz. Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL).
Örnekler
A. Belirtilen tablo için bilgi döndürme
Aşağıdaki örnek, AdventureWorks2025 veritabanındaki tablonun tüm indeksleri ve bölümleri Person.Address için bilgileri döndürür. Bu sorguyu yürütmek için en azından Person.Address tabloda CONTROL izni gerekir.
Önemli
parametre değeri döndürmek için DB_ID ve OBJECT_ID Transact-SQL işlevlerini kullanırken, her zaman geçerli bir kimliğin döndürüldiğinden emin olun. Veritabanı veya nesne adı bulunamazsa (örneğin, mevcut olmadığında veya yanlış yazıldığında), her iki işlev de NULL döndürür. sys.dm_db_index_operational_stats işlevi NULL değerini tüm veritabanlarını veya tüm nesneleri belirten bir joker karakter değeri olarak yorumlar. Bu istenmeyen bir işlem olabileceğinden, bu bölümdeki örnekler veritabanı ve nesne kimliklerini belirlemenin güvenli yolunu gösterir.
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO
B. Tüm tablolar ve dizinler için bilgi döndürme
Aşağıdaki örnek, SQL Server örneği içindeki tüm tablolar ve dizinler için bilgi döndürür. Bu sorguyu yürütmek için VIEW SERVER STATE izni gerekir.
SELECT * FROM sys.dm_db_index_operational_stats( NULL, NULL, NULL, NULL);
GO
Ayrıca Bkz.
dinamik yönetim görünümlerini ve işlevlerini (Transact-SQL)
Dizinle İlgili Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
performans
sys.dm_db_index_physical_stats (Transact-SQL)
sys.dm_db_index_usage_stats (Transact-SQL)
sys.dm_os_latch_stats (Transact-SQL)
sys.dm_db_partition_stats (Transact-SQL)
sys.allocation_units (Transact-SQL)
sys.indexes (Transact-SQL)