И снова о latency - проведите у себя тест PLS

User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

тест приведен в конце. Он выполняет 10000 примитивных транзакций.
В обычном режиме SQL server будет дожидаться записи в лог (synchronous mode)
В SQL 2014 в режиме Delayed Durability, или в более ранних SQL для tempdb запись будеит асинхронна

Expected results (regular mode/delayed durability=forced):
(results may vary)

Старые добрые вращающиеся HDD: 60s / 300ms
SSD: 500ms / 300ms
Remote storage: 3000ms / 300ms

Заметим, что последнее число, скорее всего, меняться практически не должно
Странности каторые имеем на самом деле:

Remote Storage дает 3000ms / 2000ms
Есть еще ряд странностей типа "домашний комп дает в ряде случаев в 2 раза лучше чем супер пупер рабочий"
Но пока не до этого

Q1. Является ли extra latency 2000ms/10000 = 0.2ms неизбежной при использовании remote storage?
Q2. Почему в ряде случаев установка Delayed Durability=forced никак, или ненамного помогает (тогда как ожидается что при столь крошечных транзакциях будет почти всегда быстро)? Причем иногда (я видел несколько раз, но потом повторить не смог) Remote Storage с Delayed Durability работает быстро.

Я понимаю что latency 0.2ms это может казаться ловлей блох, при том, что, например, alert по latency в VMware по дефолту стоит по >50ms, а тут 0.2ms
Но для крошечных транзакций это дает 100% для local SSD vs ЛЮБОЙ remote storage

Code: Select all

set nocount on
GO
create table _Ptest (n int identity, k int not null, v varchar(128))
GO
insert into _Ptest (k,v) select 1, 'this is a test'
GO
declare @t datetime, @n int
set @t=getdate()
set @n=10000
while @n>0 begin
  insert into _Ptest (k,v) select @n,'stringy'
  set @n=@n-1
  end
select datediff(ms,@t,getdate())
GO
drop table _Ptest
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: И снова о latency - проведите у себя тест PLS

Post by Palych »

А ну как пустить этот тест из 100 процессов параллельно?
Любопытно кто кого сборет?
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

В общем у всех net storages добавляется 0.2-0.3ms latency. LIMBO effect.

Что касается чудес с Delayed Durability, то дело в том что SQL, несмотря на DD, старается заперсиситить транзакцию ASAP.
Как только становистя Disk Write Queue=0, он это начинает делать (думаю такая эвристика)
Как результат, лучшие результаты достигаются на МЕДЛЕННЫХ дисках, когда большое ожидание и log flush делается один раз
Худшие - на NetApp, когда Requests быстро полетают через драйвер на ту сторону и Queue почти всегда 0
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Дима, я думаю, экперимент нужно повторить со значительно более длинным циклом. Размер лог кеша в SQL Server во много раз превышает то, что было записано в лог в этом примере. Другими словами, для того, чтобы иметь реальное сравнение нужно заполнить лог кеша в случае ленивого коммита и только после этого делать измерения. Только в этом случае есть возможность нарваться на ситуацию, когда запись журнала может реально оказаться узким местом для ленивых коммитов. При этом, пропускная способность журнального вывода должна быть меньше, чем могут нагенерить ленивые коммиты. Иначе ленивые коммиты никогда не будут ждать окончания ввода/вывода и наличие или отсуствие ввода/вывода никак не скажется ни на каких измерениях.
Cheers
User avatar
Jerry
Уже с Приветом
Posts: 2252
Joined: 06 May 2006 21:45
Location: USSR->Israel->NY

Re: И снова о latency - проведите у себя тест PLS

Post by Jerry »

TCP Flow Control? Congestion control? Запустите pcap на сервере, с которого посылаются транзакции и ищите симптомы congestion и flow control (window size=0, PAUSE fragments, retransmissions)
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

tengiz wrote:Дима, я думаю, экперимент нужно повторить со значительно более длинным циклом. Размер лог кеша в SQL Server во много раз превышает то, что было записано в лог в этом примере. Другими словами, для того, чтобы иметь реальное сравнение нужно заполнить лог кеша в случае ленивого коммита и только после этого делать измерения. Только в этом случае есть возможность нарваться на ситуацию, когда запись журнала может реально оказаться узким местом для ленивых коммитов. При этом, пропускная способность журнального вывода должна быть меньше, чем могут нагенерить ленивые коммиты. Иначе ленивые коммиты никогда не будут ждать окончания ввода/вывода и наличие или отсуствие ввода/вывода никак не скажется ни на каких измерениях.
Я гонял тест с NetApp на n=1000000, минут двадцать он шел
tengiz, что вы называете "пропускной способностью"?
NetApp в данном тесте показывает 5 MBps - то есть жалкие крохи и... при этом система уперлась в IO - не по thoughput, а по roundtrips.

