SQL Server'da bellek yetersizliği veya bellek azlığı sorunlarını giderme

Summary

Bu makalede bellek yetersizliği ve bellek hatalarını ayırma hatası, düşük bellek koşulları ve ilgili performans sorunları da dahil olmak üzere SQL Server bellek sorunlarının nasıl giderilir açıklanır. Belirtiler, üç ana bellek baskısı kategorisi (harici, altyapı dışı modüllerden iç ve SQL Server altyapı bileşenlerinden iç), veri toplamak için kullanabileceğiniz tanılama araçları ve SQL Server bir örnekte bellek baskısını düzeltmek veya hafifletmek için atabileceğiniz adımlar açıklanmaktadır.

Yetersiz bellek hatalarının belirtileri

SQL Server, karmaşık ve zengin özellik kümesine karşılık gelen karmaşık bir bellek mimarisi kullanır. Çeşitli bellek gereksinimleri nedeniyle, birçok kaynak bellek tüketimine ve bellek baskısına neden olabilir ve bu da bellek koşullarının dışına çıkmasına neden olabilir.

Yaygın hatalar, SQL Server yetersiz bellek olduğunu gösterir. Bu hatalara örnek olarak şunlar verilebilir:

  • 701: Sorguyu çalıştırmak için yeterli bellek ayrılamaması.
  • 802: Arabellek havuzundaki sayfaları (veri veya dizin sayfaları) ayırmak için bellek alınamaması.
  • 1204: Kilitler için bellek ayrılamaması.
  • 6322: XML ayrıştırıcısı için bellek ayrılamaması.
  • 6513: Bellek baskısından dolayı CLR başlatılamadı.
  • 6533: AppDomain bellek yetersiz olduğundan kaldırıldı.
  • 8318: Yetersiz bellek nedeniyle SQL performans sayaçları yüklenemedi.
  • 8356 veya 8359: ETW veya SQL izlemesi yetersiz bellek nedeniyle çalıştırılamıyor.
  • 8556: Yetersiz bellek nedeniyle MSDTC yüklenemedi.
  • 8645: Bellek atamaları için bellek olmadığından sorgu çalıştırılamıyor (sıralama ve karma oluşturma).
  • 8902: DBCC yürütmesi sırasında bellek ayrılamaması.
  • 9695 veya 9696: Hizmet Aracısı işlemleri için bellek ayrılamaması.
  • 17131 veya 17132: Yetersiz bellek nedeniyle sunucu başlatma hatası.
  • 17890: SQL belleğinin işletim sistemi tarafından disk belleğine taşınması nedeniyle bellek ayrılamaması.
  • 18053: Biçimlendirme sırasında bir hata oluştuğundan hata terse modunda yazdırıldı. İz sürme, ETW ve bildirimler atlanır.
  • 22986 veya 22987: Yetersiz bellek nedeniyle veri yakalama hatalarını değiştirin.
  • 25601: Xevent işleyicisinin belleği tükendi.
  • 26053: YETERSIZ bellek nedeniyle SQL ağ arabirimleri başlatılamıyor.
  • 30085, 30086, 30094: SQL tam metin işlemleri yetersiz bellek nedeniyle başarısız oldu.

Düşük bellek sorunlarının nedeni

Birçok faktör yetersiz belleğe neden olabilir. Bu faktörler arasında işletim sistemi ayarları, fiziksel bellek kullanılabilirliği, SQL Server içinde bellek kullanan bileşenler ve geçerli iş yükündeki bellek sınırları bulunur. Çoğu durumda, yetersiz bellek hatası veren sorgu hatanın nedeni değildir. Nedenleri üç kategoride gruplandırabilirsiniz.

Dış veya işletim sistemi bellek baskısı

Dış basınç, SQL Server için yetersiz belleğe yol açan SQL Server işleminin dışındaki bir bileşenden yüksek bellek kullanımını ifade eder. Sistemdeki diğer uygulamaların bellek kullanıp kullanmadığını ve düşük bellek kullanılabilirliğine katkıda bulunup bulunmadığını denetleyin. SQL Server, bellek kullanımını azaltarak işletim sistemi bellek baskısına yanıt vermek için tasarlanmış birkaç uygulamadan biridir. Bir uygulama veya sürücü bellek isterse, işletim sistemi bellek boşaltmak için tüm uygulamalara bir sinyal gönderir ve SQL Server kendi bellek kullanımını azaltarak yanıt verir. Diğer uygulamalardan çok azı, bu bildirimi dinlemek üzere tasarlanmadıkları için yanıt verir. SQL Server bellek kullanımını azalttığında, bellek havuzu küçülür ve belleğe ihtiyaç duyan bileşenler bunu alamayabilir. Sonuç olarak, 701 veya bellekle ilgili diğer hataları almaya başlarsınız. SQL Server dinamik olarak bellek ayırma ve boşaltma hakkında daha fazla bilgi için bkz. SQL Server bellek mimarisi. Ayrıntılı tanılama ve çözümler için bu makaledeki Dış bellek baskısı bölümüne bakın.

Üç geniş sorun kategorisi işletim sistemi bellek baskısına neden olabilir:

  • Uygulamayla ilgili sorunlar: Bir veya daha fazla uygulama birlikte kullanılabilir fiziksel belleği tüketer. İşletim sistemi, biraz bellek boşaltmaya çalışarak kaynaklar için yeni uygulama isteklerine yanıt verir. Belleği tüketen uygulamaları bulun ve RAM'i tüketmeden aralarındaki belleği dengelemek için adımlar atın.
  • Cihaz sürücüsü sorunları: Bir sürücü, bir bellek ayırma işlevini yanlış çağırırsa tüm işlemlerin çalışma kümelerinin sayfalanmasına neden olabilir.
  • İşletim sistemi ürün sorunları.

Ayrıntılı bir açıklama ve sorun giderme adımları için bkz. MSSQLSERVER_17890.

Altyapı dışı modüllerden gelen iç bellek baskısı

İç bellek baskısı, SQL Server işlemi içindeki faktörlerin neden olduğu düşük bellek kullanılabilirliğini ifade eder. SQL Server işlemi içinde çalışan bazı bileşenler SQL Server altyapısının dışındadır. Örnek olarak bağlı sunucular, SQLCLR yordamları veya işlevleri, genişletilmiş yordamlar (XP' ler) ve OLE Otomasyonu () gibi OLE DB sağlayıcıları (sp_OA*DLL'ler) verilebilir. Diğerleri, izleme amacıyla işleme DLL'ler ekleyen virüsten koruma veya güvenlik programlarıdır. Bu bileşenlerden herhangi birinde bir sorun veya zayıf tasarım, büyük bellek tüketimine neden olabilir. Örneğin, bir dış kaynaktan SQL Server belleğine 20 milyon veri satırını önbelleğe alarak bağlantılı bir sunucu düşünün. Altyapı açısından bakıldığında, hiçbir bellek katibi yüksek bellek kullanımını bildirmez, ancak SQL Server işlemi içinde tüketilen bellek yüksektir. Bağlı sunucu DLL'sinden gelen bu bellek büyümesi, SQL Server bellek kullanımını azaltmaya başlamasına neden olur ve altyapı bileşenleri için yetersiz bellek koşulları oluşturur ve bu da yetersiz bellek hatalarına yol açar. Ayrıntılı tanılama ve çözümler için bkz. Altyapı dışı modüllerden gelen iç bellek baskısı.

Not

SQL Server işlem alanında kullanılan birkaç Microsoft DLL'leri (örneğin, MSOLEDBSQL ve SQL Server Native Client), raporlama ve ayırma için SQL Server bellek altyapısıyla arabirim oluşturabilir. Bunların bir listesini almak ve bazı bellek ayırmalarının tüketimini izlemek için SELECT * FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_HOST' komutunu çalıştırın. SQL Server Yerel İstemci (SNAC) kullanım dışı bırakıldı; yeni geliştirmede SQL Server için MSOLEDBSQL veya Microsoft ODBC Sürücüsü kullanılmalıdır.

SQL Server altyapı bileşenlerinden gelen iç bellek baskısı

SQL Server altyapısının içindeki bileşenlerden gelen iç bellek baskısı da yetersiz bellek hatalarına yol açabilir. memory clerk'leri aracılığıyla izlenen yüzlerce bileşen, SQL Server'da bellek ayırır. Sorunu çözmek için en büyük ayırmalardan hangi bellek memurlarının sorumlu olduğunu belirleyin. Örneğin, OBJECTSTORE_LOCK_MANAGER bellek görevlisi yüksek miktarda bellek ayırma gösteriyorsa, Kilit Yöneticisi'nin neden bu kadar fazla bellek tükettiğini öğrenin. Birçok kilit elde eden sorgular bulabilirsiniz. Dizinleri kullanarak, kilitleri uzun süre tutan işlemleri kısaltarak veya kilit yükseltmenin devre dışı bırakılıp bırakılmadığını denetleyerek bu sorguları iyileştirin. Her bellek katibi veya bileşeni, belleği kullanmanın benzersiz bir yoluna sahiptir. Daha fazla bilgi için bkz. sys.dm_os_memory_clerks ve bellek memuru türü açıklamaları. Ayrıntılı tanılama ve çözümler için bkz. SQL Server altyapısı tarafından iç bellek kullanımı.

Bellek basınç türleri

Aşağıdaki grafikte, SQL Server'da bellek yetersizlik koşullarına yol açabilecek baskı türleri gösterilmektedir:

Üç tür SQL Server bellek baskısını gösteren diyagram: dış/işletim sistemi, altyapı dışı modüllerden iç ve altyapı bileşenlerinden iç.

Bellek sorunlarını gidermek için tanılama araçları

Sorun giderme verilerini toplamak için aşağıdaki tanılama araçlarını kullanın.

Performans Monitörü

Performans İzleyicisi kullanarak aşağıdaki sayaçları ayarlayın ve toplayın:

  • Bellek:Kullanılabilir MBytes
  • İşlem:Çalışma Kümesi
  • İşlem:Özel Baytlar
  • SQL Server:Memory Manager: (tüm sayaçlar)
  • SQL Server:Buffer Manager: (tüm sayaçlar)

DMV’ler ve DBCC MEMORYSTATUS

SQL Server içindeki genel bellek kullanımını izlemek için sys.dm_os_memory_clerks veya DBCC MEMORYSTATUS kullanın. sys.dm_os_memory_clerks bellek katibi başına bir satır döndürür ve en çok bellek kullanan bileşenleri bulmak için en iyi başlangıç noktasıdır. DBCC MEMORYSTATUS, bilgileri bellek yöneticisine, arabellek havuzuna ve bellek katiplerine göre gruplandıran daha ayrıntılı bir anlık görüntü döndürür.

SSMS'de Bellek Tüketimi raporu

SQL Server Management Studio (SSMS) bellek kullanımını görüntülemek için:

  1. SSMS'yi açın ve bir sunucuya bağlanın.
  2. Nesne Gezgini SQL Server örnek adını seçip basılı tutun (veya sağ tıklayın).
  3. Bağlam menüsünde Raporlar>Standart Raporlar>Bellek Tüketimi öğesini seçin.

PSSDiag veya SQL LogScout

Bu veri noktalarını otomatik olarak yakalamak için PSSDiag veya SQL LogScout gibi bir araç kullanın.

  • PSSDiag kullanıyorsanız Perfmon toplayıcısını ve Özel Tanılama\SQL Bellek Hatası toplayıcısını yakalamak için ayarlayın.
  • SQL LogScout kullanıyorsanız, Bellek senaryosunu yakalayacak şekilde yapılandırın.

Belleği boşaltmak için hızlı rahatlama

Aşağıdaki eylemler biraz bellek boşaltabilir ve SQL Server kullanılabilir hale gelebilir. Kök nedeni araştırırken bunları kısa vadeli rahatlama olarak kullanın.

Bellek yapılandırmasını değiştirme

