Включение и запуск tempdb в tmpfs для SQL Server 2025 в Linux

Применимо к: SQL Server 2025 (17.x) в Linux

В этой статье описано, как включить и запустить tempdb файлы базы данных в файловой системе tmpfs в SQL Server 2025 (17.x).

SQL Server в Linux и контейнерах традиционно поддерживают XFS и файловые системы ext4 для развертывания файлов и журналов базы данных SQL Server. Однако для временных баз данных, таких как tempdb, которые не требуют сохранения данных из одного сеанса работы в другой, использование файловой системы tmpfs, использующей память (ОЗУ), может повысить общую производительность tempdb-основных рабочих нагрузок.

Дополнительные сведения о файловой системе tmpfs см. в документации по ядрам Linux.

Конфигурация Description
Поддерживаемая конфигурация tmpfs идеально подходит для хранения непрекращающихся данных, которые не нужно сохранять во время перезапуска. В настоящее время только tempdb файлы базы данных поддерживаются в файловой системе tmpfs как для развертываний на основе контейнеров, так и для неконтейнерных развертываний.
Неподдерживаемая конфигурация Файловая система tmpfs может использоваться для пользовательских баз данных в развертываниях контейнеров SQL, но только для целей разработки. Однако эта конфигурация не поддерживается. Вы можете предоставить отзыв по этому сценарию на сайте GitHub.

Развертывания физических или виртуальных машин

Чтобы включить поддержку tmpfs для SQL Server в Linux на физических или виртуальных машинах, необходимо правильно подключить файловую систему tmpfs , для которой требуется доступ к sudo. После настройки точек подключения вы можете разместить tempdb файлы на этих подключениях и запустить SQL Server с tempdb файлами, подключенными к файловой системе tmpfs .

Включение tmpfs для tempdb

  1. tempdb Создайте каталог.

    mkdir Используйте команду для создания каталога для tempdb базы данных. Убедитесь, что он принадлежит mssql пользователю и группе, чтобы разрешить доступ к SQL Server:

    sudo mkdir /var/opt/mssql/tempdb
    sudo chown mssql. /var/opt/mssql/tempdb
    
  2. Подключите файловую систему tmpfs.

    Чтобы подключить файловую систему tmpfs , используйте следующую команду:

    sudo mount -t tmpfs -o size=4G tmpfs /var/opt/mssql/tempdb/
    

    Параметр -t указывает тип файловой системы, которая в данном случае является tmpfs.

    Этот -o параметр позволяет указать параметры подключения. size=4G Здесь устанавливается максимальный размер tmpfs в 4 ГБ, то есть он может использовать до 4 ГБ ОЗУ.

    Эта команда подключает tmpfs к целевому каталогу, используемому базой данных SQL Server tempdb .

    При необходимости добавьте его в fstab обслуживание подключений между перезапусками:

    echo "tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=4G 0 0" | sudo tee -a /etc/fstab
    
  3. Обновите расположение файла tempdb.

    Убедитесь, что SQL Server запущен и работает. Подключитесь к своему SQL Server инстансу с помощью SQL Server Management Studio (SSMS) и выполните следующие команды Transact-SQL (T-SQL).

    Определите все файлы tempdb с помощью этого скрипта T-SQL, а затем выполните команду ALTER DATABASE, чтобы обновить расположение местонахождения файла tempdb.

    SELECT [name],
           physical_name
    FROM sys.master_files
    WHERE database_id = 2;
    

    Основываясь на количестве файлов, которые вы видите для tempdb, создайте команды ALTER DATABASE следующим образом:

    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf');
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/tempdb/tempdb2.mdf');
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev3, FILENAME = '/var/opt/mssql/tempdb/tempdb3.mdf');
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev4, FILENAME = '/var/opt/mssql/tempdb/tempdb4.mdf');
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf');
    
  4. Перезапустите SQL Server, чтобы применить изменения.

    sudo systemctl restart mssql-server
    
  5. Проверьте tempdb местоположение файлов.

    Когда SQL Server заработает, проверьте, что tempdb данные и файлы журналов теперь находятся в новой директории, подключившись к SQL Server с помощью инструмента вроде SSMS.

    SELECT [name],
           physical_name
    FROM sys.master_files
    WHERE database_id = 2;
    

