Aracılığıyla paylaş


Sunucu belleği yapılandırma seçenekleri

Şunlar için geçerlidir: SQL Server

SQL Server Veritabanı Altyapısı için bellek kullanımı, bir yapılandırma ayarları çifti, en düşük sunucu belleği (MB) ve en fazla sunucu belleği (MB) ile sınırlanır. Sql Server, zaman içinde ve normal koşullarda maksimum sunucu belleği (MB) tarafından ayarlanan sınıra kadar bellek talep etmeye çalışır.

Uyarı

Columnstore dizinleri: genel bakış ve In-Memory OLTP'ye genel bakış ve kullanım senaryoları nesnelerinin kendi bellek katipleri vardır ve bu da arabellek havuzu kullanımını izlemeyi kolaylaştırır. Daha fazla bilgi için bkz. sys.dm_os_memory_clerks.

SQL Server'ın eski sürümlerinde bellek kullanımı pratikte sınırsızdı ve SQL Server'a tüm sistem belleğinin kullanılabilir olduğunu belirtiyordu. Sql Server'ın tüm sürümlerinde, en fazla sunucu belleğini (MB) yapılandırarak SQL Server bellek kullanımı için üst sınır yapılandırmanız önerilir.

  • SQL Server 2019 'dan (15.x) bu yana, Windows sunucularında SQL Kurulumu, yükleme sırasında kullanılabilir sistem belleği yüzdesine göre tek başına bir SQL Server örneği için en fazla sunucu belleği (MB) için bir öneri sağlar.
  • İstediğiniz zaman, en düşük sunucu belleği (MB ) ve en fazla sunucu belleği (MB) yapılandırma seçenekleri aracılığıyla SQL Server örneği tarafından kullanılan bir SQL Server işlemi için bellek sınırlarını (megabayt cinsinden) yeniden yapılandırabilirsiniz.

Uyarı

Bu kılavuz, Windows'ta SQL Server örneğine başvurur. Linux'ta bellek yapılandırması hakkında bilgi için bkz. Linux üzerinde SQL Server için performans en iyi yöntemleri ve yapılandırma yönergeleri ve memory.memorylimitmb ayarı.

Öneriler

Bu seçenekler için varsayılan ayarlar ve izin verilen en düşük değerler şunlardır:

Seçenek Varsayılan İzin verilen en düşük değer Önerilir
en az sunucu belleği (MB) 0 0 0
en fazla sunucu belleği (MB) 2.147.483.647 megabayt (MB) 128 MB 75% kullanılabilir sistem belleği, diğer örnekler de dahil olmak üzere diğer işlemler tarafından tüketilmiyor. Daha ayrıntılı öneriler için bkz. En fazla sunucu belleği.

Bu sınırlar içinde SQL Server, kullanılabilir sistem kaynaklarına göre bellek gereksinimlerini dinamik olarak değiştirebilir. Daha fazla bilgi için bkz. dinamik bellek yönetimi.

  • En yüksek sunucu belleği (MB) değerinin çok yüksek ayarlanması, tek bir SQL Server örneğinin aynı konakta barındırılan diğer SQL Server örnekleriyle bellek için rekabete neden olabilir.
  • Ancak en fazla sunucu belleğinin (MB) çok düşük ayarlanması performans kaybına neden olur ve SQL Server örneğinde bellek baskısı ve performans sorunlarına neden olabilir.
  • En yüksek sunucu belleğinin (MB) en düşük değere ayarlanması SQL Server'ın başlatılmasını bile engelleyebilir. Bu seçeneği değiştirdikten sonra SQL Server'ı başlatamıyorsanız başlangıç seçeneğini kullanarak -f başlatın ve en fazla sunucu belleğini (MB) önceki değerine sıfırlayın. Daha fazla bilgi için bkz. Veritabanı Altyapısı Hizmeti başlangıç seçenekleri.
  • En fazla sunucu belleği (MB) ve en düşük sunucu belleğinin (MB) aynı değere veya aynı değerlere yakın olacak şekilde ayarlanması önerilmez.

Uyarı

En fazla sunucu belleği seçeneği yalnızca SQL Server arabellek havuzunun boyutunu sınırlar. Maksimum sunucu belleği seçeneği, genişletilmiş saklı yordamlar, COM nesneleri, paylaşılmayan DLL'ler ve EXE'ler gibi diğer bileşenlerin ayrılması için SQL Server'ın bıraktığı kalan rezerv edilmemiş bellek alanını sınırlamaz.