Aşağıdaki SQL Server bellek yapılandırma parametrelerini denetleyin ve mümkünse maksimum sunucu belleğini artırmayı göz önünde bulundurun:

  • en fazla sunucu belleği
  • en az sunucu belleği

Not

Olağan dışı ayarlar fark ederseniz, bunları gerektiği gibi düzeltin ve artan bellek gereksinimlerini hesaba katın. Varsayılan ayarlar Sunucu bellek yapılandırma seçeneklerinde listelenir.

Özellikle Sayfaları Bellekte Kilitle etkinken en yüksek sunucu belleğini ayarlamadıysanız, işletim sistemi için bellek bırakmak için bunu belirli bir değere ayarlayın. Daha fazla bilgi için Bellekte sayfaları kilitle (LPIM) sunucu yapılandırması seçeneğine bakın.

İş yükünü değiştirme veya taşıma

Eşzamanlı oturum sayısı ve şu anda çalışan sorgular dahil olmak üzere sorgu iş yükünü gözden geçirin. Daha az kritik uygulamaları geçici olarak durdurup durduramayacağınızı veya başka bir SQL Server örneğine taşıyıp taşıyamayacağınızı denetleyin.

Yalnızca okuma amaçlı iş yükleri için, bunları Always On ortamındaki yalnızca okunabilir bir ikincil replikaya taşımayı değerlendirin. Daha fazla bilgi için bkz. AlwaysOn kullanılabilirlik grubunun ikincil çoğaltmasına salt okunur iş yükünü boşaltma ve Always On kullanılabilirlik grubunun ikincil çoğaltmasına salt okunur erişimi yapılandırma.

Sanal makine bellek yapılandırmasını denetleme

Sanal makinede (VM) SQL Server çalıştırıyorsanız konağın VM belleğini aşırı kullanmadığından emin olun. Azure VM'lerde SQL Server için belleği boyutlandırma yönergeleri için bkz. Azure Sanal Makineler'de SQL Server için en iyi bellek yöntemleri. VMware tarafından barındırılan VM'ler için hiper yönetici satıcınızın aşırı bellek atamasını algılama ve önleme belgelerine bakın.

SQL Server'ın içindeki bellek serbest bırak

SQL Server bellek önbelleklerini boşaltmak için aşağıdaki DBCC komutlarından birini veya daha fazlasını çalıştırın. Yeniden doldurulması gereken önbellekleri temizlediklerinden üretim sistemlerinde bu komutları dikkatli kullanın:

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE

SQL Server hizmetini yeniden başlatın

Bellek tükenmesi kritikse ve SQL Server sorguları işleyemiyorsa, hizmeti son çare olarak yeniden başlatabilirsiniz. Bu eylem tüm etkin bağlantıları bırakır ve önbellekleri temizler, bu nedenle yalnızca diğer seçenekler başarısız olduğunda kullanın.

Resource Governor ayarlarını gözden geçirme

Resource Governor kullanıyorsanız, kaynak havuzu ve iş yükü grubu ayarlarını denetledikten sonra belleği çok önemli ölçüde sınırlamadığından emin olun. Daha fazla bilgi için bkz. Resource Governor.

Daha fazla RAM ekleme

Sorun önceki adımlardan sonra devam ederse, daha fazla araştırma yapıp fiziksel veya sanal sunucuda sunucu kaynaklarını (RAM) artırmayı göz önünde bulundurun.

Bellek baskısını tanılama ve düzeltme

Bellek yetersiz hatası yalnızca ara sıra veya kısa bir süre için görünüyorsa, sorun kısa süreli ve kendi kendine çözülebilir ve hiçbir eylem gerekmeyebilir. Hata birden çok bağlantıda birden çok kez oluşursa ve saniyeler veya daha uzun süre devam ederse, aşağıdaki bölümlerde yer alan tanılamaları ve çözümleri izleyerek kök nedeni belirleyin ve giderin.

Dış bellek baskısı

