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

Откуда: Москва
Сообщений: 1315
Блог
Имеется тестовый сервер, используемый для тестов производительности.
В качестве дисковой системы используется Dell/EMC CX300, direct attached.
Производилось тестирование производительности базы данных, SQL Server 2005.
Данные на RAID10, 6 дисков, лог на RAID10, 4 диска. Tempdb на RAID1, но во время тестов никакой активности на ней счетчики не показывают.
Тесты показывали что система упирается в скорость записи в лог.
RAID10 переконфигурировали в RAID0 - понятно что для продакшн серверов такое не пойдет но для тестовой системы нормально.
Результат - ничего не изменилось.
Пришлось заняться более детальными тестами.
Создаю табличку:
create table TestLogWrites(
ID int identity(1,1) primary key clustered,
LongField varchar(max) not null)
Потом запускаю тест, в 8 потоках:
set nocount on
-- before start
while (object_id('tempdb..##StartTest') is null)
begin
  waitfor delay '00:00:00.050'
end


declare @l varchar(max), @s varchar(max)
set @s = 'a'
set @l = replicate(@s, 100)
SELECT getdate() as [Time started]
declare @i int
set @i = 0
while @i < 10000
begin
   insert into TestLogWrites(LongField) values(@l)
   set @i = @i + 1
end
SELECT getdate() as [Time finished]
Результаты:
Если в replicate стоит 100, получается что на диск с логом по счетчикам пишутся 2.7 МБ в секунду, дисковая очередь на логе около 9. Если 100 заменить на 100000, получается ~80 Мб в секунду, дисковая очередь на логе около 7.
С чем связаны такие результаты, нормально ли это?
6 июл 09, 15:49    [7381653]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Вы бы хоть в транзакцию цикл завернули что-ли?! Или как раз было желание протестить имено такой скрипт?

автор
Тесты показывали что система упирается в скорость записи в лог.


На основании каких данных Вы сделали такие выводы?
6 июл 09, 15:52    [7381674]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
Цикл не завернут в транзакцию именно для тестирования производительности при мелких транзакциях.
Упирается в лог - на основе счетчиков производительности и sys.dm_os_wait_stats
6 июл 09, 16:01    [7381731]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
И еще одно уточнение - если поменять местами лог и данные, то производительность при записи в лог на мелких транзакциях не увеличивается. - При том что лог переносится с RAID0 c 4-мя дисками на RAID0 c 6-ю дисками.
Во время тестов, был включен кеш - 480 Мб на запись, и что-то около 70 Мб на чтение.
6 июл 09, 16:04    [7381763]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31181
andsm
Цикл не завернут в транзакцию именно для тестирования производительности при мелких транзакциях.
Упирается в лог - на основе счетчиков производительности и sys.dm_os_wait_stats
Если нужны именно мелкие транзакции, может, лучьше попробовать лог на RAID1?

Ну и настройки контроллера смотрите - может разрешить кеширование записи...
6 июл 09, 16:06    [7381782]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
alexeyvg
Если нужны именно мелкие транзакции, может, лучьше попробовать лог на RAID1?

Ну и настройки контроллера смотрите - может разрешить кеширование записи...

Чем лог на RAID1 (означает два диска) лучше чем на RAID0 c 6-ю дисками? RAID0 должен показывать более высокую производительность. - Хотя показывает примерно столько же что и показывал RAID10.

Кеширование записи на контроллере включено - кеш зазеркалирован, с батарейкой, так что это нормально.
6 июл 09, 16:11    [7381821]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
andsm
Цикл не завернут в транзакцию именно для тестирования производительности при мелких транзакциях.


recovery interval не хотите попробовать увеличить?
6 июл 09, 16:18    [7381879]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
pkarklin
andsm
Цикл не завернут в транзакцию именно для тестирования производительности при мелких транзакциях.


recovery interval не хотите попробовать увеличить?

А он то здесь при чем? Очередей на диски с данными в тестах с мелкими транзакциями нет.
Чекпойнты проходят быстро, скорость записи там около 100-120 Мб в секунду.
Скорость записи в лог между чекпойнтами не растет.
6 июл 09, 16:22    [7381918]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
Вечером еще прогоню тесты с отключенным кешем - возможно, что-то изменится.
6 июл 09, 16:23    [7381929]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
a_shats
Member

Откуда: Москва
Сообщений: 814
andsm,
Если в replicate стоит 100, получается что на диск с логом по счетчикам пишутся 2.7 МБ в секунду, дисковая очередь на логе около 9. Если 100 заменить на 100000, получается ~80 Мб в секунду, дисковая очередь на логе около 7.