Могут ли ленивые записи в лог сгенерить несколько IO в парралель? Или атм один thread - все в очередь? (думаю это так)

Вы не знаете (случайно :) ) какого рода эвристики используется для Delayed Durability, наколько сильно он хочет эээ... опорожнить лог? :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Jerry wrote:TCP Flow Control? Congestion control? Запустите pcap на сервере, с которого посылаются транзакции и ищите симптомы congestion и flow control (window size=0, PAUSE fragments, retransmissions)
А как вы относитесь к информации из соседнего топика
viewtopic.php?f=46&t=193066
что на ванильной винде roundtrip будет всегда >0.1ms?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Jerry
Уже с Приветом
Posts: 2252
Joined: 06 May 2006 21:45
Location: USSR->Israel->NY

Re: И снова о latency - проведите у себя тест PLS

Post by Jerry »

Я надеюсь, Вы меня извините за аналогии, мне самому так удобно. Допустим, вместо транзакций и пакетов мы посылаем апельсины бочками. И надо нам их послать, скажем, 10,000, одна за одной, из Одессы.
- В случае UDP, мы просто будем запускать бочку за бочкой. Количество бочек в секунду (throughput) не будет зависеть от расстояния до пункта назначения (latency). А будет зависеть от количества бочек, посланных одновременно (bandwidth) и/или скорости погрузки (application performance)

В случае TCP все сложнее.
- Например, вы можете отгрузить только 100 бочек (MSS Window) и требовать тару назад (АСК), перед отгрузкой следующих 100. Разумеется, из Бердичева бочки вернутся быстрее, чем из Владивостока, и соответственно переправить 10,000 бочек туда будет быстрее
- Еще, время от времени, Вам будут звонить из пункта назначения или станций по дороге (flow control) и просить притормозить (PAUSE), тк образовались пробки из Ваших и чужих бочек. Например, часть пути - одноколейка (1Gbps), a посылали из большого железнодорожного узла (10Gbps)
- Бочки будут теряться (packet loss) и Ваш партнер будет просить дослать потерянное (retransmission). Легко предположить, со Владивостоком это будет происходить чаще (% packet loss) и у них дольше займет понять, что бочка потерялась.
- Некоторые партии будут доходить быстрее, чем другие. Соответственно, конец транзакции окажется на сервере перед ее началом и будет положен в буфер до прихода начала (jitter). Буфер тоже не резиновый (buffer overflow) и тогда будут происходить retransmissions

Все это решается при помощи настроек. Я из другой области и про NAS и Windows ничего умного сказать не могу, сорри. Я все это рассказываю к тому, что сам по себе latency не является решающим фактором.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Как правило да. Но в специфическом случае writes to transaction log, SQL server это делает синхронно, дожидаясь ответа
По вашей аналогии с бочкой, тара только одна, и чтобы послать следующий апельсин, надо дождаться чтобы тара пришла назад )
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Dmitry67 wrote:Могут ли ленивые записи в лог сгенерить несколько IO в парралель? Или атм один thread - все в очередь? (думаю это так)
Записи в журнал асинхронные независимо от режима фиксации, поэтому их можеть быть много. Верхняя граница - количество лог блоков размера 64K в системе, зависит от скю, у энерпрайз их больше, чем у стандартной. Количество - от десятков до сотен лог блоков, соответственно может быть столько же асинхронных записей одновременно.
Dmitry67 wrote:Вы не знаете (случайно :) ) какого рода эвристики используется для Delayed Durability, наколько сильно он хочет эээ... опорожнить лог? :)
В случае когда в лог не попадают "критические записи" (те, которые вынуждают лог блок немедленно начать писаться на диск - например, commit является "критической") лог начинает опорожняться полными 64K блоками, как только блок в памяти полностью заполнен. Он "закрывается", следующий лог блок в памяти "октрывается" и начинать принимать новые записи, а для "закрытого" блока тут же инициируется асинхронная записи на диск. При этом последующая генерация лога не ждет когда "закрытые блоки", которые уже стоят в очереди, завершат свой вывод на диск даже когда генерация лога делается для команд, приходящих с одного клиента. Единствеанная ситуация, когда генерация лога может запнуться, это когда самый старый лог блоки в памяти "закрыт" и ждет окончания вывода и при этом самый новый лог блок уже тоже полностью заполнен и так как лог блоки организованые как кольцевой буфер, генерить логи некуда пока самый старый не закончит вывод. Поэтому когда генерация лога без критических записей делается быстрее, чем производительность вывода устройства для лога и при условии что генерится лога достаточно для заполнения всего кольцевого буфера до того как самая старый лог блок закончил запись, производительность в итоге упрется в ограничение диска даже для ленивых коммитов.
Cheers
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Спасибо, все выглядит логично, но не объясняет результата моих экспериментов. Вернусь из командировки и запосчу результаты аккуратно, заглядывайте в топик пожалуйста )
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Я продолжу. Провел следующий тест. Тест запускался три раза и результаты третьего прогона. Все базы в Simple.

Code: Select all

set nocount on
GO
create table _Ptest (n int identity, k int not null, v varchar(128))
GO
insert into _Ptest (k,v) select 1, 'this is a test'
GO
declare @t datetime, @n int, @wd1 int, @wl1 int, @wd2 int, @wl2 int
set @t=getdate()
select @wd1=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl1=NumberWrites from ::fn_virtualfilestats(db_id(),2)
set @n=100000
while @n>0 begin
  insert into _Ptest (k,v) select @n,'stringy'
  set @n=@n-1
  end
select @wd2=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl2=NumberWrites from ::fn_virtualfilestats(db_id(),2)
select datediff(ms,@t,getdate()) as Duration,
  @wd2-@wd1 as DataWrites,
  @wl2-@wl1 as LogWrites
GO
drop table _Ptest
Что имеем
Колонки соответственно DurationMs, DataWrites, LogWrites
+DD означает что Delayed Durability включен

Code: Select all

Домашний комп, i7.
HDD Seagate 2Tb SATA
SSD Transcend 128Gb SATA

HDD        23880   560   100976
HDD+DD      1626    89     1662
SSD        44330    44   100106
SSD+DD      1563    35     1397

Работа, 2NUMA монстрик с NetApp RAID 10 на SSD, 10Gb сетка
Также медленный вращающийся диск D:

D:        611873   817   100769
D:+DD      10290    64     1452
NetApp     50263   294   100791
NetAppD+DD 11140    47     2328

Hаконец непревзойденная машинка с local RAID 10 SSD
Это SQL 2008 R2, так что под "DD" здесь используется "tempdb" 
(что не совсем верно)

SSD        9566     637  100333
tempdb     7876       0     475
Что я не понимаю:
1. Почему в DD количество Log Writes так гуляет?
2. Понятно что local SSD не превойдти изза network latency, но почему DD не является панацеей в этом случае? В частности, netApp+DD хуже чем Local SSD raid без DD!
3. Почему мой локальный комп в DD настолько быстрее серверов?
4. Почему мой SSD медленнее HDD? (как я понимаю в HDD работает какой то Write-behind, но тем не менее)

Спасибо
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Какой там на серверах recovery interval? И почему simple? В этом режиме лог будет обрезаться при чекпойнтах, что будет вызывать дополнительную активность в логе, имеющую косвенное отношение к собственно тестовой нагрузке. Я бы сделал full recovery и максимальный recovery interval для теста, если, конечно, это не продакшен сервер. 10000 строк тоже выглядит маловато. Также, возможно, будет интересно посмотреть на статистику времени ожидания окончания ввода-вывода (IoStall...) и байтов (Bytes...) из той же tvf.
Cheers
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Там 100000, а не 10000
У нас все базы в Simple :) Я сам вначале был в шоке, но пока не будем открывать этот can of worms.
Recovery interval default, не думаю что это влияет
Для чистоты эксперимента сделаю full, задеру recovery interval и добавлю колонки

P.S.
Еще ДО скрипты вставлю CHECKPOINT
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Пока я провел следующий эксперимент, где создается база с нуля и делается CHECKPOINT.

Code: Select all