SQL Server işleminin dışındaki sistemde yetersiz bellek koşullarını tanılamak için aşağıdaki yöntemleri kullanın:

  • Performans İzleyicisi sayaçlarını toplayın. Bu sayaçlara bakarak SQL Server dışındaki uygulamaların veya hizmetlerin bu sunucuda bellek kullanıp kullanmadığını denetleyin:

    • Bellek:Kullanılabilir MBytes
    • İşlem:Çalışma Kümesi
    • İşlem:Özel Baytlar

    PowerShell kullanarak Perfmon günlük toplama örneği aşağıda verilmiştir:

    clear
    $serverName = $env:COMPUTERNAME
    $Counters = @(
       ("\\$serverName" +"\Memory\Available MBytes"),
       ("\\$serverName" +"\Process(*)\Working Set"),
       ("\\$serverName" +"\Process(*)\Private Bytes")
    )
    
    Get-Counter -Counter $Counters -SampleInterval 2 -MaxSamples 1 | ForEach-Object  {
    $_.CounterSamples | ForEach-Object   {
       [pscustomobject]@{
          TimeStamp = $_.TimeStamp
          Path = $_.Path
          Value = ([Math]::Round($_.CookedValue, 3)) }
    }
    }
    
  • Sistem olay günlüğünü gözden geçirin ve bellekle ilgili hataları (örneğin, düşük sanal bellek) arayın.

  • Uygulamayla ilgili bellek sorunları için Uygulama olay günlüğünü gözden geçirin.

    Sistem ve Uygulama olay günlüklerini "memory" anahtar sözcüğü için sorgulayan örnek bir PowerShell betiği aşağıda verilmiştir. Aramanız için "resource" gibi diğer dizeleri kullanabilirsiniz:

    Get-EventLog System -ComputerName "$env:COMPUTERNAME" -Message "*memory*"
    Get-EventLog Application -ComputerName "$env:COMPUTERNAME" -Message "*memory*"
    
  • Bellek kullanımını azaltmak için daha az kritik uygulamalara veya hizmetlere yönelik kod veya yapılandırma sorunlarını düzeltin.

  • SQL Server dışında uygulamalar kaynakları kullanıyorsa, bunları durdurmayı veya yeniden zamanlamasını deneyin ya da bunları ayrı bir sunucuda çalıştırın. Bu adımlar dış bellek baskısını kaldırır.

Altyapı dışı modüllerden gelen iç bellek baskısı

