Configurare e personalizzare contenitori Linux di SQL Server

Si applica a:SQL Server in Linux

Questo articolo illustra come configurare e personalizzare i contenitori Linux di SQL Server usando Docker. È possibile rendere persistenti i dati, spostare i file da e verso i contenitori e modificare le impostazioni predefinite.

Suggerimento

È possibile usare sqlcmd (Go) per creare una nuova istanza di SQL Server in un contenitore a scopo di sviluppo. Per altre informazioni, vedere Creare ed eseguire query su un contenitore di SQL Server.

Creare un contenitore personalizzato

È possibile creare il proprio Dockerfile per creare un contenitore di SQL Server personalizzato. Per altre informazioni, vedere una demo che combina SQL Server e un'applicazione Node. Se si crea un Dockerfile personalizzato, tenere conto del processo in primo piano, perché questo processo controlla la durata del contenitore. Se termina, il contenitore si arresta. Ad esempio, se si vuole eseguire uno script e avviare SQL Server, assicurarsi che il processo di SQL Server sia il comando più a destra. Tutti gli altri comandi vengono eseguiti in background. Il comando seguente illustra questa operazione all'interno di un Dockerfile:

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

Se si invertissero i comandi nell'esempio precedente, il contenitore verrebbe arrestato al termine dello script do-my-sql-commands.sh.

Rendere i dati persistenti

Le modifiche apportate alla configurazione del SQL Server e i file di database vengono salvati in modo permanente nel contenitore anche se il contenitore viene riavviato con docker stop e docker start. Tuttavia, se si rimuove il contenitore con docker rm viene eliminato tutto il contenuto al suo interno, inclusi SQL Server e i database. La sezione seguente illustra come usare i volumi di dati per rendere persistenti i file di database anche se vengono eliminati i contenitori associati.

Importante

Per SQL Server è fondamentale comprendere la persistenza dei dati in Docker. Oltre alle informazioni in questa sezione, vedere la documentazione di Docker su come gestire i dati nei contenitori Docker.

Montare una directory host come volume di dati

La prima opzione consiste nel montare una directory sul tuo host come volume di dati nel contenitore. A tale scopo, usare il comando docker run con il flag -v <host directory>:/var/opt/mssql, dove <host directory> è qualsiasi percorso specificato. Ad esempio: C:\SQL in Windows o ~/sqlvolumes in Linux. In questo modo è possibile ripristinare i dati tra le esecuzioni dei contenitori.

Nota

I contenitori di SQL Server 2019 (15.x) e versioni successive vengono avviati automaticamente come contenitori non root, mentre i contenitori di SQL Server 2017 (14.x) vengono avviati come contenitori root per impostazione predefinita. Per altre informazioni sull'esecuzione di contenitori SQL Server come contenitori non root, vedere Configurare contenitori Linux di SQL Server.

Importante

La variabile di ambiente SA_PASSWORD è deprecata. Utilizzare invece 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

Attenzione

La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

Questa tecnica consente anche di condividere e visualizzare i file nell'host all'esterno di Docker.

Usare contenitori per volumi di dati

La seconda opzione consiste nell'usare un contenitore di volumi di dati. È possibile creare un contenitore di volumi di dati specificando un nome di volume anziché una directory host con il parametro -v. Nell'esempio seguente viene creato un volume di dati condiviso denominato 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

Attenzione

La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

Questa tecnica per la creazione implicita di un volume di dati nel comando run non funziona con le versioni precedenti di Docker. In tal caso, usare i passaggi espliciti descritti nella documentazione di Docker, in Creating and mounting a data volume container (Creazione e montaggio di un contenitore di volumi di dati).

Anche se si arresta e rimuove il contenitore, il volume di dati è persistente. È possibile visualizzarlo con il comando docker volume ls.

docker volume ls

Se successivamente si crea un altro contenitore con lo stesso nome di volume, il nuovo contenitore userà gli stessi dati di SQL Server contenuti nel volume.

Per rimuovere un contenitore di volumi di dati, usare il comando docker volume rm.

Avviso

Se si elimina il contenitore del volume di dati, tutti i dati di SQL Server nel contenitore verranno eliminati definitivamente.

Backup e ripristino

Oltre a queste tecniche con i contenitori, è anche possibile usare le tecniche standard di backup e ripristino di SQL Server. È possibile usare i file di backup per proteggere i dati o per spostare i dati in un'altra istanza di SQL Server. Per altre informazioni, vedere Backup e ripristino di database di SQL Server in Linux.

Avviso

Se si creano backup, assicurarsi di creare o copiare i file di backup all'esterno del contenitore. In caso contrario, se il contenitore viene rimosso, vengono eliminati anche i file di backup.

Abilitare il backup e il ripristino VDI nei contenitori

Le operazioni di backup e ripristino dell’interfaccia del dispositivo virtuale (VDI) sono ora supportate nelle distribuzioni di contenitori di SQL Server a partire dalle versioni CU15 per SQL Server 2019 (15.x) e CU28 per SQL Server 2017 (14.x). Seguire questa procedura per abilitare le operazioni di backup o ripristino basate su VDI per i contenitori di SQL Server:

  1. Per distribuire contenitori di SQL Server, usare l'opzione --shm-size. Per iniziare, impostare il ridimensionamento su 1 GB, come illustrato nel comando seguente. Sostituire <password> con una password valida.

    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
    

    L'opzione --shm-size consente di configurare le dimensioni della directory di memoria condivisa (/dev/shm) all'interno del contenitore, che per impostazione predefinita sono pari a 64 MB. Queste dimensioni predefinite della memoria condivisa non sono sufficienti per supportare i backup VDI. È consigliabile configurare queste dimensioni su un minimo di 1 GB quando si distribuiscono contenitori di SQL Server e si vogliono supportare i backup VDI.

  2. È anche necessario abilitare il nuovo parametro memory.enablecontainersharedmemory in mssql.conf all'interno del contenitore. È possibile montare mssql.conf al momento della distribuzione del contenitore usando l'opzione -v descritta nella sezione Rendere persistenti i dati oppure dopo aver distribuito il contenitore aggiornando manualmente mssql.conf all'interno del contenitore. Ecco un file mssql.conf di esempio con l'impostazione memory.enablecontainersharedmemory impostata su true.

    [memory]
    enablecontainersharedmemory = true
    

Copiare file da un contenitore

Per copiare un file dal contenitore, usare il comando seguente:

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

È possibile ottenere l'ID del contenitore eseguendo il comando docker ps -a.

Esempio:

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

Copiare file in un contenitore

Per copiare un file nel contenitore, usare il comando seguente:

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

Esempio:

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

Configurare il fuso orario

Per eseguire SQL Server in un contenitore Linux con un fuso orario specifico, configurare la TZ variabile di ambiente . Per altre informazioni, vedere Configurare il fuso orario per SQL Server 2022 e versioni successive in Linux . Per trovare il valore del fuso orario corretto, eseguire il comando tzselect da un prompt di Bash per Linux:

tzselect

Dopo la selezione del fuso orario, tzselect visualizza un output simile al seguente:

The following information has been given:

    United States
    Pacific

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

È possibile usare queste informazioni per impostare la stessa variabile di ambiente nel contenitore Linux. L'esempio seguente mostra come eseguire SQL Server in un contenitore nel fuso orario Americas/Los_Angeles:

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

Attenzione

La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

Modificare il percorso tempdb

È consigliabile tenere il database tempdb separato dai database utente.

  1. Connettersi all'istanza di SQL Server e quindi eseguire lo script Transact-SQL (T-SQL) seguente. Se sono presenti più file associati a tempdb, sarà necessario spostare anche quelli.

    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. Verificare che il percorso del file tempdb sia stato modificato usando lo script T-SQL seguente:

    SELECT *
    FROM sys.sysaltfiles
    WHERE dbid = 2;
    
  3. Riavviare il contenitore di SQL Server per applicare le modifiche.

    docker stop sql1
    docker start sql1
    
    docker stop sql1
    docker start sql1
    
    docker stop sql1
    docker start sql1
    
  4. Aprire una sessione bash interattiva per connettersi al contenitore.

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

    Una volta stabilita la connessione alla shell interattiva, eseguire il comando seguente per controllare il percorso di tempdb:

    ls /var/opt/mssql/tempdb/
    

    Se lo spostamento è riuscito, verrà visualizzato un output simile al seguente:

    tempdb.mdf templog.ldf
    

Modificare il percorso predefinito del file

Aggiungi la variabile MSSQL_DATA_DIR per modificare la directory dei dati nel tuo comando docker run, poi monta un volume in quella posizione, assicurandoti che l'utente del contenitore abbia accesso.

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

Usare mssql-config per configurare SQL Server all'interno di un contenitore

È possibile usare lo strumento mssql-conf per impostare i parametri nei contenitori di SQL Server.

Ad esempio, è possibile impostare un limite di memoria per l'istanza seguendo questa procedura:

  1. Connettersi direttamente al contenitore usando docker exec come utente root. Sostituire sqlcontainer con il nome del contenitore.

    docker exec -u root -it sqlcontainer "bash"
    
  2. Usare mssql-conf per modificare un'impostazione. In questo esempio viene modificata l'impostazione memory.memorylimitmb su 2 GB (2.048 MB).

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

Esempi di contenitori Docker personalizzati

Per esempi di contenitori Docker personalizzati, vedere https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Tra gli esempi sono inclusi:

Per informazioni su come compilare ed eseguire contenitori Docker mediante Dockerfile, vedere Esempi di servizi ML su GitHub.

Supporto del gruppo di controllo (cgroup) v2

SQL Server rileva e rispetta i vincoli del gruppo di controllo (cgroup) v2, a partire da SQL Server 2025 (17.x) e SQL Server 2022 (16.x) Aggiornamento cumulativo (CU) 20. Questi vincoli forniscono un controllo granulare nel kernel Linux sulle risorse cpu e memoria e migliorano l'isolamento delle risorse negli ambienti Docker, Kubernetes e OpenShift.

Nelle versioni precedenti, le distribuzioni in contenitori nei cluster Kubernetes (ad esempio, Azure Kubernetes Service v1.25+) potrebbero riscontrare errori di memoria insufficiente perché SQL Server non imponeva limiti di memoria definiti nelle specifiche del contenitore. Il supporto per cgroup v2 risolve questo problema.

Controllare la versione di cgroup

stat -fc %T /sys/fs/cgroup

I risultati sono i seguenti:

Result Description
cgroup2fs Viene utilizzato cgroup v2
cgroup Usare cgroup v1

Passare a cgroup v2

Il percorso più semplice consiste nella scelta di una distribuzione che supporta cgroup v2 predefinita.

Se è necessario passare manualmente, aggiungere il parametro seguente alla configurazione GRUB:

systemd.unified_cgroup_hierarchy=1

Aggiornare quindi GRUB. Ad esempio, in Ubuntu eseguire:

sudo update-grub

Su Red Hat Enterprise Linux, eseguire:

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

Creazione di report sui limiti della CPU con cgroup v2

Quando si configurano i limiti della CPU usando cgroup v2, SQL Server non mostra il numero di core CPU configurato nel log degli errori. Continua invece a segnalare il numero totale di CPU host.

Per allineare SQL Server scheduler e piani di query (ad esempio, decisioni di parallelismo) con il numero di CPU previsto definito in cgroup v2, applicare la configurazione seguente.

Configurare l'affinità del processore

Imposta in modo esplicito l'affinità del processore di SQL Server per corrispondere alla quota di esecuzione del cgroup. Nell'esempio seguente la quota di cgroup è di quattro CPU in un host a otto core:

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

Questa configurazione garantisce che SQL Server crei pianificatori solo per il numero desiderato di CPU. Per ulteriori informazioni, vedere ALTER SERVER CONFIGURATION e Usa l'AFFINITÀ del PROCESSO per Nodo e/o CPU.

Abilitare il flag di traccia 8002 per usare l'affinità soft a livello di SQLPAL:

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

Per impostazione predefinita, le utilità di pianificazione sono associate a CPU specifiche definite nella maschera di affinità. Il flag di traccia 8002 consente agli schedulatori di spostarsi tra CPU, migliorando in genere le prestazioni pur rispettando i vincoli di affinità e Cgroup. Per ulteriori informazioni, vedere DBCC TRACEON - Flag di monitoraggio.

Riavviare SQL Server dopo aver abilitato il flag di traccia.

Comportamento previsto

Dopo il riavvio:

  • SQL Server crea solo il numero di utilità di pianificazione definite dall'impostazione di affinità, ad esempio quattro utilità di pianificazione.

  • Il kernel Linux continua a applicare la quota di esecuzione della CPU cgroup v2.

  • Le decisioni relative all'ottimizzazione delle query e al parallelismo si basano sul numero di CPU previsto, anziché sulle CPU host totali.

Nota

Il log degli errori SQL Server potrebbe continuare a visualizzare il numero totale di CPU host. Questo comportamento di registrazione e visualizzazione non influisce sull'utilizzo effettivo della CPU, sulla creazione dello schedulatore o sull'applicazione delle restrizioni CPU da parte di cgroup v2 o dall'affinità del processore.

Per altre informazioni, vedere le risorse seguenti:

  • Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2017 (14.x) in Docker, vedere questo articolo di avvio rapido
  • Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2019 (15.x) in Docker, vedere questo articolo di avvio rapido
  • Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2022 (16.x) in Docker, vedere questo articolo di avvio rapido
  • Introduzione alle immagini del contenitore di SQL Server 2025 (17.x) in Docker eseguendo la guida introduttiva

Contribuire alla documentazione di SQL

Sapevi che puoi modificare tu stesso il contenuto SQL? L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.

Per altre informazioni, vedere Modificare la documentazione di Microsoft Learn.