Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Настройка TempDB файлов  [new]
invertex
Member

Откуда:
Сообщений: 1
Коллеги, пожалуйста помогите настроить работу с TempDB файлами или ткните носом, где почитать.
Исходные данные:
1. В качестве приложения используется 1С.
2. На виртуальном RAM диске расположены: tempdb.mdf, tempdev01.ndf, tempdev02.ndf, tempdev03.ndf, templog.ldf
3. На SSD диске расположен: tempdev04.ndf, templog01.ldf
4. TempDB и Log размер InitalSize 1024MB с автоматическим приращением 512MB.


В результате хотелось бы получить следующее:
1. Используются файлы на виртуальном RAM диске до тех пор пока не закончилось место.
2. Если место на RAM диске закончилось, начинаем использовать SSD.
3. При рестарте SQL, размер файлов возвращается к п.4, а не к последнему размеру файлов (сейчас почему-то восстанавливается последний размер).
18 июн 18, 13:53    [21499710]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Файл журнала транзакций работает именно так: когда первый файл заканчивается переходим на второй. Обычные файлы с данными заполняются всегда параллельно, поэтому тут ничего не сделать.
18 июн 18, 14:23    [21499815]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
invertex,

про файлы лога вам уже ответили

про файлы данных:
выделение места в файлах данных происходит циклически (файлы перебираются) и
пропорционально свободному месту
поэтому можно выделить для файлов tempdb.mdf, tempdev01.ndf, tempdev02.ndf, tempdev03.ndf одинаковое пространство максимально заполнив диск и отключив автоприращение.
а для файла tempdev04.ndf выделить очень мало места с малым автоприращением.
тогда tempdev04.ndf будет использоваться минимально, основная нагрузка на него ляжет только когда остальные файлы будут заполнены.
НО, нужно учитывать, что в этот момент он будет очень часто приращиваться малыми кусочками.
(тут можно написать скрип отслеживающий такое поведение и меняющий настройки для этого файла)

про рестарт службы:
размер файлов tempdb после рестарта сбрасывается на значения "последней ручной установки"
посмотреть эти значения можно так:
SELECT 
name, file_id, type_desc, size * 8 / 1024 [TempdbSizeInMB]
FROM sys.master_files
WHERE DB_NAME(database_id) = 'tempdb'
ORDER BY type_desc DESC, file_id 
GO
18 июн 18, 14:45    [21499919]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Дедушка
поэтому можно выделить для файлов tempdb.mdf, tempdev01.ndf, tempdev02.ndf, tempdev03.ndf одинаковое пространство максимально заполнив диск и отключив автоприращение.

Ну и maxdop поставить в 4 вместо 0, так я думаю...Чтобы не было у MSSQL движка мысли сделать все в 5 потоков, начав активно приращивать tempdev04.ndf раньше нужного.
18 июн 18, 14:53    [21499964]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Дедушка,

Я сейчас неуверен, но вполне может быть так, что сервер пытается заполнить файлы данных на одинаковый размер заполненности. Т.е. ему все равно какой текущий размер файла, он будет все равно во все 4 файла лить одинаковый объем.
18 июн 18, 14:59    [21499992]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Rankatan
Дедушка,

Я сейчас неуверен, но вполне может быть так, что сервер пытается заполнить файлы данных на одинаковый размер заполненности. Т.е. ему все равно какой текущий размер файла, он будет все равно во все 4 файла лить одинаковый объем.

Если конечно файлы все изначально пустые. Но если например у нас есть 2 файла заполненные на 500мб каждый и мы добавили новый файл, то да в третий будет писаться намного больше данных, чтобы в конечном итоге размер заполненности сравнялся.

В любом случае вариант когда у нас 4 файла и 3 их них кладем на ram и четвертый на ssd решит проблему. В этом случае на ram будет писаться в три раза больше данных.
18 июн 18, 15:05    [21500028]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
aleks222
Member

Откуда:
Сообщений: 850
invertex
Коллеги, пожалуйста помогите настроить работу с TempDB файлами или ткните носом, где почитать.
Исходные данные:

2. На виртуальном RAM диске расположены: tempdb.mdf, tempdev01.ndf, tempdev02.ndf, tempdev03.ndf, templog.ldf


Осподе, милосердный!!! Избави нас от... искушения!

Сервер сам эффективнее использует ОЗУ, чем фсякие "виртуальные RAM диски".
Верни ОЗУ серверу и не майся херней.
18 июн 18, 15:07    [21500039]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
0wl
Member

Откуда:
Сообщений: 53
aleks222
Верни ОЗУ серверу и не майся херней.

Может там Standard и возвращать уже некуда?

По поводу записи в tempdb: вот, например, кучка MVP пишет, что файлы используются пропорционально размеру:
https://logicalread.com/sql-server-tempdb-best-practices-multiple-files-w01/#.WyehKYp9hhE
When you create multiple data files they will all be in the primary filegroup and SQL Server uses a proportional fill algorithm to determine which file to use for each request to create an object.
18 июн 18, 15:20    [21500116]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Rankatan,

Дело не в размере файла, а в размере свободного места
пропорционально которому распределяются данные.
В доке хорошо описано и про Round Robin и про Proportional Fill
18 июн 18, 16:10    [21500374]     Ответить | Цитировать Сообщить модератору
 Re: Настройка TempDB файлов  [new]
Rankatan
Member

Откуда:
Сообщений: 250
сделал репу

USE [master]
GO

CREATE DATABASE [test_size]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'test_size', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\test_size.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
 FILEGROUP [GRSIZES] 
( NAME = N'size1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\size1.ndf' , SIZE = 111104KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'size2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\size2.ndf' , SIZE = 111104KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'size3', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\size3.ndf' , SIZE = 111104KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'size4', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\size4.ndf' , SIZE = 512KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'test_size_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\test_size_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

CREATE TABLE [dbo].[tblsize](
	[i] [int] NULL,
	[bin] [varbinary](max) NULL
) ON [GRSIZES] TEXTIMAGE_ON [GRSIZES]

GO


insert into [dbo].[tblsize] ([bin])
select cast(REPLICATE('dsfasdfdsf',1000) as varbinary(max))
GO 200000


вывод такой: он пишет пропорционально свободному месту внутри файлов, если у нас 4 пустых файла (у 3х начальных размер 100 мб и один 512кб) то пока место полностью не будет занято внутри файлов с 100мб он не начнет писать в файл 512кб. Короче сервер стремится уровнять свободное место внутри всех файлов.

Поэтому Дедушка прав.
18 июн 18, 16:15    [21500395]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить