SQL Server'da bellek kullanımını izlemek için DBCC MEMORYSTATUS komutunu kullanın

Bu makalede, bellek kullanımını izlemek için komutunun nasıl kullanılacağı DBCC MEMORYSTATUS açıklanmaktadır.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 907877

Giriş

komutu, DBCC MEMORYSTATUS Microsoft SQL Server ve işletim sisteminin geçerli bellek durumunun anlık görüntüsünü sağlar. SQL Server bellek dağıtımı ve kullanımının en ayrıntılı çıkışlarından birini sağlar. SQL Server'daki bellek tüketimi sorunlarını gidermek veya belirli yetersiz bellek hatalarını gidermek için çıktıyı kullanabilirsiniz. Birçok yetersiz bellek hatası, hata günlüğünde bu çıkışı otomatik olarak oluşturur. Yetersiz bellek durumuyla ilgili bir hatayla karşılaşırsanız komutunu çalıştırabilir DBCC MEMORYSTATUS ve Microsoft Desteği iletişim kurduğunuzda çıkışı sağlayabilirsiniz.

Komutun DBCC MEMORYSTATUS çıkışı bellek yönetimi, bellek kullanımı, toplama bellek bilgileri, arabellek havuzu bilgileri ve yordam önbelleği bilgileri için bölümler içerir. Ayrıca genel bellek nesnelerinin, sorgu bellek nesnelerinin, iyileştirmenin ve bellek aracılarının çıkışını açıklar.

Not

Performans İzleyicisi (PerfMon) ve Görev Yöneticisi, Bellekteki Kilitli Sayfalar seçeneği etkinse tam bellek kullanımını hesaba eklemez. Adres Pencereleme Uzantıları (AWE) API bellek kullanımını gösteren performans sayaçları yoktur.

Önemli

DBCC MEMORYSTATUS Komutun Microsoft Desteği için bir tanılama aracı olması amaçlanmıştır. Çıktının biçimi ve sağlanan ayrıntı düzeyi, hizmet paketleriyle ürün sürümleri arasında değiştirilebilir. Komutun DBCC MEMORYSTATUS sağladığı işlevsellik, sonraki ürün sürümlerinde farklı bir mekanizmayla değiştirilebilir. Bu nedenle, sonraki ürün sürümlerinde bu komut artık çalışmayabilir. Bu komut değiştirilmeden veya kaldırılmadan önce ek uyarı sağlanamaz. Bu nedenle, bu komutu kullanan uygulamalar uyarı olmadan bozulabilir.

Komutun DBCC MEMORYSTATUS çıktısı, SQL Server önceki sürümlerinden değişti. Şu anda, önceki ürün sürümlerinde kullanılamayan birkaç tablo içeriyor.

DBCC MEMORYSTATUS'u kullanma

DBCC MEMORYSTATUSgenellikle SQL Server tarafından bildirilen yetersiz bellek sorunlarını araştırmak için kullanılır. SQL Server işleminin dışından gelen dış bellek baskısı veya işlemden kaynaklanan iç basınç varsa düşük bellek oluşabilir. İç basınç, SQL Server veritabanı altyapısından veya işlem içinde çalışan diğer bileşenlerden (bağlı sunucular, XP'ler, SQLCLR, yetkisiz erişim koruması veya virüsten koruma yazılımı gibi) kaynaklanabilir. Bellek baskısı sorunlarını giderme hakkında daha fazla bilgi için bkz. SQL Server yetersiz bellek veya yetersiz bellek sorunlarını giderme.

Komutu kullanmaya ve sonuçlarını yorumlamaya yönelik genel adımlar aşağıdadır. Belirli senaryolar çıkışa biraz farklı yaklaşmanızı gerektirebilir, ancak genel yaklaşım burada özetlenmiştir.

  1. DBCC MEMORYSTATUS komutunu çalıştırın.
  2. Dış bellek baskısı olup olmadığını belirlemek için İşlem/Sistem Sayıları ve Bellek Yöneticisi bölümlerini kullanın (örneğin, bilgisayarda fiziksel veya sanal bellek yetersiz veya SQL Server çalışma kümesi sayfalanır). Ayrıca, SQL Server veritabanı altyapısının sistemdeki genel belleğe kıyasla ne kadar bellek ayırdığını belirlemek için bu bölümleri kullanın.
  3. Dış bellek baskısı olduğunu belirlerseniz, diğer uygulamalar ve işletim sistemi tarafından bellek kullanımını azaltmayı deneyin veya daha fazla RAM ekleyin.
  4. SQL Server altyapısının belleğin çoğunu (iç bellek baskısı) kullandığını belirlerseniz, kalan bölümlerini DBCC MEMORYSTATUS kullanarak bu bellek kullanımına en büyük katkıda bulunan bileşenlerin (Bellek katibi, Cachestore, UserStore veya Objectstore) olduğunu belirleyebilirsiniz.
  5. Her bileşeni inceleyin: MEMORYCLEARK, CACHESTORE, USERSTOREve OBJECTSTORE. Bileşenin SQL Server içinde ne kadar bellek tüketeceğini belirlemek için Ayrılan Sayfalar değerini inceleyin. Çoğu veritabanı altyapısı bellek bileşeninin kısa bir açıklaması için Bellek Katibi türleri tablosuna bakın.
    1. Nadir durumlarda ayırma, SQL Server bellek yöneticisinden geçmek yerine doğrudan bir sanal ayırmadır. Bu gibi durumlarda Ayrılan Sayfalar yerine belirli bir bileşenin altındaki VM Kabul Edilen değerini inceleyin.
    2. Bilgisayarınız NUMA kullanıyorsa, düğüm başına bazı bellek bileşenleri ayrılmıştır. Örneğin, , OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2)vb. gözlemleyebilir OBJECTSTORE_LOCK_MANAGER (node 0)ve son olarak içindeki OBJECTSTORE_LOCK_MANAGER (Total)her düğümün toplam değerini gözlemleyebilirsiniz. Başlamak için en iyi yer, toplam değeri raporlayan ve sonra gerektiğinde dökümü inceleyen bölümdür. Daha fazla bilgi için bkz. NUMA düğümleriyle bellek kullanımı.
  6. bazı bölümleri belirli bellek ayırıcıları DBCC MEMORYSTATUS hakkında ayrıntılı ve özel bilgiler sağlar. Ek ayrıntıları anlamak ve bellek katibi içindeki ayırmaların daha ayrıntılı dökümünü görmek için bu bölümleri kullanabilirsiniz. Bu tür bölümlere örnek olarak Arabellek Havuzu (veri ve dizin önbelleği), Yordam önbelleği/plan önbelleği, Sorgu Bellek Nesneleri (bellek izinleri), İyileştirme Kuyruğu ve küçük ve orta ve büyük ağ geçitleri (iyileştirici bellek) verilebilir. SQL Server'daki belirli bir bellek bileşeninin bellek baskısının kaynağı olduğunu zaten biliyorsanız, doğrudan bu bölüme gitmeyi tercih edebilirsiniz. Örneğin, bellek hatalarına neden olan yüksek bellek ataması kullanımı olduğunu başka bir şekilde oluşturduysanız, Bellek nesnelerini sorgulama bölümünü gözden geçirebilirsiniz.

Bu makalenin geri kalanında, bellek sorunlarını daha etkili bir şekilde tanılamanıza olanak tanıyabilecek bazı yararlı sayaçlar DBCC MEMORYSTATUS açıklanmaktadır.

İşlem/Sistem Sayıları

Bu bölüm, tablo biçiminde bir örnek çıktı sağlar ve değerlerini açıklar.

Process/System Counts                Value
------------------------------------ ------------
Available Physical Memory            5060247552
Available Virtual Memory             140710048014336
Available Paging File                7066804224
Working Set                          430026752
Percent of Committed Memory in WS    100
Page Faults                          151138
System physical memory high          1
System physical memory low           0
Process physical memory low          0
Process virtual memory low           0

Aşağıdaki listede değerler ve açıklamaları ele alınmaktadır:

  • Kullanılabilir Fiziksel Bellek: Bu değer, bilgisayardaki toplam boş bellek miktarını gösterir. Örnekte boş bellek 5.060.247.552 bayttır.
  • Kullanılabilir Sanal Bellek: Bu değer, SQL Server işlem için toplam boş sanal bellek miktarını 140.710.048.014.336 bayt (128 TB) gösterir. Daha fazla bilgi için bkz . Bellek ve Adres Alanı Sınırları.
  • Kullanılabilir Disk Belleği Dosyası: Bu değer boş disk belleği dosyası alanını gösterir. Örnekte değer 7.066.804.224 bayttır.
  • Çalışma Kümesi: Bu değer, SQL Server işleminin RAM'de sahip olduğu sanal bellek miktarını gösterir (disk belleğine alınmaz) 430.026.752 bayttır.
  • WS'de İşlenen Bellek Yüzdesi: Bu değer ayrılmış SQL Server sanal belleğin RAM'de hangi yüzdesinde yer aldığını gösterir (veya Çalışma Kümesidir). Yüzde 100 değeri, işlenen belleğin tamamının RAM'de depolandığını ve yüzde 0'ının disk belleğine alındığını gösterir.
  • Sayfa Hataları: Bu değer, SQL Server için genel olarak sabit ve yumuşak sayfa hatalarının miktarını gösterir. Örnekte değer 151.138'dir.

