Konfigurace a přizpůsobení kontejnerů SQL Serveru s Linuxem

Platí pro:SQL Server v Linuxu

Tento článek vysvětluje, jak nakonfigurovat a přizpůsobit kontejnery SQL Serveru s Linuxem pomocí Dockeru. Data můžete zachovat, přesunout soubory z kontejnerů a do kontejnerů a změnit výchozí nastavení.

Spropitné

K vytvoření nové instance SQL Serveru v kontejneru pro účely vývoje můžete použít sqlcmd (Go). Další informace najdete v tématu Vytvoření a dotazování kontejneru SQL Serveru.

Vytvoření přizpůsobeného kontejneru

Můžete vytvořit vlastní dockerfile pro sestavení přizpůsobeného kontejneru SQL Serveru. Další informace naleznete v tématu , ve kterém je ukázka, která kombinuje SQL Server a aplikaci Node. Pokud vytvoříte vlastní soubor Dockerfile, mějte na paměti hlavní proces, protože tento proces řídí životnost kontejneru. Pokud se ukončí, kontejner se vypne. Pokud například chcete spustit skript a následně spustit SQL Server, ujistěte se, že proces SQL Serveru je příkazem nejvíce vpravo. Všechny ostatní příkazy se spouští na pozadí. Následující příkaz to ilustruje v souboru Dockerfile:

/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr

Pokud jste příkazy v předchozím příkladu obrátili zpět, kontejner by se po dokončení skriptu do-my-sql-commands.sh vypnul.

Uchování dat

Změny konfigurace SQL Serveru a soubory databáze se uchovávají v kontejneru, i když kontejner restartujete pomocí docker stop a docker start. Pokud ale odeberete kontejner s docker rm, odstraní se všechno v kontejneru, včetně SQL Serveru a vašich databází. Následující část vysvětluje, jak pomocí datových svazků zachovat soubory databáze, i když jsou přidružené kontejnery odstraněny.

Důležitý

Pro SQL Server je důležité pochopit trvalost dat v Dockeru. Kromě diskuze v této části si přečtěte dokumentaci Dockeru o , jak spravovat data v kontejnerech Dockeru.

Připojte hostitelský adresář jako datový svazek

První možností je připojit adresář na vašem hostiteli jako datový svazek do kontejneru. K tomu použijte příkaz docker run s příznakem -v <host directory>:/var/opt/mssql, kde <host directory> je libovolná daná cesta. Například: C:\SQL ve Windows nebo ~/sqlvolumes v Linuxu. To umožňuje obnovení dat mezi spuštěními kontejneru.

Poznámka

Kontejnery pro SQL Server 2019 (15.x) a novější verze se automaticky spouštějí jako nekořenové, zatímco kontejnery SQL Serveru 2017 (14.x) se ve výchozím nastavení spouštějí jako root. Další informace o spouštění kontejnerů SQL Serveru jako ne root naleznete v tématu Zabezpečení kontejnerů SQL Serveru Linux.

Důležitý

Proměnná prostředí SA_PASSWORD je zastaralá. Místo toho použijte MSSQL_SA_PASSWORD.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2022-latest

Opatrnost

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Tato technika také umožňuje sdílet a zobrazovat soubory na hostiteli mimo Docker.

Použití kontejnerů datového svazku

Druhou možností je použít kontejner datového svazku. Kontejner datového svazku můžete vytvořit zadáním názvu svazku místo adresáře hostitele s parametrem -v. Následující příklad vytvoří sdílený datový svazek s názvem sqlvolume.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2022-latest

Opatrnost

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Tato technika pro implicitní vytvoření datového svazku v příkazu run nefunguje se staršími verzemi Dockeru. V takovém případě použijte explicitní kroky popsané v dokumentaci k Dockeru Vytvoření a připojení kontejneru datového svazku.

I když tento kontejner zastavíte a odeberete, datový svazek se zachová. Můžete ho zobrazit pomocí příkazu docker volume ls.

docker volume ls

Pokud pak vytvoříte jiný kontejner se stejným názvem svazku, použije nový kontejner stejná data SQL Serveru obsažená ve svazku.

Pokud chcete odebrat kontejner datového svazku, použijte příkaz docker volume rm.

Varování

Pokud kontejner datového svazku odstraníte, všechna data SQL Serveru v kontejneru se trvale odstraněna.

Zálohování a obnovení

Kromě těchto technik kontejnerů můžete také použít standardní techniky zálohování a obnovení SQL Serveru. Záložní soubory můžete použít k ochraně dat nebo k přesunu dat do jiné instance SQL Serveru. Další informace najdete v tématu Zálohování a obnovení databází SQL Serveru v systému Linux.

Varování

Pokud vytváříte zálohy, nezapomeňte vytvořit nebo zkopírovat záložní soubory mimo kontejner. Jinak se při odebrání kontejneru odstraní také záložní soubory.

Povolení zálohování a obnovení VDI v kontejnerech

Operace zálohování a obnovení rozhraní VDI (Virtual Device Interface) se teď podporují v nasazeních kontejnerů SQL Serveru počínaje CU15 pro SQL Server 2019 (15.x) a CU28 pro SQL Server 2017 (14.x). Pokud chcete povolit zálohování nebo obnovení založené na VDI pro kontejnery SQL Serveru, postupujte takto:

  1. Při nasazování kontejnerů SQL Serveru použijte možnost --shm-size. Začněte tím, že nastavíte velikost na 1 GB, jak je znázorněno v následujícím příkazu. Nahraďte <password> platným heslem.

    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
    --shm-size 1g \
    -p 1433:1433 \
    --name sql19 \
    --hostname sql19 \
    -d mcr.microsoft.com/mssql/server:2019-latest
    

    Možnost --shm-size umožňuje nakonfigurovat velikost adresáře sdílené paměti (/dev/shm) uvnitř kontejneru, který je ve výchozím nastavení nastaven na 64 MB. Tato výchozí velikost sdílené paměti není dostatečná pro podporu záloh VDI. Doporučujeme, abyste tuto konfiguraci nakonfigurovali na minimálně 1 GB při nasazování kontejnerů SQL Serveru a chcete podporovat zálohy VDI.

  2. Musíte také povolit nový parametr memory.enablecontainersharedmemory v mssql.conf uvnitř kontejneru. Můžete připojit mssql.conf při nasazování kontejneru pomocí možnosti -v, jak je popsáno v části Uchování dat, nebo po nasazení kontejneru ručně aktualizovat mssql.conf uvnitř kontejneru. Tady je ukázkový soubor mssql.conf s nastavením memory.enablecontainersharedmemory nastaveným na true.

    [memory]
    enablecontainersharedmemory = true
    

Kopírování souborů z kontejneru

Pokud chcete zkopírovat soubor z kontejneru, použijte následující příkaz:

docker cp <Container ID>:<Container path> <host path>

ID kontejneru můžete získat spuštěním příkazu docker ps -a.

Příklad :

docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog

Kopírování souborů do kontejneru

Pokud chcete zkopírovat soubor do kontejneru, použijte následující příkaz:

docker cp <Host path> <Container ID>:<Container path>

Příklad :

docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data

Konfigurace časového pásma

Pokud chcete spustit SQL Server v kontejneru Linuxu s určitým časovým pásmem, nakonfigurujte TZ proměnnou prostředí (další informace najdete v tématu Konfigurace časového pásma pro SQL Server 2022 a novější verze v Linuxu ). Pokud chcete najít správnou hodnotu časového pásma, spusťte příkaz tzselect z příkazového řádku bash s Linuxem:

tzselect

Po výběru časového pásma tzselect zobrazí výstup podobný následujícímu příkladu:

The following information has been given:

    United States
    Pacific

Therefore TZ='America/Los_Angeles' will be used.

Tyto informace můžete použít k nastavení stejné proměnné prostředí v Linuxovém kontejneru. Následující příklad ukazuje, jak spustit SQL Server v kontejneru v Americas/Los_Angeles časovém pásmu:

sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2025-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2025-latest

Opatrnost

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Změňte cestu tempdb

Je vhodné zachovat tempdb databázi odděleně od uživatelských databází.

  1. Připojte se k instanci SQL Serveru a spusťte následující skript Transact-SQL (T-SQL). Pokud je k tempdbpřidruženo více souborů, musíte je také přesunout.

    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf');
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf');
    GO
    
  2. Pomocí následujícího skriptu T-SQL ověřte, že bylo změněno umístění souboru tempdb:

    SELECT *
    FROM sys.sysaltfiles
    WHERE dbid = 2;
    
  3. Aby se tyto změny projevily, musíte restartovat kontejner SQL Serveru.

    docker stop sql1
    docker start sql1
    
    docker stop sql1
    docker start sql1
    
    docker stop sql1
    docker start sql1
    
  4. Otevřete interaktivní relaci bash pro připojení ke kontejneru.

    docker exec -it sql1 bash
    
    docker exec -it sql1 bash
    
    docker exec -it sql1 bash
    

    Po připojení k interaktivnímu prostředí spusťte následující příkaz a zkontrolujte umístění tempdb:

    ls /var/opt/mssql/tempdb/
    

    Pokud byl přesun úspěšný, zobrazí se podobný výstup:

    tempdb.mdf templog.ldf
    

Změna výchozího umístění souboru

Přidejte proměnnou MSSQL_DATA_DIR pro změnu datového adresáře v příkazu docker run a pak připojte svazek k danému umístění, ke kterému má uživatel kontejneru přístup.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2025-latest

Konfigurace SQL Serveru v kontejneru pomocí nástroje mssql-config

K nastavení parametrů v kontejnerech SQL Serveru můžete použít nástroj mssql-conf.

Můžete například nastavit limit paměti pro instanci pomocí následujícího postupu:

  1. Připojte se přímo ke kontejneru pomocí docker exec jako uživatel root. Nahraďte sqlcontainer názvem kontejneru.

    docker exec -u root -it sqlcontainer "bash"
    
  2. Ke změně nastavení použijte mssql-conf. Tento příklad změní nastavení memory.memorylimitmb na 2 GB (2 048 MB).

    /opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
    

Příklady vlastních kontejnerů Dockeru

Příklady vlastních kontejnerů Dockeru najdete v tématu https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Mezi příklady patří:

Informace o vytváření a spouštění kontejnerů Dockeru pomocí souborů Dockerfile najdete v ukázkách ML Services na GitHubu.

Podpora skupin ovládacích prvků (cgroup) v2

SQL Server zjistí a respektuje omezení kontrolní skupiny cgroup v2, počínaje SQL Serverem (verze 2025, 17.x) a SQL Serverem (verze 2022, 16.x) kumulativní aktualizací (CU) 20. Tato omezení poskytují jemně odstupňované řízení v jádru Linuxu nad prostředky procesoru a paměti a zlepšují izolaci prostředků v prostředích Docker, Kubernetes a OpenShift.

V dřívějších verzích můžou kontejnerizovaná nasazení v clusterech Kubernetes (například Azure Kubernetes Service v1.25+) zaznamenat chyby nedostatku paměti (OOM), protože SQL Server nevynucovala limity paměti definované ve specifikacích kontejnerů. Tento problém řeší podpora cgroup v2.

Kontrola verze cgroup

stat -fc %T /sys/fs/cgroup

Výsledky jsou následující:

Result Description
cgroup2fs Použijete cgroup v2.
cgroup Použijete cgroup v1.

Přepnutí na cgroup v2

Nejjednodušší cestou je volba distribuce, která podporuje cgroup v2.

Pokud potřebujete přepnout ručně, přidejte do konfigurace GRUB následující parametr:

systemd.unified_cgroup_hierarchy=1

Pak aktualizujte GRUB. Například na Ubuntu spusťte:

sudo update-grub

V Red Hat Enterprise Linuxu (RHEL) spusťte:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Hlášení o limitu CPU s cgroup v2

Když nakonfigurujete omezení procesoru pomocí cgroup v2, SQL Server v protokolu chyb nezobrazí nakonfigurovaný počet jader procesoru. Místo toho nadále hlásí celkový počet hostitelských procesorů.

Pokud chcete sladit SQL Server plánovače a plány dotazů (například rozhodnutí o paralelismu) se zamýšleným počtem procesorů definovaným v cgroup v2, použijte následující konfiguraci.

Konfigurace spřažení procesoru

Explicitně nastavte spřažení procesoru SQL Server tak, aby odpovídalo kvótě výkonu pro cgroup. V následujícím příkladu je kvóta cgroup čtyři procesory na osmijádrovém hostiteli.

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;

Tato konfigurace zajišťuje, že SQL Server vytváří plánovače pouze pro zamýšlený počet procesorů. Další informace naleznete v tématu ALTER SERVER CONFIGURATION a Use PROCESS AFFINITY pro uzel a/nebo CPU.

Povolte příznak trasování 8002 pro použití měkkého spřažení ve vrstvě SQLPAL:

sudo /opt/mssql/bin/mssql-conf traceflag 8002 on

Ve výchozím nastavení jsou plánovače vázány na konkrétní procesory definované v maskě spřažení. Příznak trasování 8002 umožňuje plánovačům přesouvat se mezi procesory, což obecně zlepšuje výkon a zároveň respektuje přiřazení procesorů a omezení cgroup. Další informace naleznete v tématu DBCC TRACEON - Trace Flags.

Po povolení příznaku trasování restartujte SQL Server.

Očekávané chování

Po restartování:

  • SQL Server vytvoří pouze počet plánovačů definovaných nastavením spřažení (například čtyři plánovače).

  • Jádro Linuxu nadále vynucuje kvótu spouštění procesoru cgroup v2.

  • Rozhodnutí o optimalizaci dotazů a paralelismu jsou založená na zamýšleném počtu procesorů, nikoli na celkovém počtu procesorů hostitele.

Poznámka

Protokol chyb SQL Server může i nadále zobrazovat celkový počet procesorů hostitele. Toto chování protokolování a zobrazení nemá vliv na skutečné využití procesoru, vytvoření plánovače nebo vynucení procesoru pomocí cgroup v2 nebo spřažení procesoru.

Další informace najdete v následujících zdrojích informací:

  • Začněte s obrazy kontejnerů SQL Serveru 2017 (14.x) v Dockeru pomocí rychlého startu .
  • Začněte pracovat s image kontejneru SQL Serveru 2019 (15.x) na Dockeru tím, že projdete rychlý průvodce
  • Začněte s imagemi kontejneru SQL Serveru 2022 (16.x) v Dockeru tím, že projdete rychlého průvodce .
  • Začínáme s obrázky kontejnerů SQL Serveru 2025 (17.x) v Dockeru pomocí rychlého průvodce

přispívat do dokumentace SQL

Věděli jste, že obsah SQL můžete upravovat sami? Pokud to uděláte, nejen že vám pomůžete vylepšit naši dokumentaci, ale také jste získali kredit jako přispěvatel na stránku.

Další informace naleznete v Edit Microsoft Learn documentation.