Belirli bir SQL Server örneğinin “Sayfaları Bellekte Kilitle” hakkı olup olmadığını nasıl güvenilir bir şekilde belirleyebilirim?


12

SQL Server tarafından kullanılan hizmet hesabına "Bellekteki Sayfaları Kilitle" hakkı verilebilir. Bu, SQL Server'ın belleğin diske sayfalanmasını engellemesini sağlar.

SQL Server makinelerimizin birçoğunun, SQL Server tarafından kullanılan hizmet hesabı için bu hakka izin verecek şekilde yapılandırılmış yerel ilkesine sahip olmadığını fark ettim. Çok sayıda sunucumuz olduğu için, "Yerel Sistem İlkesi" yönetim konsolunu kullanarak her birini manuel olarak kontrol etmek en iyisi sıkıcı olacaktır.

Bir T-SQL sorgusu, genişletilmiş saklı yordamı veya söz konusu sunucunun doğru olup olmadığını belirlemek için kullanabileceğim başka bir yöntem var mı?

Ben istiyorum değil kullanmak EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';o anki SQL Server hata günlüğüne kontrol dayanır beri; ve bu hata günlüğü, sunucunun en son yeniden başlatılmasından bu yana günlüğün devredildiği varsayılarak ilgili girdiyi içermeyebilir. Ben ilk parametreyi değiştirmek tarafından eski günlükleri kontrol edebilir gerçekleştirmek 0için 1ancak biz sadece 10 hata günlükleri elde vb, ve bu yeterli olmayabilir. Ayarı onaylamak için güvenli bir yol istiyorum.

Yanıtlar:


11

Bir xp_cmdshellseçenek varsa , burada aşağıdakilerden yararlanan bir komut dosyası verilmiştir whoami:

DECLARE @LockPagesInMemory VARCHAR(255);
SET @LockPagesInMemory = 'UNKNOWN';
DECLARE @Res TABLE
(
    [output] NVARCHAR(255) NULL
);

IF (SELECT value_in_use
    FROM sys.configurations c
    WHERE c.name = 'xp_cmdshell'
    ) = 1
BEGIN
    INSERT INTO @Res
    EXEC xp_cmdshell 'WHOAMI /PRIV';

    IF EXISTS (SELECT *
        FROM @Res 
        WHERE [output] LIKE 'SeLockMemoryPrivilege%'
        )
        SET @LockPagesInMemory = 'ENABLED';
    ELSE
        SET @LockPagesInMemory = 'DISABLED';
END

SELECT LockPagesInMemoryEnabled = @LockPagesInMemory;

whoami.exehesap yürütme tarafından sahip olunan tüm hakları bildirme yeteneğine sahiptir whoami. Bu, xp_cmdshellSQL Server örneğinin bellekteki sayfaları kilitlemek için gerekli hakka sahip olup olmadığını belirlemek için güvenilir bir yol sağlar.

Eğer xp_cmdshellbu kod döner etkin değildir UNKNOWN. SQL Server hesabı için sağ ve etkin olduğu varsayılırsa xp_cmdshell , geri döner ENABLED, aksi takdirde geri döner DISABLED.


9

Başka yöntemler de var. Belki iki DMV kullanabilirsiniz. Her ikisinin de sadece SQL Server 2008 ve üstü için çalışacağını lütfen unutmayın.

Sıfır olmayan bir değer locked_page_allocations_kb, SQL Server hesabının bellek ayrıcalığında Kilitli sayfalara sahip olduğunu gösterir.

select osn.node_id, 
osn.memory_node_id, 
osn.node_state_desc, 
omn.locked_page_allocations_kb
from sys.dm_os_memory_nodes omn
inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
where osn.node_state_desc <> 'ONLINE DAC'

...ve:

select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys.dm_os_process_memory

Sütun Locked_pages_allocation_KBsıfırdan farklı bir değer gösteriyorsa, SQL Server hizmet hesabının bellek ayrıcalığına kilitli sayfaları da vardır.

...ve:

