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

Откуда:
Сообщений: 44
Здравствуйте знатоки!
Возник следующий вопрос:
Есть некая БД. Системные базы, файл MDF и LDF лежат локально на диске C:\
При проверке диска утилитой diskspd с параметрами (-c5G -d300 -r -w100 -t8 -o8 -b8K -h -L C:\Temp\testfile.dat) выдает, в среднем, 150-200мб/сек скорость записи на диск (смотрю через perfmon.exe).
Модель восстановления - Simple

Если я сделаю бесконечный цикл, в котором буду вставлять данные в тестовую таблицу (1 столбец, без индексов и т.д.), скорость обращения к диску будет в районе 30-35мб/сек.

Если я создам табличную переменную, и буду заливать данные в нее, скорость обращения к диску не будет превышать 20-21мб/сек.

Вопрос: что в моем примере гасит скорость записи? Операции переноса данных между логом и mdf?
24 янв 18, 15:10    [21134727]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AngryError,

ну переменные таблицы не логируются, вот в ldf и не пишем
24 янв 18, 15:12    [21134737]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
AngryError
Member

Откуда:
Сообщений: 44
TaPaK,
Ок, но почему тогда скорость в этом случае не выросла?)
Я видимо чего-то не понимаю

Скорость записи на диск 100мб/сек, а база может писать только 20-30мб в сек?
24 янв 18, 15:19    [21134764]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AngryError,

но ведь генерируем запсь не с бесконечно большой скоростью. Хотя может есть и другие параметры
24 янв 18, 15:20    [21134771]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AngryError,
автор
Скорость записи на диск 100мб/сек, а база может писать только 20-30мб в сек?

сгенерируйте таблицу на 1кк и бесконечно сливайте её в другую, будет другая нагрузка на диск
24 янв 18, 15:22    [21134783]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
sdgth
Guest
AngryError,

А вы в несколько потоков попробуйте
24 янв 18, 15:28    [21134808]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
AngryError
Вопрос: что в моем примере гасит скорость записи? Операции переноса данных между логом и mdf?
Ожидание завершения транзакции?
Попробуйте обернуть ваш цикл снаружи командами
begin tran
commit tran
24 янв 18, 15:31    [21134821]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
AngryError
Member

Откуда:
Сообщений: 44
TaPaK,
Верно. В случае переноса данных из другой таблицы, скорость вырастает до 50-70 мб/сек.
Это связано с тем, что я данные "из воздуха" беру?

alexeyvg,
К сожалению, конкретно в моем примере - не дало прироста к производительности.
24 янв 18, 15:46    [21134902]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AngryError
TaPaK,
Верно. В случае переноса данных из другой таблицы, скорость вырастает до 50-70 мб/сек.
Это связано с тем, что я данные "из воздуха" беру?

alexeyvg,
К сожалению, конкретно в моем примере - не дало прироста к производительности.
\
нууу
+
открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, достала кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку, закрыла сумочку, открыла кошелек, достала деньги, открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, положила туда кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку.

и так миллион раз :)
24 янв 18, 15:48    [21134911]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
AngryError
ат локально на диске C:\

сжатие для драйва с небоюсь по умолчанию включенно ?
24 янв 18, 15:54    [21134944]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
invm
Member

Откуда: Москва
Сообщений: 9128
TaPaK
ну переменные таблицы не логируются
Очень даже логируются. Ибо иначе никак.
В результатах fn_dblog tempdb эти транзакции поименованы как TVQ.
24 янв 18, 15:57    [21134961]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
AngryError
Member

Откуда:
Сообщений: 44
TaPaK,

Еще 1 небольшой пример.
Усложним предыдущую ситуацию, разделив MDF и LDF на разные диски.
В этом случае, как показывает perfmon.exe - нагрузка на запись поделится примерно пополам между этими дисками.
С чем это может быть связано?
мое ИМХО - что данные сначала попадают в лог, и потом чекпоинтом переносятся в MDF.
или есть какие-то данные, которые попадают сразу в MDF ?
24 янв 18, 16:10    [21135015]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
AngryError
или есть какие-то данные, которые попадают сразу в MDF ?