SQL Server, belleği dinamik olarak kullanabilir. Ancak, bellek seçeneklerini el ile ayarlayabilir ve SQL Server'ın erişebileceği bellek miktarını kısıtlayabilirsiniz. SQL Server için bellek miktarını ayarlamadan önce, toplam fiziksel bellekten, işletim sistemi (OS) için gereken bellek, maksimum sunucu belleği (MB) ayarı tarafından denetlenmeyen bellek ayırmaları ve diğer SQL Server örneklerinin yanı sıra sunucuda bellek tüketen diğer uygulamalar varsa bu sistem kullanımlarını çıkararak uygun bellek ayarını belirleyin. Bu fark, geçerli SQL Server örneğine atayabileceğiniz en fazla bellek miktarıdır.

Bellek, tüm SQL Server sürümlerinde işlem sanal adres alanı sınırına kadar yapılandırılabilir. Daha fazla bilgi için bkz. Windows ve Windows Server Sürümleri için Bellek Sınırları.

En az sunucu belleği

SQL Server Bellek Yöneticisi'nin kullanabileceği en düşük bellek miktarını garanti etmek için en az sunucu belleği (MB) kullanın.

  • SQL Server başlangıçta en az sunucu belleğinde (MB) belirtilen bellek miktarını hemen ayırmaz. Ancak, istemci yükü nedeniyle bellek kullanımı bu değere ulaştıktan sonra, en düşük sunucu belleği (MB) değeri azaltılmadığı sürece SQL Server belleği boşaltamaz. Örneğin, aynı sunucuya birden çok SQL Server örneği eş zamanlı olarak yüklendiğinde, bir örneğin belleğini ayırmak için en düşük sunucu belleği (MB) parametresini ayarlamayı göz önünde bulundurun.

  • Sanallaştırılmış bir ortamda, konuk sanal makine (VM) üzerindeki önbellek havuzundan bellek tahsisatını kabul edilebilir performans için gerekenden fazla azaltma girişimlerini önlemek amacıyla, en düşük sunucu belleği (MB) değerinin ayarlanması gereklidir. Bu, temel konağın bellek baskısını azaltmaya yardımcı olur. İdeal olarak, bir sanal makinedeki SQL Server örneklerinin sanal konak proaktif bellek geri alma işlemleriyle rekabet etmelerine gerek kalmaz.

  • SQL Server'ın en düşük sunucu belleğinde (MB) belirtilen bellek miktarını ayırması garanti değildir. Sunucudaki yük hiçbir zaman en düşük sunucu belleğinde (MB) belirtilen bellek miktarını ayırmayı gerektirmiyorsa, SQL Server daha az bellek kullanır.

En fazla sunucu belleği

İşletim sisteminin ve diğer uygulamaların SQL Server'dan gelen zarar verici bellek baskısı yaşamamalarını sağlamak için en fazla sunucu belleği (MB) kullanın.

  • Maksimum sunucu belleği (MB) yapılandırmasını ayarlamadan önce, normal işlem sırasında SQL Server örneğini barındıran sunucunun genel bellek tüketimini izleyerek bellek kullanılabilirliğini ve gereksinimlerini belirleyin. İlk yapılandırmada veya zaman içinde SQL Server işlem belleği kullanımını toplama fırsatı olmadığında, tek bir örnek için en fazla sunucu belleğini (MB) yapılandırmak için aşağıdaki genelleştirilmiş en iyi yöntem yaklaşımını kullanın:
    • Toplam işletim sistemi belleğinden, maksimum sunucu belleği (MB) denetimi dışındaki olası SQL Server iş parçacığı bellek ayırmalarının eşdeğerini çıkarın; bu, yığın boyutu1'inhesaplanan en fazla çalışan iş parçacığı2 ile çarpılmasıdır.
    • Ardından, maksimum sunucu belleği (MB) denetimi dışındaki, kontrolden çıkmış diğer bellek tahsisatları için 25 birim% çıkarın. Bu tahsisatlar arasında yedekleme arabellekleri, genişletilmiş saklı yordam DLL'leri, Otomatizasyon yordamları (çağrılar) kullanılarak oluşturulan nesneler ve bağlı sunucu sağlayıcılarından yapılan tahsisatlar yer alabilir. Bu yalnızca genel bir tahmindir ve deneyimleriniz farklılık gösterebilir.
    • Kalan tek bir örnek kurulumu için en yüksek sunucu belleği (MB) ayarı olmalıdır.

