===== Файлы системной базы данных tempdb ===== Системная база данных **tempdb** активно используется базами данных **1С:Предприятие 8.3** для хранения временных таблиц, промежуточных расчетов, версий строк при использовании режима версионирования и прочих временных данных. То есть для задач 1С:Предприятие интенсивность обращений к базе **tempdb** находится на высоком уровне, поэтому нужно подумать о размещении этой базы на выделенном быстром дисковом устройстве.Подходящими кандидатами на роль диска под **tempdb** будут выделенные быстрые дисковые RAID-группы уровня RAID1, выделенные накопители SSD или вообще RAM-диск. В большинстве сценариев рекомендуется разбивать базу **tempdb** на несколько файлов данных с одинаковом начальным размером (**Initial size**) от **1GB** и больше и увеличенным показателем прироста, например, в **512MB**. При определении количества файлов можно руководствоваться принципом: количество процессорных ядер = количество файлов данных **tempdb**, но при этом стоит помнить о том, что использование более 8 файлов (даже при количестве ядер более 8) далеко не всегда может иметь положительный эффект. Возможно по этой причине в инсталляторе **SQL Server 2016** даже при большом количестве процессорных ядер по умолчанию предлагается 8 файлов **tempdb**. Относительно **1С:Предприятие 8.3** можно встретить рекомендацию о том, что общий размер **Initial size** для всех файлов БД **tempdb** должен быть от 25% до 40% от размера рабочей БД 1С:Предприятие. Саму процедуру переноса файлов **tempdb** на другой диск мы рассматривали ранее в заметке [[https://blog.it-kb.ru/2010/11/27/sql-server-2008-move-db-files-to-another-disk/|SQL Server 2008 - Перенос файлов БД tempdb на отдельный диск]]. Эта процедура может использоваться и на новых версиях СУБД, вплоть до **SQL Server 2016**. Рассмотрим частный пример распределения файлов **tempdb** по разным дисковым томам, имеющим разные показатели производительности. В нашем примере имеется два тома NTFS: * **R:** менее производительный, но больший по объёму диск * **T:** быстрый RAM-диск меньшего объёма. Часть файлов данных в файловой группе **tempdb**, а также файл лога размещены на быстром диске. Файлы данных, расположенные на быстром диске установлены фиксированного размера без возможности авторасширения (исключением здесь является только файл лога). Другая часть файлов данных размещена на менее производительном дисковом томе, но при этом для файлов включено авторасширение. {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190213-191331.png }} В результате такой конфигурации, файлы **tempdb** в нашем случае будут распределены по дисковым томам следующим образом: 4 файла данных и лог **tempdb** окажутся на быстром томе **T:** {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190213-191402.png }} Другие 4 файла данных **tempdb** окажутся на менее производительном дисковом томе **R:** {{ :1c:setting-up-microsoft-sql-server-for-1c-enterprise-8-3:pasted:20190213-191425.png }} В случае если в ходе работы экземпляра SQL Server потребуется дополнительное расширение ёмкости **tempdb**, то файлы начнут прирастать на меньшем по производительности, но большем по объёму дисковом томе **R**. К операциям, которые могут вызвать бурный рост **tempdb** при работе БД **1С:Предприятие 8.3** можно отнести, например, регламентные процедуры с конфигурацией 1С, выполняемые из конфигуратора (обновление конфигурации, перерасчёт итогов и т.п.). Кроме того, активный рост **tempdb** может вызвать построение в 1С каких-то тяжёлых отчётов с большим количеством данных и за длительные периоды при условии, что код отчётов неоптимален или вообще содержит ошибки. В практической среде при размере БД около 170GB во время построения подобного отчёта мы наблюдали рост **tempdb** до 350GB. Учитывая эти моменты стоит подумать о полной изоляции файлов **tempdb** на выделенных дисковых томах, чтобы их возможный бурный рост не смог нарушить функционирования других БД SQL Server. Используемый в нашем примере дисковый том **T:** представляет собой RAM-диск, подключенный к серверу SQL Server по методике, описанной в отдельной статье нашего Блога : [[https://blog.it-kb.ru/2018/12/29/how-to-create-ramdisk-for-sql-server-tempdb-in-windows-server-failover-cluster-using-linux-io-lio-fc-target/|Организуем RAM-диск для кластера Windows Server с помощью Linux-IO FC Target]] ---- Дополнительные источники информации: * [[https://olontsev.ru/2016/04/sql-server-2016-configure-tempdb-during-installation/|Олонцев Сергей - SQL Server 2016: конфигурация tempdb во время установки]] * [[http://sqlcom.ru/dba-tools/tempdb-in-sql-server-2016/|Стиль жизни SQL - Улучшения tempdb в SQL Server 2016]] * [[http://sqlcom.ru/video/optimization/all-about-tempdb/|Стиль жизни SQL - Все что вы всегда хотели узнать про tempdb, но не знали, кого спросить (видео)]] * [[https://www.youtube.com/watch?v=qnNz9H_jayQ|Гилёв Вячеслав - Особенности эксплуатации SQL Server 2008 R2 для 1С Предприятие 8]] ---- Проверено на следующих конфигурациях: ^ Версия SQL Server ^ | Microsoft SQL Server 2016 SP2 CU4 (13.0.5233.0) | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 13.02.2019 11:58 {{tag>"SQL Server" "SQL Server 2016" "System Databases" tempdb "1C 8.3" "1C" RAMDisk Sizing}} ~~DISCUSSION~~ ~~NOTOC~~