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

Откуда: Екатеринбург
Сообщений: 59
Добрый день,

Дано
на одном сервере стоят одинаково сконфигурированные инстансы 2012 и 2016:

1. версии
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standard Edition (64-bit)
Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64-bit)

2. sp_configure на инстансах одинаковые (с точностью до новых для 2016 опций).

3. На каждом инстансе создается одинаковая пустая БД, нацеленная на одну и ту же папку на диске, начальный размер и параметры приращения ставятся одинаковые.

4. В БД отключаются автосоздание и обновление статистик.

5. Выполняется тест с insert 10 тыс. строк в таблицу (привожу пример с кучей, но не принципиально):
set nocount on
go

exec( '
create table dbo.TestInsert 
  ( i int not null 
  , s varchar(50) not null
  )
 ')

declare 
    @d1 datetime
  , @d2 datetime
  , @i int

set @d1 = getdate() 
set @i = 1
while @i <= 10000
begin
  insert into dbo.TestInsert ( i, s ) select @i, replicate( 'a', 50 )
  set @i = @i + 1
end

set @d2 = getdate()
select datediff(ms, @d1, @d2)

exec( 'drop table TestInsert')


Результат 1
Стабильно воспроизводится отставание в 2016.
В среднем в тестах длительность на 2012 = 530 мс, длительность на 2016 = 600 мс.

Далее,
6. настраивается профайлер для замера длительностей сбора статистики (фильтр по TextData like <наш insert>) в таблицу (т.е. будем смотреть длительность в микросекундах).

Результат 2
Гистограмма длительностей отдельных insert 2012 vs 2016:

К сообщению приложен файл. Размер - 16Kb
28 сен 17, 16:27    [20829519]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение времени insert в 2012 vs 2016  [new]
Acce_Ekb
Member

Откуда: Екатеринбург
Сообщений: 59
Вопросы -

1. может ли кто-то воспроизвести у себя подобное?
2. какие есть мысли по отставанию 2016, что почитать?
28 сен 17, 16:29    [20829529]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение времени insert в 2012 vs 2016  [new]
aleks222
Guest
Если к коду добавить еще несколько строчек - быстрее работать не будет.

Дык вот, 2016 это дописанный 2012.
За крайне редким исключением, новые версии ПО медленнее старых, ибо за доп. прибамбасы надо платить.
28 сен 17, 19:48    [20830083]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение времени insert в 2012 vs 2016  [new]
Acce_Ekb
Member

Откуда: Екатеринбург
Сообщений: 59
Добавлю еще сведений:

  • объемы записей в лог через sys.dm_io_virtual_file_stats примерно равны:
      
    2012 - 5174784 байт
    2016 - 5171200 байт

  • оборачивание цикла в транзакцию не меняет общее соотношение

  • один толстый insert сразу всех 10 тыс записей на 2016 быстрее процентов на 30.
  • 29 сен 17, 07:36    [20830688]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Prolog
    Member

    Откуда: Москва
    Сообщений: 2775
    Попробуйте на 2016 перевести базу в уровень совместимости 2012. И повторите insert'ы.
    29 сен 17, 10:21    [20830960]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    Prolog
    Попробуйте на 2016 перевести базу в уровень совместимости 2012. И повторите insert'ы.

    для одиночного инсерта возможен какой-то другой план?
    29 сен 17, 10:53    [20831092]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Prolog
    Member

    Откуда: Москва
    Сообщений: 2775
    o-o
    Prolog
    Попробуйте на 2016 перевести базу в уровень совместимости 2012. И повторите insert'ы.

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

    Ой не знаю! Однако у нас была заметная деградация производительности при переходе на 2014. Вылечилась (по совету Microsoft) переводом базы данных на уровень совместимости 2012.
    29 сен 17, 11:07    [20831137]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 3594
    Prolog
    o-o
    пропущено...

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

    Ой не знаю! Однако у нас была заметная деградация производительности при переходе на 2014. Вылечилась (по совету Microsoft) переводом базы данных на уровень совместимости 2012.

    под деградацией вы понимаете времы выполнения судя по всему
    29 сен 17, 11:12    [20831146]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Prolog
    Member

    Откуда: Москва
    Сообщений: 2775
    TaPaK, да, под деградацией производительности я понимаю увеличение времени выполнения запросов.
    Miscrosoft где-то писала, что если на 2014 запросы выполняются медленнее, чем на предыдущих версиях, то нужно установить совместимость с 2012.
    29 сен 17, 11:22    [20831178]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 3594
    Prolog
    TaPaK, да, под деградацией производительности я понимаю увеличение времени выполнения запросов.
    Miscrosoft где-то писала, что если на 2014 запросы выполняются медленнее, чем на предыдущих версиях, то нужно установить совместимость с 2012.

    ну вопросов больше нет
    29 сен 17, 11:23    [20831186]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    aleksrov
    Member

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

    И вы даже не выяснили причину этого, а просто сделали как сказала майрасофт. Такие темы часто в инете выскакивают и частенько причина новый cardinality estimator, но у вас видимо гугл забанен.
    29 сен 17, 11:36    [20831248]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 3594
    aleksrov
    Prolog,

    И вы даже не выяснили причину этого, а просто сделали как сказала майрасофт. Такие темы часто в инете выскакивают и частенько причина новый cardinality estimator, но у вас видимо гугл забанен.

    деградация, сэр :)
    29 сен 17, 11:38    [20831254]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    Prolog
    o-o
    пропущено...

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

    Ой не знаю! Однако у нас была заметная деградация производительности при переходе на 2014. Вылечилась (по совету Microsoft) переводом базы данных на уровень совместимости 2012.

    какой смешной товарищ.
    планы не пробовали сравнивать?
    если что-то поменялось, то благодаря чему-то.
    и это что-то в 2014-ом это новый оптимайзер,
    генерящий другие планы, ибо у него правила оценок кардинальности поменялись.
    и меняя compatibility level, вы возвращаете старый оптимайзер.

    ну а теперь скажите, что там неправильно можно оценить, вставляя 1 значение в кучу,
    а главное, какой же другой план можно придумать для этого инсерта?
    29 сен 17, 11:41    [20831271]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    вот у invm была здравая идея,
    что может в лог в 2016-ом больше записывается.
    ну так ТС же приводит цифры, сколько в лог ушло в обоих случаях.
    29 сен 17, 11:43    [20831278]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    aleksrov
    Member

    Откуда:
    Сообщений: 452
    o-o,

    А почему в 2016 в лог может больше писаться, вроде алгоритм с 2012 не менялся или я чего-то упустил?
    29 сен 17, 11:48    [20831290]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    aleksrov
    o-o,
    А почему в 2016 в лог может больше писаться, вроде алгоритм с 2012 не менялся или я чего-то упустил?

    может-может.
    просто реально больше записей валится, щас поищу, какие именно.
    ну и могут просто формат записей поменять, именно поэтому же мирроринг идет только в одну сторону,
    с младшей на старшую версию.
    обратно не пойдет, формат записей лога другой
    29 сен 17, 11:53    [20831313]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    раз не могу найти в письменном виде, значит, это было в каком-то видео.
    поищу уже из дома.
    там смысл был такой: Рэндал какие-то типы записей в логе показывал на своем 2012-ом,
    а у меня этого типа записей просто не было, ибо 2008.
    вот не то чтобы база не могла жить без этих записей, но ради какого-то удобства себе добавили
    29 сен 17, 12:18    [20831371]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    aleksrov
    Member

    Откуда:
    Сообщений: 452
    o-o,

    Спасибо, вечером поищу.
    29 сен 17, 12:20    [20831378]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    в общем, если проделать тест из видео Рэндала про Page Split вида
    create table test (c1 int, c2 chAR(1000))
    create clustered index test_cl on test(c1)
    insert into test values(1,'a')
    insert into test values(2,'b')
    insert into test values(3,'c')
    
    insert into test values(5,'e')
    insert into test values(6,'f')
    insert into test values(7,'g')
    insert into test values(8,'h')
    insert into test values(9,'i')
    checkpoint
    insert into test values(4,'d')
    select *
    from sys.fn_dblog(null, null)
    

    на 2008 и на 2012, то на 2012-ом чуть не вдвое больше записей в логе,
    ибо добавили LOP_INSYSXACT
    29 сен 17, 21:48    [20832649]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Дедушка
    Member

    Откуда: Город трёх революций
    Сообщений: 4625
    o-o
    из видео Рэндала про Page Split
    а ссылкой поделитесь?
    29 сен 17, 22:36    [20832729]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    +
    нас не прирежут за это?
    держите [pluralsight.com] SQL Server: Logging, Recovery, and the Transaction Log [2012, ENG]
    29 сен 17, 23:25    [20832814]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Дедушка
    Member

    Откуда: Город трёх революций
    Сообщений: 4625
    o-o,
    спасибо.
    29 сен 17, 23:32    [20832834]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Makar4ik
    Member

    Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
    Сообщений: 2677
    ..а ещё 16-му добавьте 32-64 гб памяти....
    чем новее - тем более жадные до памяти алгоритмы.
    Расчёт на то, что мозгов больше.
    30 сен 17, 00:12    [20832902]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Makar4ik
    Member

    Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
    Сообщений: 2677
    ...это на 2008 канало 8-16-24 гига памяти на сервере...
    теперь, чем больше, тем меньше пролбем...
    30 сен 17, 00:15    [20832906]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    o-o
    Guest
    ...а еще сказано, что инстансы сконфигурированы одинаково.
    но особо продвинутые могут рассказать,
    зачем при построчной вставке 10 тыс. строк в таблицу необходимо добавить 64Гига памяти.

    боюсь спросить, сколько же надо добавить памяти, чтобы суметь вставить гигабайт данных.
    тут без терабайта памяти всем капец, наверное
    30 сен 17, 00:26    [20832928]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Makar4ik
    Member

    Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
    Сообщений: 2677
    o-o
    ...а еще сказано, что инстансы сконфигурированы одинаково.
    но особо продвинутые могут рассказать,
    зачем при построчной вставке 10 тыс. строк в таблицу необходимо добавить 64Гига памяти.

    боюсь спросить, сколько же надо добавить памяти, чтобы суметь вставить гигабайт данных.
    тут без терабайта памяти всем капец, наверное
    смеётесь, мущщинка?
    А я вот домой прикупил 32 гига...
    Раньше думал, что 4-8 гиг - это потолок, чтобы был hibernate быстрый.
    Оказалось, он либо не нужен, либо редкий.

    8 гиг в сервере - могу понять. в случае виртуалки, когда таких вот серверов 100500 штук.
    30 сен 17, 00:45    [20832948]     Ответить | Цитировать Сообщить модератору
     Re: Сравнение времени insert в 2012 vs 2016  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 1895
    Makar4ik
    ..а ещё 16-му добавьте 32-64 гб памяти....
    чем новее - тем более жадные до памяти алгоритмы.
    Расчёт на то, что мозгов больше.
    Аж прям готов поверить что вы сами эти алгоритмы писали...
    6 окт 17, 23:08    [20849938]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2      [все]
    Все форумы / Microsoft SQL Server Ответить