SQL Server 2017 se při pokusu o spuštění MSSQL-conf ukončí a vygeneruje základní Výpis na RHEL 7,4.

Příznaky

Po instalaci Microsoft SQL serveru 2017 na RHEL 7,4 program při pokusu o spuštění nástroje MSSQL-conf ukončí a vygeneruje základní Výpis. Kromě toho se do protokolů systemctl pro službu MSSQL-Server (journalctl-u MSSQL-Server. Service)zaznamená následující položka: 

V tomto programu došlo k závažné chybě a nelze pokračovat. K dispozici jsou následující diagnostické informace:   Důvod: 0x00000003       Zpráva: výsledek   StackTrace: 00005577212bcd92 0000557721266767        Proces: 590 – Sqlservr       Thread: 594 (Application Thread 0x1000)   ID instance: afe0f97b-fdbc-4A4D-910c-038e7ee2049b      ID chyby: 544c4c67-0f49-4877-A959-92c14798d58e   Vytvořit razítko: f7473acad6f0299cd161863aaa02e4284434ab6d915c7b467e2a14e907290249   Zachytávání jádra a informací...

Příčina

K tomuto problému dochází, protože SQL Server 2017 na Linux není kompatibilní se staršími rozloženími verze VA. Vzhledem k nastavení, která jsou zapnutá na RHEL 7,4, všechny procesy začínají pomocí legacy_va_layout. 

SQL Server v systému Linux při spuštění ověřuje rozsahy adres. Když najde nekompatibilitu kvůli staršímu rozložení verze VA, vyvolá příkaz Assert, ukončí program a vygeneruje základní Výpis.

RHEL 7,4 se může přepnout na používání starší verze VA z některého z následujících důvodů:

  • Limitní hodnota zásobníku je nastavená na neomezené (například změněné limity. conf nebo ulimit-s ).

  • Globální starší verze (s) je povolené (třeba sysctl VM. legacy_va_layout nebo změnit/etc/sysctl.conf).

Řešení

  1. V rozložení /etc/Security/Limits.conf přidejte nový řádek a zadejte následující kód:      mssql soft stack 8192 root soft stack 8192

  1. V rozložení /etc/sysctl.conf přidejte nový řádek a zadejte následující kód:     vm.legacy_va_layout = 0

  2. Restartujte počítač:  reboot

  1. Ujistěte se, že je nastavení měkkého zásobníku pro uživatele, kořen i adresu MSSQL8192. Přejděte na kontext uživatele a spusťte následující příkaz:  ulimit -s

  1. Zkontrolujte, jestli má globální starší verze VA rozložení 0:   Sysctl vm.legacy_va_layout

Další informace

Kontrola limitu velikosti zásobníku

Kontrola limitu velikosti zásobníku a nastavení legacy_va_layout (výchozí hodnoty jsou převzaté z novější instalace RHEL-7).

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

V případě nastavení v systému x64 se rozložení adresního prostoru podobá následujícímu:

+----------------------+ TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            ZÁSOBNÍK | +----------------------+ +----------------------+ MMAP_BASE (STACK_SIZE + RND_OFFSET) |          MMAP () | | vvvvvvvvvvvvvvvvvvvv | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            HALDA | +----------------------+ |     SEGMENTY ELF | +----------------------+ +----------------------+ 0

MMAP_BASE poblíž horního okraje adresního prostoru. Po přidání mapování se přidělující adresní prostor rozroste. Toto je výchozí nastavení pro RHEL a to, co SQL Server očekává, když se spustí.

Používání jednoduchého programu

Spusťte jednoduchý program, který mmaps stránku, a vrátí adresu získanou jádrem (příklad):

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

Pokud se však změní jeden nebo oba parametry, může se rozložení VA vrátit do svého staršího rozložení:

+----------------------+ TASK_SIZE ((1UL << 47)-PAGE_SIZE) |            ZÁSOBNÍK | | vvvvvvvvv ^ VVVVVVVVVV | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |          MMAP () | +----------------------+ TASK_UNMAPPED_BASE (PAGE_ALIGN (TASK_SIZE/3)) |                                  | |                                  | |                                  | |^^^^^^^^^^^^^^| |            HALDA | +----------------------+ |     SEGMENTY ELF | +----------------------+ +----------------------+ 0

Zde se MMAP_BASE umístí do jedné třetiny adresního prostoru. Při přidání mapování se přidělované adresnímu prostoru "zvětší se" (rozšíří se). Vzhledem k tomu, že v 64 bitové operační 42nd je k dispozici virtuální adresní prostor 47, připravuje se MMAP_BASE 0x2A0000000000 virtuální "". Proto se nárazníky MSSQL na adresách, které jsou už namapované pod 64TB, když se pokusí nastavit pevné mapy.

Úprava velikosti zásobníku pro růst neohraničené ("neomezené")

 [root@localhost ~] # ulimit-s  [root@localhost ~] #./mmap   mmap 0x2b6634464000

* Úprava virtuálního počítače legacy_va_layout

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

Můžete získat stejný efekt jako při nastavování virtuálního počítače. legacy_va_layout nastavením velikosti zásobníku tak, aby se nelimitoval. Rozdíl je v tom, že po nastavení virtuálního legacy_va_layout počítače správcem bude systém globálně používat starší verzi verze 1. (Jediný způsob, jak ho přepsat, je obnovit tento sysctl knoflíky na 0.) Pokud však máte VM. legacy_va_layout = 0 (výchozí), můžete tento charakteristiku upravit nastavením limitu velikosti zásobníku pro jednotlivá přihlášení vyvoláním ulimit (nebo přizpůsobením limitů. conf).

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

Děkujeme vám za váš názor! Pravděpodobně bude užitečné, když vás spojíme s některým z našich agentů podpory Office.

×