Kalan dört değer ikili veya boole değeridir.

  • Sistem fiziksel belleğinin yüksek değeri 1, SQL Server bilgisayardaki kullanılabilir fiziksel belleğin yüksek olduğunu göz önünde bulundurduğunu gösterir. Bu nedenle Sistem fiziksel belleğinin düşük değeri 0'dır ve bu da yetersiz bellek olmadığı anlamına gelir. Benzer mantık Fiziksel belleği düşük işleme ve Sanal belleği işleme düşüklüğüne uygulanır; burada 0 değeri yanlış, 1 ise doğru olduğu anlamına gelir. Bu örnekte her iki değer de 0'dır ve bu da SQL Server işlemi için bol miktarda fiziksel ve sanal bellek olduğu anlamına gelir.

Bellek Yöneticisi

Bu bölümde, bellek yöneticisinin SQL Server genel bellek tüketimini gösteren bir örnek çıktısı sağlanır.

Memory Manager             KB
-------------------------- --------------------
VM Reserved                36228032
VM Committed               326188
Locked Pages Allocated     0
Large Pages Allocated      0
Emergency Memory           1024
Emergency Memory In Use    16
Target Committed           14210416
Current Committed          326192
Pages Allocated            161904
Pages Reserved             0
Pages Free                 5056
Pages In Use               286928
Page Alloc Potential       15650992
NUMA Growth Phase          0
Last OOM Factor            0
Last OS Error              0

Aşağıdaki listede çıkıştaki değerler ve bunların açıklamaları ele alınmaktadır:

  • VM Ayrılmış: Bu değer, SQL Server ayrılmış olan genel sanal adres alanı (VAS) veya sanal bellek (VM) miktarını gösterir. Sanal bellek ayırma aslında fiziksel bellek kullanmaz; yalnızca sanal adreslerin büyük VAS'nin içinden ayrılmış olduğu anlamına gelir. Daha fazla bilgi için bkz. VirtualAlloc() MEM_RESERVE.

  • VM Kabul Edilen: Bu değer, SQL Server (KB cinsinden) işlediği toplam sanal bellek miktarını (VM) gösterir. Bu, işlem tarafından kullanılan belleğin fiziksel bellek tarafından veya daha az sıklıkla sayfa dosyası tarafından yedeklendiği anlamına gelir. Önceden ayrılmış bellek adresleri artık fiziksel bir depolama tarafından desteklenir; ayrılmıştır. Bellekteki Kilitli Sayfalar etkinleştirildiyse, SQL Server bellek ayırmak için alternatif bir yöntem kullanır, AWE API'sini kullanır ve belleğin çoğu bu sayaçta yansıtılamaz. Bu ayırmalar için bkz. [Ayrılmış Kilitli Sayfalar](#Locked Ayrılan Sayfalar). Daha fazla bilgi için bkz. VirtualAlloc() MEM_COMMIT.

  • Ayrılan Sayfalar: Bu değer, SQL Server veritabanı altyapısı tarafından ayrılan toplam bellek sayfası sayısını gösterir.

  • Ayrılmış Kilitli Sayfalar: Bu değer, SQL Server AWE API'sini kullanarak fiziksel RAM'de ayırıp kilitlediği bellek miktarını kilobayt (KB) cinsinden temsil eder. SQL Server etkin olarak ne kadar bellek kullandığını gösterir ve performansı iyileştirmek için bellekte tutulmasını istedi. SQL Server, sayfaları belleğe kilitleyerek kritik veritabanı sayfalarının kullanılabilir olmasını ve diske değiştirilmemesini sağlar. Daha fazla bilgi için bkz . Adres Windows Uzantıları (AWE) belleği. Sıfır değeri, "bellekteki kilitli sayfalar" özelliğinin şu anda devre dışı bırakıldığını ve SQL Server bunun yerine sanal bellek kullandığını gösterir. Böyle bir durumda VM Kabul Edilen değeri, SQL Server ayrılan belleği temsil eder.

  • Ayrılan Büyük Sayfalar: Bu değer, Büyük Sayfalar kullanılarak SQL Server tarafından ayrılan bellek miktarını temsil eder. Büyük Sayfalar, işletim sistemi tarafından sağlanan bir bellek yönetimi özelliğidir. Bu özellik, standart sayfa boyutunu (genellikle 4 KB) kullanmak yerine 2 MB veya 4 MB gibi daha büyük bir sayfa boyutu kullanır. Sıfır değeri özelliğin etkinleştirilmediğini gösterir. Daha fazla bilgi için bkz. Virtual Alloc() MEM_LARGE_PAGES.

  • Hedef Kaydedilmiş: Bu değer, SQL Server taahhüt etmeyi hedeflediği hedef bellek miktarını, son iş yüküne bağlı olarak SQL Server kullanabileceği ideal bellek miktarını gösterir.

  • Current Committed: Bu değer, SQL Server bellek yöneticisinin şu anda işlediği (fiziksel depoda ayrılmış) işletim sisteminin bellek miktarını (KB cinsinden) gösterir. Bu değer "bellekte kilitli sayfalar" (AWE API'si) veya sanal bellek içerir. Bu nedenle, bu değer VM Kaydedilmiş veya Ayrılmış Kilitli Sayfalar'a yakın veya aynı. SQL Server AWE API'sini kullandığında, işletim sistemi Sanal Bellek Yöneticisi tarafından bazı belleklerin ayrılmaya devam ettiğini ve VM Kabul Edildi olarak yansıtılacağını unutmayın.

  • NUMA Büyüme Aşaması: Bu değer, SQL Server şu anda NUMA büyüme aşamasında olup olmadığını gösterir. Makinede NUMA düğümleri varken bu ilk bellek artışını hakkında daha fazla bilgi için bkz. Nasıl Çalışır: SQL Server (NUMA Yerel, Yabancı ve Dışarıda Bellek Blokları).

  • Son İşletim Sistemi Hatası: Bu değer, sistemde bellek baskısı olduğunda oluşan son işletim sistemi hatasını gösterir. SQL Server işletim sistemi hatasını kaydeder ve çıkışta gösterir. İşletim sistemi hatalarının tam listesi için bkz. Sistem Hata Kodları.

NUMA düğümleriyle bellek kullanımı

Bellek Yöneticisi bölümünden sonra her bir bellek düğümü için bellek kullanımının özeti yer alır. Tekdüzen olmayan bellek erişimi (NUMA) etkin bir sistemde, her donanım NUMA düğümü için karşılık gelen bir bellek düğümü girişi vardır. SMP sisteminde tek bir bellek düğümü girişi vardır. Aynı desen diğer bellek bölümlerine de uygulanır.

Memory node Id = 0      KB
----------------------- -----------
VM Reserved             21289792
VM Committed            272808
Locked Pages Allocated  0
Pages Allocated         168904
Pages Free              3040
Target Committed        6664712
Current Committed       272808
Foreign Committed       0
Away Committed          0
Taken Away Committed    0

Not

  • Değer Memory node Id donanım düğümü kimliğine karşılık olmayabilir.
  • Bu değerler, bu NUMA düğümünde çalışan iş parçacıkları tarafından ayrılan belleği gösterir. Bu değerler, NUMA düğümü için yerel bellek değildir.
  • Tüm bellek düğümlerindeki VM Ayrılmış değerlerinin ve VM Kabul Edilen değerlerinin toplamları, Bellek Yöneticisi tablosunda raporlanan karşılık gelen değerlerden biraz daha az olacaktır.
  • NUMA düğümü 64 (düğüm 64), DAC için ayrılmıştır ve bu bağlantı sınırlı bellek kaynakları kullandığından bellek araştırmasıyla nadiren ilgilenmektedir. Ayrılmış yönetici bağlantısı (DAC) hakkında daha fazla bilgi için bkz. Veritabanı yöneticileri için tanılama bağlantısı.

Aşağıdaki listede çıkış tablosundaki değerler ve açıklamaları ele alınmaktadır:

  • VM Ayrılmış: Bu düğümde çalışan iş parçacıkları tarafından ayrılmış sanal adres alanını (VAS) gösterir.
  • Vm Committed: Bu düğümde çalışan iş parçacıkları tarafından işlenen VAS'yi gösterir.

Belleği toplama

Aşağıdaki tabloda her bir katip türü ve NUMA düğümü için toplam bellek bilgileri yer alır. NUMA özellikli bir sistem için aşağıdakine benzer bir çıkış görebilirsiniz:

MEMORYCLERK_SQLGENERAL (node 0) KB
------------------------------  --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5416

MEMORYCLERK_SQLGENERAL (node 1) KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 136

MEMORYCLERK_SQLGENERAL (Total)  KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5552

değeri Pages Allocated , belirli bir bileşen (bellek katibi, kullanıcı deposu, nesne deposu veya önbellek deposu) tarafından ayrılan toplam bellek sayfası sayısını gösterir.

Not

Bu düğüm kimlikleri, SQL Server çalıştıran bilgisayarın NUMA düğüm yapılandırmasına karşılık gelir. Düğüm kimlikleri, donanım NUMA düğümlerinin üzerinde veya bir SMP sisteminin üzerinde tanımlanan olası yazılım NUMA düğümlerini içerir. Her düğüm için düğüm kimlikleri ve CPU'lar arasındaki eşlemeyi bulmak için bkz. Bilgi Olay Kimliği 17152. Bu olay, SQL Server başlattığınızda Olay Görüntüleyicisi Uygulama günlüğünde günlüğe kaydedilir.

SMP sistemi için, dac tarafından kullanılan düğüm = 64 değerini sayma değil, her katip türü için yalnızca bir tablo görürsünüz. Bu tablo aşağıdaki örneğe benzer.

MEMORYCLERK_SQLGENERAL (Total)     KB
--------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
Pages Allocated                    2928

Bu tablolardaki diğer bilgiler paylaşılan bellekle ilgilidir:

  • SM Ayrılmış: Bellekle eşlenen dosyalar API'sini kullanan bu türdeki tüm katipler tarafından ayrılan VAS'yi gösterir. Bu API paylaşılan bellek olarak da bilinir.
  • İşlenen SM: Bellekle eşlenen dosyalar API'sini kullanan bu türdeki tüm katipler tarafından işlenen VAS'yi gösterir.

Alternatif bir yöntem olarak, sys.dm_os_memory_clerks dinamik yönetim görünümünü (DMV) kullanarak tüm bellek düğümleri için her bir katip türü için özet bilgileri alabilirsiniz. Bunu yapmak için aşağıdaki sorguyu çalıştırın:

SELECT
  TYPE,
  SUM(virtual_memory_reserved_kb) AS [VM Reserved],
  SUM(virtual_memory_committed_kb) AS [VM Committed],
  SUM(awe_allocated_kb) AS [AWE Allocated],
  SUM(shared_memory_reserved_kb) AS [SM Reserved],
  SUM(shared_memory_committed_kb) AS [SM Committed],
  -- SUM(multi_pages_kb) AS [MultiPage Allocator],          /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  -- SUM(single_pages_kb) AS [SinlgePage Allocator],        /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  SUM(pages_kb) AS [Page Allocated]                      /*Applies to: SQL Server 2012 (11.  x) and later.*/
FROM sys.dm_os_memory_clerks
GROUP BY TYPE

Arabellek havuzu ayrıntıları

Bu, arabellek havuzundaki farklı durum verilerinin ve dizin sayfalarının dökümünü sağlayan ve veri önbelleği olarak da bilinen önemli bir bölümdür. Aşağıdaki çıkış tablosunda arabellek havuzuyla ilgili ayrıntılar ve diğer bilgiler listelemektedir.

Buffer Pool                                       Pages
------------------------------------------------- ---------
Database                                          5404
Simulated                                         0
Target                                            16384000
Dirty                                             298
In IO                                             0
Latched                                           0
IO error                                          125
In Internal Pool                                  0
Page Life Expectancy                              3965

Aşağıdaki listede çıkıştaki değerler ve bunların açıklamaları ele alınmaktadır:

  • Veritabanı: Veritabanı içeriğine (veri ve dizin sayfaları) sahip arabelleklerin (sayfalar) sayısını gösterir.
  • Hedef: Arabellek havuzunun hedef boyutunu gösterir (arabellek sayısı). Bu makalenin önceki bölümlerinde yer alan Target Committed memory bölümüne bakın.
  • Kirli: Veritabanı içeriği olan ve değiştirilmiş sayfaları gösterir. Bu arabellekler genellikle denetim noktası işlemi tarafından diske boşaltılması gereken değişiklikler içerir.
  • GÇ'de: Bekleyen G/Ç işlemini bekleyen arabellekleri gösterir. Bu, bu sayfaların içeriğinin depolama alanına yazıldığı veya depolama alanından okunduğu anlamına gelir.
  • Mandallı: Mandallı arabellekleri gösterir. Bir iş parçacığı bir sayfanın içeriğini okurken veya değiştirirken arabellek mandallanır. Sayfa diskten okunurken veya diske yazılırken de arabellek mandallanır. Mandal, sayfadaki verilerin okunduğu veya değiştirildiği sırada fiziksel tutarlılığını korumak için kullanılır. Buna karşılık, mantıksal ve işlem tutarlılığını korumak için bir kilit kullanılır.
  • GÇ hatası: G/Ç ile ilgili işletim sistemi hatalarıyla karşılaşmış olabilecek arabelleklerin sayısını gösterir (bu bir sorun olduğunu göstermez).
  • Sayfa Ömrü Beklentisi: Bu sayaç, en eski sayfanın arabellek havuzunda kaldığı süreyi saniye olarak ölçer.

DMV kullanarak sys.dm_os_buffer_descriptors veritabanı sayfaları için arabellek havuzu hakkında ayrıntılı bilgi edinebilirsiniz. Ancak bu DMV'yi dikkatli kullanın çünkü SQL Server tabanlı sunucunuzda çok fazla RAM'in kullanımına izin veriliyorsa uzun süre çalışabilir ve çok büyük bir çıkış üretebilir.

Plan önbelleği

Bu bölümde, daha önce yordam önbelleği olarak adlandırılan plan önbelleği açıklanmaktadır.

Procedure Cache         Value
----------------------- -----------
TotalProcs              4
TotalPages              25
InUsePages              0

Aşağıdaki listede çıkıştaki değerler ve bunların açıklamaları ele alınmaktadır:

  • TotalProcs: Bu değer, şu anda yordam önbelleğinde bulunan önbelleğe alınmış toplam nesneleri gösterir. Bu değer, DMV'deki girdi sayısıyla sys.dm_exec_cached_plans eşleşir.

    Not

    Bu bilgilerin dinamik yapısı nedeniyle eşleşme tam olarak doğru olmayabilir. Tetikleyiciler, yordamlar ve sys.dm_exec_cached_plans geçici nesneler gibi önbelleğe alınmış nesnelerin türü hakkında ayrıntılı bilgi için PerfMon kullanarak SQL Server: Plan Cache nesnesini ve DMV'yi izleyebilirsiniz.

  • TotalPages: Plan veya yordam önbelleğinde önbelleğe alınan tüm nesneleri depolamak için kullanılan toplu sayfaları gösterir. Kb cinsinden ifade edilen değeri almak için bu sayıyı 8 KB ile çarpabilirsiniz.

  • InUsePages: Yordam önbelleğinde şu anda etkin olan yordamlara ait sayfaları gösterir. Bu sayfalar atılamaz.

Genel Bellek Nesneleri

Bu bölüm, çeşitli genel bellek nesneleri ve kullandıkları bellek miktarı hakkında bilgi içerir.

Global Memory Objects               Buffers
----------------------------------  ----------------
Resource                            576
Locks                               96
XDES                                61
DirtyPageTracking                   52
SETLS                               8
SubpDesc Allocators                 8
SE SchemaManager                    139
SE Column Metadata Cache            159
SE Column Metadata Cache Store      2
SE Column Store Metadata Cache      8
SQLCache                            224
Replication                         2
ServerGlobal                        1509
XP Global                           2
SortTables                          3

Aşağıdaki listede çıkıştaki değerler ve bunların açıklamaları ele alınmaktadır:

  • Kaynak: Resource nesnesinin kullandığı belleği gösterir. Depolama altyapısı tarafından sunucu genelindeki çeşitli yapılar için kullanılır.
  • Kilitler: Kilit Yöneticisi tarafından kullanılan belleği gösterir.
  • XDES: Transaction Manager tarafından kullanılan belleği gösterir.
  • SETLS: İş parçacığı yerel depolama (TLS) kullanan depolama altyapısına özgü iş parçacığı başına yapıyı ayırmak için kullanılan belleği gösterir. Daha fazla bilgi için bkz . İş Parçacığı Yerel Depolama.
  • SubpDesc Ayırıcıları: Paralel sorgular, yedekleme işlemleri, geri yükleme işlemleri, veritabanı işlemleri, dosya işlemleri, yansıtma ve zaman uyumsuz imleçler için alt işlemleri yönetmek için kullanılan belleği gösterir. Bu alt işlemler "paralel işlemler" olarak da bilinir.
  • SE SchemaManager: Schema Manager'ın Depolama Altyapısına özgü meta verileri depolamak için kullandığı belleği gösterir.
  • SQLCache: Geçici ve hazırlanmış deyimlerin metnini kaydetmek için kullanılan belleği gösterir.
  • Çoğaltma: Sunucunun iç çoğaltma alt sistemleri için kullandığı belleği gösterir.
  • ServerGlobal: Birkaç alt sistem tarafından genel olarak kullanılan genel sunucu bellek nesnesini gösterir.
  • XP Genel: Genişletilmiş saklı yordamlar tarafından kullanılan belleği gösterir.
  • SortTables: Sıralama tabloları tarafından kullanılan belleği gösterir.

Bellek nesnelerini sorgulama

Bu bölümde Sorgu Belleği verme bilgileri açıklanmaktadır. Ayrıca sorgu belleği kullanımının anlık görüntüsünü de içerir. Sorgu belleği "çalışma alanı belleği" olarak da bilinir.

Query Memory Objects (default)           Value
---------------------------------------- -------
Grants                                    0
Waiting                                   0
Available                                 436307
Current Max                               436307
Future Max                                436307
Physical Max                              436307
Next Request                              0
Waiting For                               0
Cost                                      0
Timeout                                   0
Wait Time                                 0

Bir sorgunun boyutu ve maliyeti "küçük" sorgu belleği eşiklerini karşılarsa, sorgu küçük bir sorgu kuyruğuna alınır. Bu davranış, daha küçük sorguların zaten kuyrukta olan büyük sorguların arkasında gecikmesini önler.

Aşağıdaki listede çıkıştaki değerler ve bunların açıklamaları ele alınmaktadır:

  • İzinler: Bellek izni olan çalışan sorguların sayısını gösterir.
  • Bekleme: Bellek atamalarını almak için bekleyen sorguların sayısını gösterir.
  • Kullanılabilir: Karma çalışma alanı olarak kullanmak ve çalışma alanını sıralamak için sorguların kullanabileceği arabellekleri gösterir. Değer Available düzenli aralıklarla güncelleştirilir.
  • Sonraki İstek: Bir sonraki bekleyen sorgunun bellek isteği boyutunu arabelleklerde gösterir.
  • Bekleniyor: Sonraki İstek değerinin başvurduğu sorguyu çalıştırmak için kullanılabilir olması gereken bellek miktarını gösterir. Bekleme değeri, bir oda faktörüyle çarpılan değerdir Next Request . Bu değer, bir sonraki bekleyen sorgu çalıştırıldığında belirli bir bellek miktarının kullanılabilir olacağını etkili bir şekilde garanti eder.
  • Maliyet: Sonraki bekleyen sorgunun maliyetini gösterir.
  • Zaman aşımı: Sonraki bekleyen sorgu için zaman aşımını saniyeler içinde gösterir.
  • Bekleme Süresi: Sonraki bekleme sorgusu kuyruğa alındıktan sonra geçen süreyi milisaniye cinsinden gösterir.
  • Geçerli En Yüksek: Sorgu yürütme için genel bellek sınırını gösterir. Bu değer hem büyük sorgu kuyruğu hem de küçük sorgu kuyruğu için birleşik sınırdır.

Bellek vermelerin ne olduğu, bu değerlerin ne anlama gelenleri ve bellek verme sorunlarını giderme hakkında daha fazla bilgi için bkz. SQL Server'de bellek atamalarının neden olduğu yavaş performans veya düşük bellek sorunlarını giderme.

belleği iyileştirme

Sorgular derleme için sunucuya gönderilir. Derleme işlemi ayrıştırma, cebirleme ve iyileştirmeyi içerir. Sorgular, her sorgunun derleme işlemi sırasında tükettiği belleğe göre sınıflandırılır.

Not

Bu tutar, sorguyu çalıştırmak için gereken belleği içermez.

Sorgu başlatıldığında, derlenecek sorgu sayısıyla ilgili bir sınır yoktur. Bellek tüketimi arttıkça ve eşiğe ulaştığında sorgunun devam etmek için bir ağ geçidi geçirmesi gerekir. Her ağ geçidinden sonra eşzamanlı olarak derlenmiş sorguların giderek azalan bir sınırı vardır. Her ağ geçidinin boyutu platforma ve yüke bağlıdır. Ölçeklenebilirliği ve aktarım hızını en üst düzeye çıkarmak için ağ geçidi boyutları seçilir.

Sorgu bir ağ geçidi geçiremezse bellek kullanılabilir duruma gelene kadar bekler veya zaman aşımı hatası döndürür (Hata 8628). Ayrıca, sorguyu iptal ederseniz veya kilitlenme algılanırsa sorgu bir ağ geçidi almayabilir. Sorgu birkaç ağ geçidi geçirirse, derleme işlemi tamamlanana kadar daha küçük ağ geçitlerini serbest bırakmaz.

Bu davranış, aynı anda yalnızca birkaç yoğun bellek derlemesi oluşmasını sağlar. Ayrıca, bu davranış daha küçük sorgular için aktarım hızını en üst düzeye çıkarır.

Sonraki tabloda sorgu iyileştirme için yetersiz bellek nedeniyle gerçekleşen bellek beklemelerinin ayrıntıları sağlanır. İç bellek, sistem sorguları tarafından kullanılan iyileştirici belleği hesaplarken, varsayılan raporlar kullanıcı veya uygulama sorguları için belleği iyileştirir.

Optimization Queue (internal)      Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3673882624
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (internal)           Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (internal)          Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            0
Threshold Factor                   12
Threshold                          -1

Big Gateway (internal)             Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Optimization Queue (default)       Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3542319104
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (default)            Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (default)           Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            2
Threshold Factor                   12
Threshold                          -1

Big Gateway (default)              Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Bu değerlerden bazılarının açıklaması aşağıdadır:

  • Yapılandırılan Birimler - Ağ geçidinden derleme belleğini kullanabilen eşzamanlı sorguların sayısını gösterir. Örnekte, 32 eşzamanlı sorgu Küçük ağ geçidinden bellek (varsayılan), Orta ağ geçidinden sekiz eşzamanlı sorgu ve Büyük ağ geçidinden bir sorgu kullanabilir. Daha önce belirtildiği gibi, bir sorgu küçük ağ geçidinin ayıraacından daha fazla belleğe ihtiyaç duyarsa Orta ağ geçidine gider ve bu sorgu her iki ağ geçidinde de bir birim almış olarak sayılır. Sorgunun ihtiyaç duyduğu derleme belleği miktarı ne kadar büyük olursa, ağ geçidinde o kadar az yapılandırılmış birim olur.
  • Kullanılabilir Birimler - Yapılandırılan birimler listesinden derlenecek eşzamanlı sorgular için kullanılabilir yuva veya birim sayısını gösterir. Örneğin, 32 birim varsa ancak şu anda üç sorgu derleme belleği kullanıyorsa Available Units , 32 eksi 3 veya 29 birim olabilir.
  • Alma sayısı - Derlenecek sorgular tarafından alınan birim veya yuva sayısını gösterir. Şu anda ağ geçidinden bellek kullanan üç sorgu varsa, Alma = 3 olur.
  • Waiters - Ağ geçidinde derleme belleği için kaç sorgu beklediğini gösterir. Bir ağ geçidindeki tüm birimler tükenirse Waiters değeri, bekleyen sorguların sayısını gösteren sıfır değildir.
  • Eşik - Sorguların belleğini nereden aldığını veya hangi ağ geçidinde kaldığını belirleyen ağ geçidi bellek sınırını gösterir. Sorgunun eşik değerinden fazlasına ihtiyacı yoksa, küçük ağ geçidinde kalır (sorgu her zaman küçük ağ geçidiyle başlar). Derleme için daha fazla belleğe ihtiyaç duyarsa ortadaki belleğe gider ve bu eşik hala yetersizse büyük ağ geçidine gider. Küçük ağ geçidi için eşik faktörü x64 platformu için 380.000 bayttır (gelecek sürümlerde değiştirilebilir).
  • Eşik Faktörü: Her ağ geçidi için eşik değerini belirler. Küçük ağ geçidi için eşik önceden tanımlanmış olduğundan faktör de aynı değere ayarlanır. Orta ve büyük ağ geçidinin eşik faktörleri, toplam iyileştirici belleğin (iyileştirme kuyruğundaki Genel Bellek) kesirleridir ve sırasıyla 12 ve 8 olarak ayarlanır. Bu nedenle, diğer SQL Server bellek tüketicileri bellek gerektirdiğinden genel bellek ayarlanırsa eşik faktörleri de eşiklerin dinamik olarak ayarlanmasına neden olur.
  • Zaman aşımı: Sorgunun iyileştirici bellek için ne kadar süre beklediğini tanımlayan değeri dakika cinsinden gösterir. Bu zaman aşımı değerine ulaşılırsa oturum beklemeyi durdurur ve 8628 - hatasını verir A time out occurred while waiting to optimize the query. Rerun the query.

Bellek aracıları

Bu bölüm önbelleğe alınmış belleği, çalınan belleği ve ayrılmış belleği denetleyen bellek aracıları hakkında bilgi sağlar. Bu tablolardaki bilgileri yalnızca iç tanılama için kullanabilirsiniz. Bu nedenle, bu bilgiler ayrıntılı değildir.

MEMORYBROKER_FOR_CACHE (internal)       Value
--------------------------------------- -------------
Allocations                             20040
Rate                                    0
Target Allocations                      3477904
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (internal)       Value
--------------------------------------- -------------
Allocations                             129872
Rate                                    40
Target Allocations                      3587776
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (internal)     Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3457864
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_CACHE (default)        Value
--------------------------------------- -------------
Allocations                             44592
Rate                                    8552
Target Allocations                      3511008
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (default)        Value
--------------------------------------- -------------
Allocations                             1432
Rate                                    -520
Target Allocations                      3459296
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (default)      Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3919104
Future Allocations                      872608
Overall                                 3919104
Last Notification                       1