1 Mimari başına iş parçacığı yığın boyutları hakkında bilgi için Bellek Yönetimi Mimarisi kılavuzuna bakın.

2 Geçerli konaktaki belirli sayıda ilişkili CPU için hesaplanan varsayılan işçi dizileri hakkında daha fazla bilgi için bkz. Sunucu yapılandırması: maksimum işçi dizileri.

Seçenekleri el ile ayarlama

Sunucu seçenekleri en az sunucu belleği (MB) ve en fazla sunucu belleği (MB) bir bellek değerine yayılacak şekilde ayarlanabilir. Bu yöntem, sistem veya veritabanı yöneticilerinin SQL Server örneğini diğer uygulamaların bellek gereksinimleriyle veya aynı konakta çalışan diğer SQL Server örnekleriyle yapılandırmaları için kullanışlıdır.

Transact-SQL kullanma

En düşük sunucu belleği (MB) ve en fazla sunucu belleği (MB) seçenekleri gelişmiş seçeneklerdir. Bu ayarları değiştirmek için sistem saklı yordamını kullanırken sp_configure , bunları yalnızca gelişmiş seçenekleri göster ayarı 1 olarak ayarlandığında değiştirebilirsiniz. Bu ayarlar sunucu yeniden başlatılmadan hemen etkinleşir. Daha fazla bilgi için bkz. sp_configure.

Aşağıdaki örnek , en fazla sunucu belleği (MB) seçeneğini 12.288 MB veya 12 GB olarak ayarlar. Her ne kadar sp_configure seçeneğinin adını max server memory (MB) olarak belirtse de, (MB) öğesini atlayabilirsiniz.

EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO

Aşağıdaki sorgu, şu anda yapılandırılmış olan değerler ve şu anda kullanımda olan değer hakkında bilgi döndürür. Bu sorgu, 'gelişmiş seçenekleri göster' seçeneğinin sp_configure etkinleştirilip etkinleştirilmediğine bakılmaksızın sonuçları döndürür.

SELECT [name],
       [value],
       [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
      OR [name] = 'min server memory (MB)';

SQL Server Management Studio'yu kullanma

BIR SQL Server örneği için SQL Server Bellek Yöneticisi tarafından yönetilen bellek miktarını (megabayt cinsinden) yeniden yapılandırmak için en az sunucu belleği (MB) ve en fazla sunucu belleği (MB) kullanın.

  1. Nesne Gezgini'nde bir sunucuya sağ tıklayın ve Özellikler'i seçin.

  2. Sunucu Özellikleri penceresinin Bellek sayfasını seçin. En düşük sunucu belleği ve En fazla sunucu belleği geçerli değerleri görüntülenir.

  3. Sunucu belleği seçenekleri'nde, En az sunucu belleği ve En fazla sunucu belleği için istenen sayıları girin. Öneriler için bu makalede en az sunucu belleği (MB) ve en fazla sunucu belleği (MB) konularına bakın.

Aşağıdaki ekran görüntüsü üç adımı da gösterir:

SSMS'deki bellek yapılandırma seçeneklerinin ekran görüntüsü.

Bellekteki sayfaları kilitleme (LPIM)

Windows tabanlı uygulamalar, fiziksel belleği ayırmak ve işlem adres alanına eşlemek için Windows Adres Pencereleme Uzantıları (AWE) API'lerini kullanabilir. LPIM Windows ilkesi, hangi hesapların API'ye erişebileceğini belirleyerek verileri fiziksel bellekte tutmayı sağlar ve sistemin verileri diskteki sanal belleğe sayfalamasını önler. AWE kullanılarak ayrılan bellek, uygulama açıkça boşaltılana veya sonlandırılana kadar kilitli kalır. 64 bit SQL Server'da bellek yönetimi için AWE API'lerini kullanmak genellikle kilitli sayfalar olarak da adlandırılır. Bellekteki sayfaları kilitlemek, bellek diske yazıldığında sunucunun yanıt verebilir durumda kalmasına yardımcı olabilir. Çalıştırılacak ayrıcalıklara sahip hesaba bellekteki Windows Lock sayfaları (LPIM) kullanıcı hakkı verildiğinde, Sayfaları sqlservr.exe seçeneği SQL Server Standard sürümü ve üzeri örneklerde etkinleştirilir.

SQL Server'da Sayfaları bellekte kilitle seçeneğini devre dışı bırakmak için, SQL Server'ı çalıştırma ayrıcalığına sahip hesap için Bellekteki sayfaları kilitle kullanıcı hakkını kaldırın (SQL Server başlangıç hesabı).

LPIM'nin kullanılması SQL Server dinamik bellek yönetimini etkilemez ve diğer bellek katiplerinin isteği üzerine genişletilmesine veya küçültülmesini sağlar. Sayfaları bellekte kilitle kullanıcı hakkı kullanılırken, maksimum sunucu belleği (MB) için üst sınır ayarlanması kesinlikle önerilir. Daha fazla bilgi için bkz. En fazla sunucu belleği (MB).

İşlemin disk belleğine alındığını gösteren sqlservr işaretler olduğunda LPIM kullanılmalıdır. Bu durumda, hata 17890 Hata günlüğünde aşağıdaki örniğe benzer şekilde bildirilir:

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

LpIM'in sistemdeki diğer bellek tüketicilerini hesaba eklemeyen hatalı yapılandırılmış en fazla sunucu belleği (MB) ayarıyla kullanılması, diğer işlemlerin gerektirdiği bellek miktarına veya SQL Server bellek gereksinimleri en fazla sunucu belleği (MB) kapsamı dışında kalan bellek miktarına bağlı olarak tutarsızlıklara neden olabilir. Daha fazla bilgi için bkz. En fazla sunucu belleği. Bellekteki sayfaları kilitleme (LPIM) ayrıcalığı verilirse (32 bit veya 64 bit sistemlerde), varsayılan değer olan 2.147.483.647 megabayt (MB) yerine en yüksek sunucu belleğini (MB) belirli bir değere ayarlamanızı kesinlikle öneririz.

Uyarı

SQL Server 2012'den (11.x) başlayarak, Standard Edition'ın kilitli sayfaları kullanması için İzleme Bayrağı 845 gerekmez.

Sayfaları bellekte kilitlemeyi etkinleştirme

Önceki bilgileri dikkate aldıktan sonra, SQL Server örneğinin hizmet hesabına ayrıcalık vererek Sayfaları bellekte kilitle seçeneğini etkinleştirmek için bkz. Sayfaları bellekte kilitle Seçeneğini (Windows) etkinleştirme.

SQL Server örneği için hizmet hesabını belirlemek üzere, SQL Server Configuration Manager'a bakın veya service_account'den sys.dm_server_services sorgulayın. Daha fazla bilgi için bkz. sys.dm_server_services.

Bellekte sayfaları kilitleme durumunu görüntüle

Sql Server örneğinin hizmet hesabına Bellekteki sayfaları kilitleme ayrıcalığının verilip verilmediğini belirlemek için aşağıdaki sorguyu kullanın. Bu sorgu SQL Server 2016 (13.x) SP1 ve sonraki sürümlerde desteklenir.

SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

Aşağıdaki değerleri sql_memory_model_desc LPIM'in durumunu gösterir:

  • CONVENTIONAL. Sayfaları bellekte kilitleme ayrıcalığı verilmez.
  • LOCK_PAGES. Bellekte sayfaları kilitleme yetkisi verildi.
  • LARGE_PAGES. İzleme Bayrağı 834 etkinken, sayfaları bellekte kilitleme ayrıcalığı Kurumsal modda verilir. Bu gelişmiş bir yapılandırmadır ve çoğu ortam için önerilmez. Daha fazla bilgi ve önemli uyarılar için bkz. İzleme Bayrağı 834.

SQL Server örneğinin kilitli sayfalar kullanıp kullanmadığını belirlemek için aşağıdaki yöntemleri kullanın:

  • Aşağıdaki Transact-SQL sorgusunun çıktısı, locked_page_allocations_kb için sıfır olmayan değerleri belirtir:

    SELECT osn.node_id,
           osn.memory_node_id,
           osn.node_state_desc,
           omn.locked_page_allocations_kb
    FROM sys.dm_os_memory_nodes AS omn
         INNER JOIN sys.dm_os_nodes AS osn
             ON (omn.memory_node_id = osn.memory_node_id)
    WHERE osn.node_state_desc <> 'ONLINE DAC';
    
  • Geçerli SQL Server hata günlüğü, Using locked pages in the memory manager sunucu başlatma sırasında iletiyi bildirir.

  • DBCC MEMORYSTATUS çıkışının Bellek Yöneticisi bölümü, AWE Allocated öğesi için sıfır olmayan bir değer gösterir.

SQL Server'ın birden çok örneği

Veritabanı Altyapısı'nın birden çok örneğini çalıştırırken, belleği yönetmek için kullanabileceğiniz farklı yaklaşımlar vardır:

  • Daha önce açıklandığı gibi bellek kullanımını denetlemek için her örnekte en fazla sunucu belleği (MB) kullanın. Toplam ödeneğin makinenizdeki toplam fiziksel bellekten fazla olmadığına dikkat edin ve her örnek için en yüksek ayarları yapın. Her örneğe beklenen iş yükü veya veritabanı boyutuyla orantılı bellek vermek isteyebilirsiniz. Bu yaklaşım, yeni işlemler veya örnekler başlatıldığında, boş belleğin hemen kullanılabilmesi avantajına sahiptir. Dezavantajı, tüm örnekleri çalıştırmıyorsanız, çalışan örneklerin hiçbirinin kalan boş belleği kullanamamasıdır.

  • Daha önce ayrıntılı olarak açıklandığı gibi bellek kullanımını denetlemek için her örnekte en az sunucu belleği (MB) kullanın. Bu minimum değerlerin toplamının makinenizdeki toplam fiziksel bellekten 1 - 2 GB daha az olması için her örnek için en düşük ayarları oluşturun. Yine, bu minimum değerleri söz konusu örneğin beklenen yüküyle orantılı olarak belirleyebilirsiniz. Bu yaklaşım, tüm örneklerin aynı anda çalışmaması durumunda, çalışanların kalan boş belleği kullanabilmesi avantajına sahiptir. Bu yaklaşım, sql Server'ın en azından makul miktarda bellek elde etmesini sağlayacağından, bilgisayarda yoğun bellek kullanan başka bir işlem olduğunda da kullanışlıdır. Bunun dezavantajı, yeni bir örnek (veya başka bir işlem) başlatıldığında, çalışan örneklerin bellek bırakması biraz zaman alabilir, özellikle de bunun için veritabanlarına değiştirilmiş sayfalar yazmaları gerekiyorsa.

  • Her örnekte en fazla sunucu belleği (MB) ve en düşük sunucu belleği (MB) kullanarak çok çeşitli olası bellek kullanım düzeylerinde her örneğin maksimum kullanımını ve minimum bellek korumasını gözlemleyin ve ayarlayın.

  • Hiçbir şey yapma (önerilmez). İlk örnekler, bir iş yüküyle sunulduğunda tüm belleği kullanma eğilimindedir. Boşta kalan örnekler veya daha sonra başlatılan örnekler, kullanılabilir belleğin yalnızca en az miktarda olduğu şekilde çalışmaya devam edebilir. SQL Server, örnekler arasında bellek kullanımını dengelemeye çalışmaz. Ancak tüm örnekler, bellek ayak izinin boyutunu ayarlamak için Windows Bellek Bildirimi sinyallerine yanıt verir. Windows, Bellek Bildirimi API'siyle uygulamalar arasında bellek dengelemesi yapmaz. Yalnızca sistemdeki belleğin kullanılabilirliği hakkında genel geri bildirim sağlar.

Örnekleri yeniden başlatmadan bu ayarları değiştirebilirsiniz, böylece kullanım deseniniz için en iyi ayarları bulmak için kolayca deneme yapabilirsiniz.

Örnekler

A. En fazla sunucu belleği seçeneğini 4 GB olarak ayarlayın

Aşağıdaki örnek , en fazla sunucu belleği (MB) seçeneğini 4096 MB veya 4 GB olarak ayarlar. Her ne kadar sp_configure seçeneğinin adını max server memory (MB) olarak belirtse de, (MB) öğesini atlayabilirsiniz.

EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

Yeni bellek sınırının, Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. yürütüldüğünde hemen geçerli olduğu gibi bir deyim çıktısı verecektir RECONFIGURE. Daha fazla bilgi için bkz. sp_configure.

B. Geçerli bellek ayırmayı belirleme

Aşağıdaki sorgu, şu anda ayrılmış bellek hakkındaki bilgileri döndürür.

SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
       large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
       locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
       virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
       virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
       virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
       page_fault_count AS sql_page_fault_count,
       memory_utilization_percentage AS sql_memory_utilization_percentage,
       process_physical_memory_low AS sql_process_physical_memory_low,
       process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

C. değerini görüntüleme max server memory (MB)

Aşağıdaki sorgu, şu anda yapılandırılmış olan değer ve kullanımdaki değer hakkında bilgi döndürür. Bu sorgu, 'gelişmiş seçenekleri göster' seçeneğinin sp_configure etkinleştirilip etkinleştirilmediğine bakılmaksızın sonuçları döndürür.

SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';