Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
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-latestL'opzione
--shm-sizeconsente 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.È anche necessario abilitare il nuovo parametro
memory.enablecontainersharedmemoryinmssql.confall'interno del contenitore. È possibile montaremssql.confal momento della distribuzione del contenitore usando l'opzione-vdescritta nella sezione Rendere persistenti i dati oppure dopo aver distribuito il contenitore aggiornando manualmentemssql.confall'interno del contenitore. Ecco un filemssql.confdi esempio con l'impostazionememory.enablecontainersharedmemoryimpostata sutrue.[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.
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'); GOVerificare che il percorso del file
tempdbsia stato modificato usando lo script T-SQL seguente:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;Riavviare il contenitore di SQL Server per applicare le modifiche.
docker stop sql1 docker start sql1docker stop sql1 docker start sql1docker stop sql1 docker start sql1Aprire una sessione
bashinterattiva per connettersi al contenitore.docker exec -it sql1 bashdocker exec -it sql1 bashdocker exec -it sql1 bashUna 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:
Connettersi direttamente al contenitore usando
docker execcome utente root. Sostituiresqlcontainercon il nome del contenitore.docker exec -u root -it sqlcontainer "bash"Usare mssql-conf per modificare un'impostazione. In questo esempio viene modificata l'impostazione
memory.memorylimitmbsu 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:
- Esempio di Dockerfile con ricerca full-text
- Esempio di Dockerfile per RHEL 7 e SQL Server 2019
- Esempio di Dockerfile per RHEL 8 e SQL Server 2017
- Esempio di Dockerfile per Ubuntu 20.04 e SQL Server 2019 con ricerca full-text, PolyBase e strumenti
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 (scelta consigliata)
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:
- Guida introduttiva: Distribuire un contenitore Linux di SQL Server in Kubernetes usando i grafici Helm
- Gruppo di controllo v2 (documentazione del kernel Linux)
Contenuto correlato
- 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.