DBCC MEMORYSTATUSÇıktının "Bellek Yöneticisi" bölümünde "AWE Ayrıldı" için veya SQL Server hizmet hesabında bellek ayrıcalığında Kilitli sayfalar varsa sıfır olmayan bir değer gösterilir.

NOT:

SQL Server hizmet hesabı Yerel Sistem (NT Authority \ System) hesabıyla çalışıyorsa, SQL Server varsayılan olarak bellek ayrıcalığına Kilitli sayfalara sahip olacaktır.

Güncelleme:

Standart Sürüm için SQL Server 2012'den önce, izleme bayrağı t -845'in LPIM'den faydalanması için etkinleştirmemiz gerekir. SQL Server'ı LPIM ayrıcalığına sahip bir hesapla çalıştırıyor olsanız bile, izleme bayrağı etkinleştirilmediği sürece SQL Server LPIM avantajını kullanmaz.

2012'den itibaren LPIM avantajından yararlanmak için standart sürümde izleme işaretini etkinleştirmemize gerek yok.


4

SQL Server LPIM'den yararlanan bir bellek modeliyle (doğru izne sahip olmak yerine) çalışıyorsa, Microsoft, ürünün yeni sürümlerinde bunu kolaylaştırır. Bu bilgiler, SQL Server sürümünüze bağlı olarak sys.dm_os_sys_info'da bulunur. Geliştirme bir blog yayınında duyuruldu :

SQL Server 2016 SP1 ve SQL Server 2012 SP4 ile, sys.dm_os_sys_info'ya SQL Server hizmet hesabına atanmış olup olmadığını belirlemek için kullanılabilecek iki yeni sütun vardır.

Dikkat edilmesi gereken önemli bir nokta, yeni sütunlar, istenen bilgi olan SQL Server örneğinin başlatılmasından bu yana kullanılan sql bellek modelini rapor etmesidir. Sql hizmet hesabı için LPIM izinleri için işletim sistemi düzeyinde gerçekleştirilen bir denetim yoktur. SQL Server başlatılırken, SQL Server hizmet hesabı işlem belirtecinde LPIM ayrıcalığı varsa, SQL Server sql belleği ayırmak için kilitli sayfaları (ödenemez) kullanır. Ayrıca, sql hizmet hesabı ve izleme bayrağı 834 AÇIK olarak atanmış LPIM ayrıcalıklarıyla SQL Server Enterprise sürümünü çalıştırıyorsanız, SQL Server sql belleği ayırmak için büyük sayfalar kullanır.

Belirli bir SQL Server örneği için Bellek ayrıcalıklarındaki Sayfaları Kilitle seçeneğinin etkin olup olmadığını kontrol etmek için, sys.dm_os_sys_info'da sql_memory_model dosyasını sorgulayabilir ve 1'den büyük değerleri arayabilirsiniz.

Hizmet hesabı işlem belirtecinde LPIM izinleri yoksa, geleneksel bellek modeli kullanılır ve DMV tarafından bildirilir (sql_memory_model = 1). Şimdi, bellek ayrıcalığındaki kilit sayfaları SQL sunucusuna atanmış ancak SQL hizmeti yeniden başlatılmamışsa, DMV başlangıçtan beri yürürlükte olan bellek modeli olduğundan geleneksel bellek modelini bildirmeye devam edecektir. Yeniden başlatıldıktan sonra SQL Server, bellek modelinde kilitli sayfalar kullanır ve bu, sys.dm_os_sys_info'daki sql_memory_model ve sql_memory_model_desc tarafından bildirilir.

Sunucularımdan birinde aşağıdaki sorguyu çalıştırırsam:

SELECT sql_memory_model, sql_memory_model_desc
FROM sys.dm_os_sys_info;

Şu anda kullanımda olan bellek modeli CONVENTIONAL, yani sunucu başlatıldığında LPIM'in verilmediği anlamına gelir. Bununla birlikte, LPIM vermek, ancak SQL Server hizmetini yeniden başlatmak mümkün olmayabilir, bu nedenle bu DMV, sorunuzun tam niteliğine bağlı olarak sizin için yararlı olmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.