Теперь вы увидите все файлы базы данных tempdb на новой точке монтирования /var/opt/mssql/tempdb.

Горячее изменение размера точки монтирования tmpfs в режиме онлайн

Вы также можете изменить размер монтирования tmpfs, если tempdb заполнен. Чтобы выполнить горячее изменение размера, запустите следующую команду для изменения размера монтирования tmpfs до 6 ГБ:

sudo mount -o remount,size=6G /var/opt/mssql/tempdb

При необходимости, чтобы новый размер сохранялся при перезапусках, измените fstab запись:

sudo sed -i 's|tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=4G 0 0|tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=6G 0 0|' /etc/fstab

Развертывания контейнеров

Для рабочих нагрузок разработчика tmpfs можно использовать для пользовательских баз данных. Файловые системы tmpfs могут значительно ускорить тестовые случаи для пользовательских баз данных, развернутых в контейнерах. Так как tmpfs использует ОЗУ вместо дискового хранилища, он позволяет быстро выполнять операции чтения и записи. Эта конфигурация полезна в средах разработки и тестирования, где необходимы быстрые итерации.

Однако tmpfs для пользовательских баз данных не поддерживается. Вы можете предоставить отзывы, связанные с пользовательскими базами данных на tmpfs на GitHub.

Размещайте базу данных tempdb только в файловой системе tmpfs

Если вы развертываете контейнер SQL Server и хотите убедиться, что контейнер использует tmpfs для этого tempdb, можно выполнить следующую команду:

docker run \
  -e ACCEPT_EULA=Y \
  -e 'MSSQL_SA_PASSWORD=<password>' \
  --tmpfs /var/opt/mssql/tempdb:uid=10001,gid=10001,size=4G \
  -p 5433:1433 \
  --name sql1 \
  -h sql1 \
  -d mcr.microsoft.com/mssql/server:2025-latest

Параметр --tmpfs задаёт размер 4 ГБ, а для uid (идентификатора пользователя) и gid (идентификатора группы) устанавливается значение 10001, чтобы необходимые разрешения были правильно заданы для создаваемых файлов tempdb.

После того как контейнер будет запущен, подключитесь к экземпляру SQL Server с помощью SSMS и обновите пути к файлам tempdb на /var/opt/mssql/tempdb с помощью следующих команд T-SQL:

SELECT [name],
       physical_name
FROM sys.master_files
WHERE database_id = 2;

В зависимости от количества отображаемых файлов измените следующую команду. В этом примере есть четыре tempdb файла данных и один файл журналов. Используйте следующие команды для обновления расположения файлов:

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf');
GO

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/tempdb/tempdb2.mdf');
GO

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev3, FILENAME = '/var/opt/mssql/tempdb/tempdb3.mdf');
GO

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev4, FILENAME = '/var/opt/mssql/tempdb/tempdb4.mdf');
GO

ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf');
GO

После обновления расположения файлов остановитесь и перезапустите контейнер с помощью следующих команд:

docker stop sql1
docker start sql1

Разверните контейнеры с размещением всех данных и журналов в tmpfs.

Предупреждение

Эта конфигурация не поддерживается, но может использоваться для целей разработки. Вы можете предоставить отзыв по этому сценарию на сайте GitHub.

docker run -e ACCEPT_EULA=Y \
  -e 'MSSQL_SA_PASSWORD=<password>' \
  --tmpfs /var/opt/mssql/data:uid=10001,gid=10001,size=4G \
  -p 5434:1433 \
  --name sql2 \
  -h sql2 \
  -d mcr.microsoft.com/mssql/server:2025-latest