Блоками по 4 Кбайт, последовательная запись, получается 168 с копейками IOps. То есть даже больше, чем могут 4х15К винта (кэш слегка помогает, видимо). Ну и ?
Отключение кэширования сделает производительность на запись хуже, но стабильнее (не будет прыжков во время сброса кэша записи на винты).
Ну и, по малому количеству дисков, да и в тестовой эксплуатации - объединить все доступные винты в один массив RAID10 и погонять базу на нем не пробовали?
Ну и еще вариант - под эту конкретную нагрузку тупо не хватает винтов. ;)

Вообще говоря, ЕМС СХ300 ни разу не чемпион отрасли/класса по производительности, но я сильно сомневаюсь, что ему с одной полки тяжко станет.
6 июл 09, 16:29    [7381994]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
a_shats
andsm,
Блоками по 4 Кбайт, последовательная запись, получается 168 с копейками IOps. То есть даже больше, чем могут 4х15К винта (кэш слегка помогает, видимо). Ну и ?

Но почему при записи 100кб записей получаются 80 Мб в секунду?
И добавление в RAID0 еще двух дисков никак не улучшает скорость?

То что CX300 не чемпион понятно, тесты для того чтобы понять что именно заказывать из того что может справится с нагрузкой. Пока очень странно - уж очень рано он затыкается.
6 июл 09, 16:34    [7382049]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3200
Одиночный инсерт - дорогая операция для сервера (относительно, конечно). Я имею в виду, для внутреннего С++ - ного кода MS SQL Server - там такая матрешка каждый раз разбирается и потом собирается, что ой. Поэтому лично мне неудивительно, что тесты показывают такую картину - собственно, именно поэтому MSFT реализовала в 2008 версии такую штуку, как extended inserts, как раз чтобы сократить расходы на множественные инсерты одиночных строк.

Скажите, вы какие-нибудь счетчики смотрели в процессе теста, помимо дисковых? Интересуют процессорные, в первую очередь.

Просто я бы смотрел, скорее, не на объем данных, а на количество строк, добавляемых в единицу времени. Ваш тест, имхо, показывает, что проблема явно не в объемах.
6 июл 09, 16:54    [7382203]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
a_shats
Member

Откуда: Москва
Сообщений: 814
andsm,
Но почему при записи 100кб записей получаются 80 Мб в секунду?

Точно не скажу. Могу лишь предположительно сказать, что при большем объеме одной записи лучше помогает кэширование отложенной записи - что в SQL, что потом в массиве.
Могу ошибаться.
И добавление в RAID0 еще двух дисков никак не улучшает скорость?

Фактически - сколько операций записи в секунду производится в каждом случае, смотрели ?

Переконфигурация RAID10 в RAID0, кстати, кроме объема, ничем более помочь и не должна была. По производительности они примерно одинаковы.

Если хотите увидеть красявые мегабайты в секунду - увеличивайте блок данных, каким задача работает с дисковой подсистемой, до 512-2048 КБайт :) Понятно, что при этом количество операций ввода-вывода в секунду некисло упадет (т.е. серьезно ухудшится производительность на случайный доступ в много потоков).

Ну и, повторюсь, если база дисковую недогружает, а лог перегружает - имеет смысл попробовать покласть их на единый массив, дабы никто ни у кого производительность винтов не отнимал.
6 июл 09, 16:55    [7382215]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
andsm
Member

Откуда: Москва
Сообщений: 1315
Блог
Загрузка процессора по счетчикам во время теста - в пределах 3-5%.
dm_os_waitstats показывает сплошь writelog, resource_semaphore (нехватка процессора) - по нулям.


Writes per second - 3500 в секунду в обоих случаях, довольно четкая полочка на все время тестами с малыми изменениями во время теста.
6 июл 09, 17:16    [7382376]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность записи в лог  [new]
a_shats
Member

Откуда: Москва
Сообщений: 814
andsm
Writes per second - 3500 в секунду в обоих случаях, довольно четкая полочка на все время тестами с малыми изменениями во время теста.

%) Тогда я не понимаю, на что Вы жалуетесь. Что для 4, что для 6 винтов 3500 IOps на запись - это ОЧЕНЬ много. То есть кэш СХ300 руляет во всю мощу. Так, для справки: чтобы гасить эту нагрузку только винтами, их нужно порядка 20 штук
6 июл 09, 17:29    [7382473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить