Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di Linux
Artikel ini menjelaskan cara mengonfigurasi dan menyesuaikan kontainer SQL Server Linux menggunakan Docker. Anda dapat mempertahankan data Anda, memindahkan file dari dan ke kontainer, dan mengubah pengaturan default.
Kiat
Anda dapat menggunakan sqlcmd (Go) untuk membuat instans baru SQL Server dalam kontainer untuk tujuan pengembangan. Untuk informasi selengkapnya, lihat Membuat dan mengkueri kontainer SQL Server.
Membuat kontainer yang dikustomisasi
Anda dapat membuat Dockerfile Anda sendiri untuk membangun kontainer SQL Server yang disesuaikan. Untuk informasi selengkapnya, lihat demo yang menggabungkan SQL Server dan aplikasi Node. Jika Anda membuat Dockerfile Anda sendiri, ketahui proses latar depan, karena proses ini mengontrol masa pakai kontainer. Jika keluar, kontainer akan dimatikan. Misalnya, jika Anda ingin menjalankan skrip dan memulai SQL Server, pastikan bahwa proses SQL Server adalah perintah paling tepat. Semua perintah lainnya dijalankan di latar belakang. Perintah berikut mengilustrasikan ini di dalam Dockerfile:
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Jika Anda membalikkan perintah dalam contoh sebelumnya, kontainer akan dimatikan saat skrip do-my-sql-commands.sh selesai.
Pertahankan data Anda
Perubahan konfigurasi SQL Server dan file database Anda tetap ada di kontainer bahkan jika Anda memulai ulang kontainer dengan docker stop dan docker start. Namun, jika Anda menghapus kontainer dengan docker rm, semua yang ada dalam kontainer dihapus, termasuk SQL Server dan database Anda. Bagian berikut menjelaskan cara menggunakan volume data untuk mempertahankan file database Anda meskipun kontainer terkait dihapus.
Penting
Untuk SQL Server, penting sekali bagi Anda memahami persistensi data di Docker. Selain diskusi di bagian ini, lihat dokumentasi Docker tentang cara mengelola data dalam kontainer Docker.
Memasang direktori host sebagai volume data
Opsi pertama adalah memasang direktori pada host Anda sebagai volume data di kontainer Anda. Untuk melakukannya, gunakan perintah docker run dengan flag -v <host directory>:/var/opt/mssql, di mana <host directory> adalah suatu jalur tertentu. Misalnya: C:\SQL di Windows, atau ~/sqlvolumes di Linux. Tindakan ini memungkinkan data dipulihkan di antara eksekusi kontainer.
Catatan
Kontainer untuk SQL Server 2019 (15.x) dan versi yang lebih baru secara otomatis dimulai sebagai non-root, sementara kontainer SQL Server 2017 (14.x) dimulai sebagai root secara default. Untuk informasi selengkapnya tentang menjalankan kontainer SQL Server sebagai non-root, lihat Kontainer Linux SQL Server yang Aman.
Penting
Variabel SA_PASSWORD lingkungan tidak digunakan lagi. Gunakan MSSQL_SA_PASSWORD sebagai gantinya.
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
Perhatian
Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
Teknik ini juga memungkinkan Anda untuk berbagi dan melihat file di host di luar Docker.
Menggunakan kontainer volume data
Opsi kedua adalah menggunakan kontainer volume data. Anda dapat membuat kontainer volume data dengan menentukan nama volume, bukan direktori host dengan parameter -v. Contoh berikut membuat volume data bersama bernama 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
Perhatian
Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
Teknik untuk membuat volume data secara implisit dalam perintah jalankan tidak berfungsi dengan versi Docker yang lebih lama. Dalam hal ini, gunakan langkah-langkah eksplisit yang diuraikan dalam dokumentasi Docker, Membuat dan memasang kontainer volume data.
Bahkan jika Anda menghentikan dan menghapus kontainer ini, volume data tetap ada. Anda dapat melihatnya dengan perintah docker volume ls.
docker volume ls
Jika Anda kemudian membuat kontainer lain dengan nama volume yang sama, kontainer baru menggunakan data SQL Server yang sama yang terkandung dalam volume.
Untuk menghapus wadah volume data, gunakan perintah docker volume rm.
Peringatan
Jika Anda menghapus kontainer volume data, data SQL Server apa pun dalam kontainer akan dihapus secara permanen.
Pencadangan dan pemulihan
Selain teknik kontainer ini, Anda juga dapat menggunakan teknik pencadangan dan pemulihan SQL Server standar. Anda dapat menggunakan file cadangan untuk melindungi data Anda atau memindahkan data ke instans SQL Server lain. Untuk informasi selengkapnya, lihat Mencadangkan dan memulihkan database SQL Server di Linux.
Peringatan
Jika Anda membuat cadangan, pastikan untuk membuat atau menyalin file cadangan di luar kontainer. Jika tidak, jika kontainer dihapus, file cadangan juga dihapus.
Mengaktifkan pencadangan dan pemulihan VDI dalam wadah
Operasi pencadangan dan pemulihan Antarmuka Perangkat Virtual (VDI) sekarang didukung dalam penyebaran kontainer SQL Server yang dimulai dengan CU15 untuk SQL Server 2019 (15.x) dan CU28 untuk SQL Server 2017 (14.x). Ikuti langkah-langkah ini untuk mengaktifkan pencadangan atau pemulihan berbasis VDI untuk kontainer SQL Server:
Saat menyebarkan kontainer SQL Server, gunakan
--shm-sizeopsi . Untuk memulai, atur ukuran ke 1 GB, seperti yang ditunjukkan pada perintah berikut. Ganti<password>dengan kata sandi yang valid.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-latestOpsi
--shm-sizeini memungkinkan Anda mengonfigurasi ukuran direktori memori bersama (/dev/shm) di dalam kontainer, yang diatur ke 64 MB secara default. Ukuran memori bersama default ini tidak mencukupi untuk mendukung pencadangan VDI. Kami menyarankan agar Anda mengonfigurasi ini hingga minimal 1 GB saat Anda menyebarkan kontainer SQL Server dan ingin mendukung pencadangan VDI.Anda juga harus mengaktifkan parameter
memory.enablecontainersharedmemorybaru di dalammssql.confkontainer. Anda dapat memasangmssql.confpada penyebaran kontainer menggunakan opsi seperti yang-vdijelaskan di bagian Pertahankan data Anda, atau setelah Anda menyebarkan kontainer dengan memperbaruimssql.confsecara manual di dalam kontainer. Berikut adalah file sampelmssql.confdengan pengaturanmemory.enablecontainersharedmemorydiatur ketrue.[memory] enablecontainersharedmemory = true
Menyalin file dari kontainer
Untuk menyalin file dari kontainer, gunakan perintah berikut:
docker cp <Container ID>:<Container path> <host path>
Anda bisa mendapatkan ID Kontainer dengan menjalankan perintah docker ps -a.
Contoh:
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
Menyalin file ke dalam kontainer
Untuk menyalin file ke dalam kontainer, gunakan perintah berikut:
docker cp <Host path> <Container ID>:<Container path>
Contoh:
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
Mengonfigurasi zona waktu
Untuk menjalankan SQL Server dalam kontainer Linux dengan zona waktu tertentu, konfigurasikan TZ variabel lingkungan (lihat Mengonfigurasi zona waktu untuk SQL Server 2022 dan versi yang lebih baru di Linux untuk informasi selengkapnya). Untuk menemukan nilai zona waktu yang tepat, jalankan tzselect perintah dari prompt bash Linux:
tzselect
Setelah Anda memilih zona waktu, tzselect menampilkan output yang mirip dengan contoh berikut:
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
Anda dapat menggunakan informasi ini untuk mengatur variabel lingkungan yang sama di kontainer Linux Anda. Contoh berikut menunjukkan cara menjalankan SQL Server dalam kontainer di Americas/Los_Angeles zona waktu:
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
Perhatian
Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.
Ubah jalur tempdb
Ini adalah praktik yang baik untuk menjaga database Anda tempdb terpisah dari database pengguna Anda.
Sambungkan ke instans SQL Server, lalu jalankan skrip Transact-SQL (T-SQL) berikut. Jika ada lebih banyak file yang terkait dengan
tempdb, Anda juga perlu memindahkannya.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'); GOVerifikasi bahwa
tempdblokasi file telah dimodifikasi, menggunakan skrip T-SQL berikut:SELECT * FROM sys.sysaltfiles WHERE dbid = 2;Anda harus memulai ulang kontainer SQL Server agar perubahan ini berlaku.
docker stop sql1 docker start sql1docker stop sql1 docker start sql1docker stop sql1 docker start sql1Buka sesi interaktif
bashuntuk menyambungkan ke kontainer.docker exec -it sql1 bashdocker exec -it sql1 bashdocker exec -it sql1 bashSetelah tersambung ke shell interaktif, jalankan perintah berikut untuk memeriksa lokasi
tempdb:ls /var/opt/mssql/tempdb/Jika pemindahan berhasil, Anda akan melihat output serupa:
tempdb.mdf templog.ldf
Mengubah lokasi file bawaan
MSSQL_DATA_DIR Tambahkan variabel untuk mengubah direktori data Anda dalam perintah Andadocker run, lalu pasang volume ke lokasi yang dapat diakses pengguna kontainer Anda.
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
Menggunakan mssql-config untuk mengonfigurasi SQL Server di dalam kontainer
Anda dapat menggunakan alat mssql-conf untuk mengatur parameter dalam kontainer SQL Server.
Misalnya, Anda dapat mengatur batas memori untuk instans menggunakan langkah-langkah berikut:
Sambungkan langsung ke kontainer menggunakan
docker execsebagai pengguna root. Gantisqlcontainerdengan nama kontainer Anda.docker exec -u root -it sqlcontainer "bash"Gunakan mssql-conf untuk mengubah pengaturan. Contoh ini mengubah pengaturan menjadi
memory.memorylimitmb2 GB (2.048 MB)./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Contoh kontainer Docker Kustom
Untuk contoh kontainer Docker kustom, lihat https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Contoh meliputi:
- Contoh Dockerfile dengan Pencarian Teks Lengkap
- Contoh Dockerfile untuk RHEL 7 dan SQL Server 2019
- Contoh Dockerfile untuk RHEL 8 dan SQL Server 2017
- Contoh Dockerfile untuk Ubuntu 20.04 dan SQL Server 2019 dengan Pencarian Teks Lengkap, PolyBase, dan Alat
Untuk informasi tentang cara membuat dan menjalankan kontainer Docker menggunakan Dockerfiles, lihat sampel Layanan ML di GitHub.
Dukungan cgroup v2
SQL Server mendeteksi dan menghormati batasan grup kontrol (cgroup) v2, dimulai dengan SQL Server 2025 (17.x) dan SQL Server 2022 (16.x) Pembaruan Kumulatif (CU) 20. Batasan ini memberikan kontrol mendetail di kernel Linux melalui sumber daya CPU dan memori, dan meningkatkan isolasi sumber daya di lingkungan Docker, Kubernetes, dan OpenShift.
Dalam versi sebelumnya, penyebaran kontainer pada kluster Kubernetes (misalnya, Azure Kubernetes Service v1.25+) dapat mengalami kesalahan kehabisan memori (OOM) karena SQL Server tidak memberlakukan batas memori yang ditentukan dalam spesifikasi kontainer. Dukungan untuk cgroup v2 mengatasi masalah ini.
Periksa versi cgroup
stat -fc %T /sys/fs/cgroup
Hasilnya adalah sebagai berikut:
| Result | Description |
|---|---|
cgroup2fs |
Anda menggunakan cgroup v2 |
cgroup |
Anda menggunakan cgroup v1 |
Beralih ke cgroup v2
Jalur termudah adalah memilih distribusi yang mendukung cgroup v2 secara langsung.
Jika Anda perlu beralih secara manual, tambahkan parameter berikut ke konfigurasi GRUB Anda:
systemd.unified_cgroup_hierarchy=1
Kemudian perbarui GRUB. Misalnya, di Ubuntu, jalankan:
sudo update-grub
Di Red Hat Enterprise Linux (RHEL), jalankan:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Pelaporan batas CPU dengan cgroup v2
Saat Anda mengonfigurasi batas CPU menggunakan cgroup v2, SQL Server tidak menampilkan jumlah inti CPU yang dikonfigurasi dalam log kesalahan. Sebaliknya, ia terus melaporkan jumlah total CPU host.
Untuk menyelaraskan pengatur waktu SQL Server dan perencanaan kueri (misalnya, keputusan paralelisme) dengan jumlah CPU yang dimaksudkan yang ditentukan dalam cgroup v2, terapkan konfigurasi berikut.
Mengonfigurasi afinitas prosesor
Atur afinitas prosesor SQL Server secara eksplisit agar sesuai dengan kuota eksekusi cgroup. Dalam contoh berikut, kuota cgroup adalah empat CPU pada host delapan inti:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;
Konfigurasi ini memastikan bahwa SQL Server membuat penjadwal hanya untuk jumlah CPU yang dimaksudkan. Untuk informasi selengkapnya, lihat MENGUBAH KONFIGURASI SERVER dan Menggunakan AFINITAS PROSES untuk Node dan/atau CPU.
Aktifkan bendera pelacakan 8002 (disarankan)
Aktifkan bendera pelacakan 8002 untuk menggunakan afinitas lunak di lapisan SQLPAL:
sudo /opt/mssql/bin/mssql-conf traceflag 8002 on
Secara default, penjadwal terikat ke CPU tertentu yang ditentukan dalam masker afinitas. Bendera pelacakan 8002 memungkinkan penjadwal untuk berpindah di seluruh CPU sebagai gantinya, yang umumnya meningkatkan performa sambil tetap menghormati batasan afinitas dan cgroup. Untuk informasi selengkapnya, lihat DBCC TRACEON - Trace Flags.
Mulai ulang SQL Server setelah mengaktifkan bendera pelacakan.
Perilaku yang diharapkan
Setelah menghidupkan ulang:
SQL Server hanya membuat jumlah penjadwal yang ditentukan oleh pengaturan afinitas (misalnya, empat penjadwal).
Kernel Linux terus memberlakukan kuota eksekusi CPU cgroup v2.
Pengoptimalan kueri dan keputusan paralelisme didasarkan pada jumlah CPU yang direncanakan, daripada total CPU pada host.
Catatan
Log kesalahan SQL Server mungkin terus menampilkan jumlah CPU host total. Perilaku pengelogan dan tampilan ini tidak memengaruhi penggunaan CPU aktual, pembuatan penjadwal, atau penegakan CPU oleh cgroup v2 atau afinitas prosesor.
Untuk informasi selengkapnya, lihat sumber daya berikut ini:
- Mulai cepat: Menyebarkan kontainer SQL Server Linux ke Kubernetes menggunakan bagan Helm
- Grup Kontrol v2 (dokumentasi Kernel Linux)
Konten terkait
- Mulai menggunakan gambar kontainer SQL Server 2017 (14.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2019 (15.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2022 (16.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2025 (17.x) di Docker dengan melalui mulai cepat
Berkontribusi pada dokumentasi SQL
Tahukah Anda bahwa Anda dapat mengedit konten SQL sendiri? Jika Anda melakukannya, Anda tidak hanya membantu meningkatkan dokumentasi kami, tetapi Anda juga dikreditkan sebagai kontributor ke halaman.
Untuk informasi selengkapnya, lihat Mengedit dokumentasi Microsoft Learn.