CREATE DATABASE [testD]
 CONTAINMENT = NONE
 ON  PRIMARY ( NAME = N'testD', FILENAME = N'D:\Apps\testD.mdf' , SIZE = 4096KB , FILEGROWTH = 1024KB )
 LOG ON      ( NAME = N'testD_log', FILENAME = N'D:\Apps\testD_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [testD] SET COMPATIBILITY_LEVEL = 120
GO
ALTER DATABASE [testD] SET RECOVERY FULL 
GO
ALTER DATABASE [testD] SET TARGET_RECOVERY_TIME = 5000 SECONDS 
GO
ALTER DATABASE [testD] SET DELAYED_DURABILITY = FORCED 
GO
USE [testD]
GO
set nocount on
GO
create table _Ptest (n int identity, k int not null, v varchar(128))
GO
insert into _Ptest (k,v) select 1, 'this is a test'
GO
CHECKPOINT
GO
declare @t datetime, @n int, @wd1 int, @wl1 int, @wd2 int, @wl2 int
set @t=getdate()
select @wd1=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl1=NumberWrites from ::fn_virtualfilestats(db_id(),2)
set @n=100000
while @n>0 begin
  insert into _Ptest (k,v) select @n,'stringy'
  set @n=@n-1
  end
select @wd2=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl2=NumberWrites from ::fn_virtualfilestats(db_id(),2)
select datediff(ms,@t,getdate()) as Duration,
  @wd2-@wd1 as DataWrites,
  @wl2-@wl1 as LogWrites
GO
use tempdb
GO
drop database testD
GO
(путь к базе варьируется)
имеем

Code: Select all

netApp, 3 runs:


9470    64    26864
12363   68    23142
7706    63    25587

Slow HDD:

17940   73    3320
10080   77    2722
11903   76    3550
Мои выводы:
1. Процесс пишуший Log недетерминирован, а содержит timing/racing conditions
2. Как я и предполагал, он пытатся флашить лог не по заполнению какого то объема, а видимо ASAP, и чем быстрее устройство, тем больше получается Writes
3. Наиболее эффективен DD на медленных вращающихся дисках
4. Самое плохое - мощные datastores, драйверы которых быстро проталкивают запросы "на ту сторону" создавая видимость пустой очереди

И это очень плохо :(
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Дима, full не включится пока не будет сделан первый бекап. У меня нет под рукой сервера чтобы поиграться, поэтому не попробуете также подсмотреть средний размер лог блока в обоих случаях (без и с ленивым коммитом)? Это можно сделать изучив вывод fn_dblog.
Cheers
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Я считал что то что не было бэкапа лишь флаг, но данные все равно начинают аккумулироваться в LDF
Впрочем, добавление бэкапа это ничего не изменило
Количество записей в логе около 30K (10K транзакций, BEGIN TRAN - INSERT - COMMIT), avg len = 110
От Delayed Durability эти величины не зависели

Code: Select all

CREATE DATABASE [testD]
 CONTAINMENT = NONE
 ON  PRIMARY ( NAME = N'testD', FILENAME = N'E:\DB\testD.mdf' , SIZE = 4096KB , FILEGROWTH = 1024KB )
 LOG ON      ( NAME = N'testD_log', FILENAME = N'L:\DB\testD_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
-- ON  PRIMARY ( NAME = N'testD', FILENAME = N'D:\Apps\testD.mdf' , SIZE = 4096KB , FILEGROWTH = 1024KB )
-- LOG ON      ( NAME = N'testD_log', FILENAME = N'D:\Apps\testD_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [testD] SET COMPATIBILITY_LEVEL = 120
GO
ALTER DATABASE [testD] SET RECOVERY FULL
GO
ALTER DATABASE [testD] SET TARGET_RECOVERY_TIME = 5000 SECONDS 
GO
ALTER DATABASE [testD] SET DELAYED_DURABILITY = FORCED 
GO
USE [testD]
GO
BACKUP DATABASE [testD] to DISK='E:\DB\BACKUP.BAK' WITH INIT
GO
set nocount on
GO
create table _Ptest (n int identity, k int not null, v varchar(128))
GO
insert into _Ptest (k,v) select 1, 'this is a test'
GO
CHECKPOINT
GO
declare @t datetime, @n int, @wd1 int, @wl1 int, @wd2 int, @wl2 int
set @t=getdate()
select @wd1=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl1=NumberWrites from ::fn_virtualfilestats(db_id(),2)
set @n=10000
while @n>0 begin
  insert into _Ptest (k,v) select @n,'stringy'
  set @n=@n-1
  end
select @wd2=NumberWrites from ::fn_virtualfilestats(db_id(),1)
select @wl2=NumberWrites from ::fn_virtualfilestats(db_id(),2)
select datediff(ms,@t,getdate()) as Duration,
  @wd2-@wd1 as DataWrites,
  @wl2-@wl1 as LogWrites
GO
select count(*) as Cnt, avg([Log Record Length]) as AvgLen from ::fn_dblog(null,null)
GO
drop table _Ptest
GO
use tempdb
GO
drop database testD
GO
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

OK, я сделал быстрый эксперимент.

При выключенном ленивом коммите при записи 100к строк генерится чуть больше 100к лог блоков размером меньше 512 байт (минимальный размер лог блока) как и ождается - каждый коммит вызывает завершение блока и запись его на диск.

При включенном - примерно 5к лог блоков различной длины, при этом довольно много размером около 64кбайт. Т.е. выигрыш очевидный. При этом значительно больше, чем половина данных записана как раз большими блоками.

Разброс размеров блоков в случае ленивого коммита я объяснить не могу - за почти три года что я не касался и не видел этого кода я не имею понятия что там наковыряли. Если бы они просто "запродуктили" ленивый коммит, который там был со времен царя гороха имени WinFS, то эффект был бы другой - почти все блоки были бы около максимального размера. Ну примерно как если бы цикл записи был бы одной транзакцией.
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Считать нужно не количество записей в логе (которое не зависит он наличия или отсутствия ленивого коммита), а количество лог блоков и их размер. LSN в выводе этой функции отформатирован как [номер виртуального файла : номер блока : номер слота в блоке]. Номер блока нужно умножать на 512 чтобы получить его физическое смещение от начала файла.

Если Вы не включите full и не сделаете бекап, то за время эксперимента чекпойнт при конфигурации по умолчанию будет вызван много раз, в результате чего лог будет каждый раз обрезаться и анализировать будет в конце на самом деле нечего. На моей машинке из 100к вставок в логе без переключения на full и взятия бекапа после прогона цикла оказалось тольк примерно 4к из 100к операций записи в таблицу.

Да, у меня машинка дома с SSD. Магнитного диска увы нет, попробовать не могу.

Но в общем, у меня все более-менее предсказуемо:

1. Без ленивого коммита: 30 секунд, и 100к+ лог блоков, почти все блоки размера 1/2к
2. Ленивый коммит: 3 секунды, 5к+ блоков, почти все данные записаны большими блоками, количество блоков минимального размера примерно 3к (против 100к в первом случае)
2. цикл в скобках транзакции: 2 секунды, меньше тысячи блоков, практически все данные записаны большими блоками, количество блоком минимального размера меньше ста.

Машинка - мак мини i7 купленный три года назад. Сервер работает в виртуалке на Параллели.
Cheers
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Re: И снова о latency - проведите у себя тест PLS

Post by alex_127 »

Может в этом режиме они group-commit включают а не lazy-commit?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

да вроде нет - даже только для одной пользовательской сессии "улучшенный" коммит очевидно улучшает произвоидельность. при группе их должно быть несколько в параллель. я попробовал просмотреть граница разрыва - т.е. когда при ленивом коммите лог блок обрезается задолго до его заполнения - ничего интересного не обнаружил для подавляющего большинства коротких блоков. теоретически если они учитывают насколько быстро блоки пишутся они могут и не морочиться с заполнением блока если предыдущие короткие блоки записывались достаточно быстро. вот если вдруг запись начитается спотыкаться (как это бывает у ссд) тогда, возможно, они начинают писать длинными блоками. спрашивать у бывших коллег неэтично, а документация, очевидно, сильно недоговаривает.
Cheers
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Вот вот, документация явно недоговаривает, так как своя по ней процесс должен быть детерминирован, а он таковым не является.

Тот сервер разобрали, но скоро дадут другой, так что я продолжу эксперименты.
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: И снова о latency - проведите у себя тест PLS

Post by Dmitry67 »

Я кстати не считаю что тест внутри простой виртуалки (не vmware ESX) релевантен, я сам давно тестировал SQL под vmware player, так вот то что в guest является writethru nocache (или как там эти флаги) при передаче в host через драйвер виртуального диска становится обычным IO со всеми вытекающими (вплоть до corrupted database, я специально этого добился)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: И снова о latency - проведите у себя тест PLS

Post by tengiz »

Dmitry67 wrote:Я считал что то что не было бэкапа лишь флаг, но данные все равно начинают аккумулироваться в LDF
Такой лог не на что накатывать, просто в дельте без исходного состояния смысла нет, поэтому он и не аккумулируется и только держится часть лога для текущих транзакций, рековери и для того, чтобы можно было всять пушистый бекап. Как только создан первый бекап, вот тогда имеет смысл аккумулировать.
Cheers

Return to “Вопросы и новости IT”