в случае minimally logged operations страницы данных пишутся на диск еще до коммита by eager writer,
т.е. независимо от чекпойнта.
и только когда все они записаны на диск,
log records, в которых в общем-то и нет самих данных, только page allocations,
относящиеся к этой minimally logged operation, будут сброшены на диск.

разумеется, если еще что-то, что не есть минимально логируемое,
коммитится в процессе этого минимально логируемого балка, то лог сбрасывается в связи с теми другими коммитами.
TaPaK
ну переменные таблицы не логируются, вот в ldf и не пишем

здрасьте приехали.
разумеется, и они тоже логируются
24 янв 18, 16:51    [21135188]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
sdgth
Guest
AngryError,

https://technet.microsoft.com/ru-ru/library/aa337560(v=sql.90).aspx
24 янв 18, 16:56    [21135223]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
invm, Yasha123

виновать по всем пунктам :)
24 янв 18, 16:56    [21135224]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
AngryError
К сожалению, конкретно в моем примере - не дало прироста к производительности.
Реально??? А код покАжите?
24 янв 18, 17:35    [21135393]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
alexeyvg
AngryError
К сожалению, конкретно в моем примере - не дало прироста к производительности.
Реально??? А код покАжите?

вполне себе реально.
у него же бесконечный цикл.

вы хотели сэкономить на сбросе каждой строки инсерта в лог,
ибо получаем тучу мини-транзакций в режиме автокоммита?
а если все делать в одной транзакции, то типа записи лога не будут на диск сбрасываться?
но ведь все равно будут, буфер лога всего 60Кб, заполнили-сбросили.
да, сбрасывание будет происходить реже, зато теперь лог перестанет перезаписываться
(у ТС простая модель)
бесконечный цикл, да поди еще в тестовой базе с дефолтным размером/приращением лога
-> теперь он будет еще и на занулении лога ждать, ибо лог будет распирать
24 янв 18, 18:28    [21135643]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
Yasha123
вы хотели сэкономить на сбросе каждой строки инсерта в лог,
ибо получаем тучу мини-транзакций в режиме автокоммита?
а если все делать в одной транзакции, то типа записи лога не будут на диск сбрасываться?
Вот у меня сейчас цикл на миллион выполнился в транзакции в 9 раз быстрее, и запись на диск была в 10 раз интенсивнее (в mdf, а в ldf в 2 раза)
Это же классика - заменить мелкие транзакции (например в цикле) на одну большую.
Как минимум будет меньше записи в лог, потому что для транзакции записывается служебная информация.

Ну и теоретически есть ожидание завершения (физической) записи в лог перед возвратом управления после комита транзакции.
Этому, правда, помогает кеширование, в том числе на контроллерах с батарейкой, но оно же в любом случае менее эффективное, чем внутри сиквела формировать запись в память, и линейно (и параллельно) её сбрасывать в лог-файл.

+ примерный тест
create table test_perf
(
	id int identity primary key clustered,
	name	char(10)
)

set nocount on
go
truncate table test_perf
go
select getdate()
declare @i int = 0
while @i < 1000000
begin
	insert test_perf(name)
	values('asdfghjkl;')
	set @i = @i + 1
end
select getdate()
go
truncate table test_perf
go
select getdate()
begin transaction
declare @i int = 0
while @i < 1000000
begin
	insert test_perf(name)
	values('asdfghjkl;')
	set @i = @i + 1
end
commit transaction
select getdate()

2018-01-24 20:27:23.720
2018-01-24 20:32:45.737
5:22

2018-01-24 20:34:10.360
2018-01-24 20:34:51.717
0:41
24 янв 18, 20:44    [21135915]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
nvv
Member

Откуда:
Сообщений: 54
AngryError,
Скорость последовательного доступа к диску и IOPS понятия обратно зависимые. Больше операций - меньше скорость. Это характерно для любых дисков.
24 янв 18, 22:21    [21136094]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
nvv
AngryError,
Скорость последовательного доступа к диску и IOPS понятия обратно зависимые. Больше операций - меньше скорость. Это характерно для любых дисков.
Так ТС вставляет в пустую таблицу без индексов, то есть скорее всего записывает последовательно некоторое количество секторов.
24 янв 18, 23:28    [21136250]     Ответить | Цитировать Сообщить модератору
 Re: Скорость записи данных на диск  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
AngryError,

виртуалка, что ли?
26 янв 18, 18:53    [21142613]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить