Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Belirtiler

Microsoft SQL Server 2017 ' i RHEL 7,4 üzerine yükledikten sonra, MSSQL-conf aracını çalıştırmayı denediğinizde program sonlanır ve çekirdek döküm oluşturur. Ayrıca, MSSQL-sunucu hizmeti için systemctl günlüklerinde (journalctl-u MSSQL-Server. Service)aşağıdaki giriş kaydedilir: 

Bu program önemli bir hatayla karşılaştı ve çalışmaya devam edemez. Aşağıdaki tanı bilgileri kullanılabilir:   Neden: 0x00000003       İleti: sonuç   StackTrace: 00005577212bcd92 0000557721266767        Süreç: 590-sqlservr       Thread: 594 (uygulama iş parçacığı 0x1000)   Örnek kimliği: afe0f97b-fdbc-4a4d-910c-038e7ee2049b      Kilitlenme kimliği: 544c4c67-0f49-4877-A959-92c14798vseç58e   Derleme damgası: f7473acad6f0299cd161863aaa02e4284434ab6d915c7b467e2a14e907290249   Temel döküm ve bilgi dökümü alınıyor...

Neden

Bu sorun, Linux 'daki SQL Server 2017 'in eski VA düzenleriyle uyumlu olmaması nedeniyle oluşur. RHEL 7,4 üzerinde etkinleştirilen ayarlar nedeniyle, tüm işlemler legacy_va_layout kullanılarak başlar. 

Başlangıç sırasında, Linux 'taki SQL Server adres aralıklarını doğrular. Eski bir VA düzeni nedeniyle bir uyumsuzluk bulduğunda, bir onaylama işlemi gerçekleştirir, programı sonlandırır ve temel döküm oluşturur.

RHEL 7,4, aşağıdaki nedenlerden biriyle eski bir VA düzeni kullanmaya geçebilir:

  • Soft Stack limit değeri sınırsız (örneğin, değiştirilmiş bir limit. conf komut dosyası veya bir ulimit-s ayarı) olarak ayarlanır.

  • Genel bir eski VA düzeni etkindir (örneğin, sysctl VM. legacy_va_layout veya /etc/sysctl.conf).

Çözüm

  1. /Etc/Security/Limits.conf düzeninde yeni bir satır ekleyin ve aşağıdaki kodu girin:      mssql soft stack 8192 root soft stack 8192

  1. /Etc/sysctl.conf düzeninde yeni bir satır ekleyin ve aşağıdaki kodu girin:     vm.legacy_va_layout = 0

  2. Bilgisayarı yeniden başlatın:  reboot

  1. Hem kullanıcıların, hem kök hem de MSSQLiçin yumuşak yığın ayarının 8192olduğundan emin olun. Kullanıcı bağlamına geçin ve aşağıdaki komutu çalıştırır:  ulimit -s

  1. Genel eski VA düzeninin 0olduğundan emin olun:   Sysctl vm.legacy_va_layout

Ek Bilgi

Yığın boyutu sınırını işaretleme

Yığın boyutu sınırını ve legacy_va_layout ayarını (yeni RHEL-7 yüklemesinden alınan varsayılan değerler) Gözden geçirme.

 [root@localhost ~]# sysctl vm.legacy_va_layout  vm.legacy_va_layout = 0  [root@localhost ~]# ulimit -s  8192

Bu ayarlar bir x64 sisteminde yapıldığında, adres alanı düzeni şuna benzer:

+----------------------+ TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            YıĞıN | +----------------------+ +----------------------+ MMAP_BASE (STACK_SIZE + RND_OFFSET) |          MMAP () | | vvvvvvvvvvvvvvvv | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            YıĞıN | +----------------------+ |     ELF KESIMLERI | +----------------------+ +----------------------+ 0

MMAP_BASE adres alanının en üstüne yakındır. Eşlemeler eklendiğinde, adres alanı ayırma "aşağı genişler". Bu, RHEL için varsayılan kurulum budur ve bu, SQL Server başlatıldığında karşılaşmanız beklenir.

Basit bir program çalıştırma

Bir sayfayı eşleyen basit bir program çalıştırarak, çekirdeğin döndürdüğü adresi döndürür (örnek):

mmap code ========= #include <stdio.h> #include <sys/mman.h>   int main() {     void* result = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);     printf("mmap %p\n", result);     return 0; }   [root@localhost ~]# ./mmap  mmap 0x7fb6976d6000

Bununla birlikte, parametrelerden biri veya ikisi değiştirilirse, VA düzeni eski düzenine geri döndürülebilir:

+----------------------+ TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            YıĞıN | | vvvvvvvvv ^ SanalDizinAdı | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |          MMAP () | +----------------------+ TASK_UNMAPPED_BASE (PAGE_ALIGN (TASK_SIZE/3)) |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            YıĞıN | +----------------------+ |     ELF KESIMLERI | +----------------------+ +----------------------+ 0

Burada MMAP_BASE adres alanının üçte birine yerleştirilmiştir. Eşlemeler eklendiğinde, adres alanı ayırması "büyüyor" (genişler). 64 bit Linux 'un 47 bit sanal adres alanı olduğu için, bit b, MMAP_BASE 3 2 TB sanal "0x2A0000000000." Dolayısıyla, sabit eşlemeleri ayarlamaya çalışıldığında 64TB 'nin altında eşlenmiş olan adreslerde MSSQL.

Sınırsız büyüme için yığın boyutunu ayarlama

 [root@localhost ~] # ulimit-s sınırsız  [root@localhost ~] #./mharita   MMAP 0x2b6634464000

* VM 'yi ayarlama. legacy_va_layout

 [root@localhost ~] # ulimit-s 8192  [root@localhost ~] # sysctl-w VM. legacy_va_layout = 1  VM. legacy_va_layout = 1  [root@localhost ~] #./mharita   MMAP 0x2b46f28f9000

VM 'yi ayarlamak ile aynı etkiyi elde edebilirsiniz; yığın boyutunu sınırsız olarak ayarlamak için legacy_va_layout. Fark, yönetici VM legacy_va_layout 'yi ayarladıktan sonra, sistem bu eski VA düzenini tüm işlemler için genel olarak kullanacaktır. (Bunu geçersiz kılmanın tek yolu, o ssctl öğesini 0olarak Sıfırlamaktan.) Bununla birlikte, VM. legacy_va_layout = 0 (varsayılan) ile karşılaşırsanız, ulimit (veya limit. conf 'i özelleştirme) vererek oturum açma

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin

Eğitimleri keşfedin >

Yeni özellikleri ilk olarak siz edinin

Microsoft Insider’a katılın >

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?

Geri bildiriminiz için teşekkürler!

×