Aracılığıyla paylaş


sys.dm_db_index_operational_stats (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft 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ü. object_id.

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. index_id. Geçerli girişler bir dizinin kimlik numarasıdır ve object_id yığın, NULL, -1 veya DEFAULT ise 0 olur. Varsayılan değer -1, NULL, -1 ve DEFAULT bu bağlamdaki eşdeğer değerlerdir.

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ı. partition_number. Geçerli girişler dizin veya yığın, NULL, 0 veya DEFAULT partition_number. Varsayılan değer 0'dır. NULL, 0 ve DEFAULT bu bağlamdaki eşdeğer değerlerdir.

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: SQL Server 2016 (13.x) ve sonraki sürümleri, Azure SQL Veritabanı.

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çinSQL Server ve Azure SQL dizin mimarisi ve tasarım kılavuzuna bakın.

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 CONTROL izni

  • @VIEW DATABASE STATE = NULL nesne joker karakteri kullanarak belirtilen veritabanındaki tüm nesneler hakkında bilgi döndürme iznini VIEW DATABASE PERFORMANCE STATE veya (SQL Server 2022)

  • @VIEW SERVER STATE = NULL veritabanı joker karakteri kullanılarak tüm veritabanları hakkında bilgi döndürme izni VIEW 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
için İzleme ve Ayarlama
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)