SQL Server içindeki modüllerin (DLL) neden olduğu iç bellek baskısını tanılamak için aşağıdaki yöntemleri kullanın:

  • SQL Server Bellekte Sayfaları Kilitle (AWE API'sini) kullanmıyorsa, bellek kullanımının çoğu Performans İzleyicisi'daki Process:Private Bytes sayacında (sqlservrörnek) görünür. SQL Server:Memory Manager: Toplam Sunucu Belleği (KB) sayacı, SQL Server altyapısının içinden genel bellek kullanımını gösterir. İşlem:Özel Baytlar ile SQL Server:Bellek Yöneticisi: Toplam Sunucu Belleği (KB) arasında önemli bir fark bulursanız, bu fark büyük olasılıkla bir DLL'den (bağlı sunucu, XP, SQLCLR vb.) kaynaklanmaktadır. Örneğin, Özel Bayt 300 GB ve Toplam Sunucu Belleği 250 GB ise, işlemdeki toplam belleğin yaklaşık 50 GB'ı SQL Server altyapısının dışından gelir.

  • SQL Server Sayfaları Bellekte Kilitle (AWE API) kullanıyorsa, Performans İzleyicisi tek işlemler için bellek kullanımını izleyen AWE sayaçları sunmadığından sorunu belirlemek daha zordur. SQL Server:Memory Manager: Toplam Sunucu Belleği (KB) sayacı, SQL Server altyapısındaki genel bellek kullanımını gösterir. Tipik İşlem:Özel Bayt değerleri genel olarak 300 MB ile 1-2 GB arasında değişebilir. İşlem:Özel Baytlar bu tipik aralıktan önemli ölçüde yüksekse, fark büyük olasılıkla bir DLL'den (bağlı sunucu, XP, SQLCLR vb.) kaynaklanır. Örneğin, Özel Bayt 4-5 GB ise ve SQL Server Sayfaları Bellekte Kilitle (AWE) kullanıyorsa, Özel Baytların büyük bir bölümü SQL Server altyapısının dışından gelebilir. Bu değer bir yaklaşık değerdir.

  • tasklist SQL Server işlemi içinde yüklenen DLL'leri tanımlamak için yardımcı programını kullanın.

    tasklist /M /FI "IMAGENAME eq sqlservr.exe"
    
  • Ayrıca, yüklenen modülleri (DLL) incelemek ve beklenmeyen bir şey olup olmadığını denetlemek için aşağıdaki sorguyu kullanabilirsiniz:

    SELECT * FROM sys.dm_os_loaded_modules
    
  • Bağlı bir sunucu modülünün önemli miktarda bellek tüketimine neden olduğundan şüpheleniyorsanız, İşleme izin ver seçeneğini temizleyerek işlem bitmek üzere ayarlayın. Daha fazla bilgi için bkz. Bağlı sunucular oluşturma. Bağlı sunucu OLE DB sağlayıcılarının tümü işlem dışı çalıştırılamaz. Daha fazla bilgi için sağlayıcı üreticisine başvurun.

  • OLE Otomasyonu nesnelerinin (sp_OA*) kullanıldığı nadir durumlarda, 4 bağlam değeri (yalnızca Yerel (.exe) OLE sunucusu belirterek nesneyi SQL Server dışındaki bir işlemde çalışacak şekilde ayarlayabilirsiniz. Daha fazla bilgi için bkz. sp_OACreate.

SQL Server altyapısı tarafından iç bellek kullanımı

SQL Server altyapısı içindeki bileşenlerden iç bellek baskısını tanılamak için aşağıdaki yöntemleri kullanın:

  • SQL Server için Performans İzleyicisi sayaçları toplamaya başlayın: SQL Server:Buffer Manager ve SQL Server:Memory Manager.

  • SQL Server memory clerks DMV’sini, bellek kullanımının motor içinde en çok nerede gerçekleştiğini görmek için birden çok kez sorgulayın.

    SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
    FROM sys.dm_os_memory_clerks
    ORDER BY pages_kb DESC
    
  • Alternatif olarak, daha ayrıntılı DBCC MEMORYSTATUS çıktısını ve bu hata iletilerini gördüğünüzde nasıl değiştiğini gözlemleyin.

    DBCC MEMORYSTATUS
    
  • Bellek görevlileri arasında açıkça sorunlu bir bileşen saptarsanız, o bileşenin bellek kullanım ayrıntılarına odaklanın. İşte birkaç örnek:

    • MEMORYCLERK_SQLQERESERVATIONS bellek görevlisi bellek tüketiyorsa, büyük bellek tahsisleri kullanan sorguları belirleyin ve bunları dizinler kullanarak, yeniden yazarak (örneğin, ORDER BY öğesini kaldırarak) veya bellek tahsisi sorgu ipuçlarını (MIN_GRANT_PERCENT ve MAX_GRANT_PERCENT) uygulayarak iyileştirin. Daha fazla bilgi için bkz. Sorgu ipuçları. Bellek verme kullanımını denetlemek için bir kaynak havuzu da oluşturabilirsiniz . Bellek atamaları 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.
    • Çok sayıda geçici sorgu planı önbelleğe alınmışsa, CACHESTORE_SQLCP bellek katibi büyük miktarda bellek kullanır. Planları yeniden kullanılamayan parametreleştirilmemiş sorguları belirleyin ve bunları saklı yordamlara dönüştürerek, sp_executesql kullanarak veya FORCED parametreleştirmesini kullanarak parametreleştirin. İzleme bayrağı 174 etkinse, bunun sorunu çözüp çözmediğini görmek için bu bayrağı devre dışı bırakabilirsiniz.
    • Nesne planı önbellek deposu CACHESTORE_OBJCP çok fazla bellek tüketiyorsa, hangi saklı yordamların, işlevlerin veya tetikleyicilerin büyük miktarda bellek kullandığını belirleyin ve uygulamayı yeniden tasarlamayı düşünün. Bu genellikle her biri yüzlerce yordam içeren birçok veritabanı veya şemada gerçekleşir.
    • OBJECTSTORE_LOCK_MANAGER Bellek katibi büyük ayırmalar gösteriyorsa, birçok kilit alan sorguları tanımlayın ve dizinleri kullanarak bunları iyileştirin. Belirli yalıtım düzeylerinde uzun süre kilitleri tutan işlemleri kısaltın veya kilit yükseltmenin devre dışı bırakılıp bırakılmadığını denetleyin.
    • Çok büyük bir TokenAndPermUserStore (SELECT type, name, pages_kb FROM sys.dm_os_memory_clerks WHERE name = 'TokenAndPermUserStore') gözlemlerseniz, önbellek boyutunu sınırlamak için izleme bayrağı 4618'i kullanabilirsiniz.
    • MEMORYCLERK_XTP memory clerk bileşeninden In-Memory OLTP ile ilgili bellek sorunları gözlemlerseniz, In-Memory OLTP için bellek kullanımını izleme ve sorun giderme ve Bellek için iyileştirilmiş tempdb meta verilerinde (HkTempDB) bellek yetersizliği hataları konularına bakın.

Sık sorulan sorular

SQL Server neden sunucudaki neredeyse tüm RAM'leri kullanıyor?

Tasarım gereği, SQL Server arabellek havuzu veri sayfalarını önbelleğe almak ve fiziksel G/Ç'yi azaltmak için büyür, bu nedenle sabit durum belleği kullanımı genellikle en fazla sunucu belleği ayarına yaklaşır. Bu davranış beklenen bir davranıştır ve bir sızıntı değildir. Tüketimi sınırlayıp işletim sistemi ve diğer işlemler için boşluk bırakmak için maksimum sunucu belleğini yapılandırın. Ayrıntılar için bkz . Sunucu belleği yapılandırma seçenekleri.

Görev Yöneticisi'nde gösterilen maksimum sunucu belleği ile işlenen bellek arasındaki fark nedir?

En fazla sunucu belleği ayarı, SQL Server arabellek havuzunun ve altyapı içindeki çoğu bellek katibinin ayırabileceği belleğe üst sınır koyar. Görev Yöneticisi, işlemin tamamı sqlservr.exe için kaydedilmiş belleği gösterir. Bu görünüm, CLR, bağlı sunucu sağlayıcıları, genişletilmiş saklı yordamlar ve yedekleme arabellekleri gibi bileşenlerin arabellek havuzu dışında gerçekleştirdiği ayırmaları içerir. Sonuç olarak, toplam işlem belleği maksimum sunucu belleğini aşabilir. Daha fazla bilgi için bkz . Bellek yönetimi mimarisi kılavuzu.

Sayfaları Bellekte Kilitle (LPIM) özelliğini ne zaman etkinleştirmeliyim?

İşletim sistemi SQL Server çalışma kümesini kırptığında Bellekteki Sayfaları Kilitle'yi etkinleştirin. Bu sorun, Toplam Sunucu Belleğindehata 17890 veya ani düşüş olarak ortaya çıkar. İşletim sistemi ve diğer işlemler için RAM'den çıkmak için LPIM'i açık bir maksimum sunucu bellek değeriyle eşleştirin. LpIM'i her örnekte varsayılan olarak etkinleştirmeyin. Bunu doğrulanmış bir sayfalama sorununu gidermek için kullanın.

sys.dm_os_memory_clerks bana ne anlatır?

sys.dm_os_memory_clerks, SQL Server motorundaki her etkin bellek görevlisi için bir satır ve görevlisinin ayırdığı bellek miktarını döndürür. En çok belleği hangi bileşenin (örneğin, arabellek havuzu, plan önbelleği, kilit yöneticisi veya sorgu bellek ayırmaları) kullandığını bulmak ve iyileştirme çalışmalarınızı buna göre yönlendirmek için bunu kullanın.