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

Откуда:
Сообщений: 23
Есть ситуация, в табличку добавляется порядка 20 записей в секунду.
Энное время сиквел отрабатывает нормально при этом постоянно увеличивая отъедаемую память (на старте процесса имеем порядка 150 МБ, в пике где-то 500Мб, всего 1Гб памяти, еще 500 Мб занято системой и прочими приложениями).
После достижения предела оперативки в системе на вставку записи периодически выдается таймаут запроса, при этом параллельно работающие выборки с других машин и приложений по этой же таблице происходят нормально - т.е. таймаутов нет.
Спустя хх секунд ситуация нормализуется инсерты опять идут нормально.

Грубо говоря, при условии подхода к потолку памяти раз примерно в 10 минут при постоянных добавлениях записей в таблицу ловим таймаут на вставку, потом сиквел "прочухивается" и опять 10 минут в штатном режиме.

Вопрос - куда смотреть, в чем может быть причина.

SQL 2005/2008 Express, ADO .Net
каждый инсерт делается в отдельном соединении, после инсерта соединение диспоузится.
25 мар 14, 16:42    [15784818]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Похоже на низкую производительность жесткого диска. Торможение на момент сброса буфера, например. Проверьте счетчик очереди диска, если больше 2 - то дело может быть плохо.
25 мар 14, 16:45    [15784850]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
Владислав Колосов
Похоже на низкую производительность жесткого диска. Торможение на момент сброса буфера, например. Проверьте счетчик очереди диска, если больше 2 - то дело может быть плохо.


Спс за направление мысли.
А где этот счетчик смотреть? :)
25 мар 14, 16:51    [15784903]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
chudin, Performance Monitor.
25 мар 14, 16:55    [15784942]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Панель управления - администрирование - управление компьютером - производительность.
25 мар 14, 17:01    [15784994]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
Еще раз спасибо,

запускаю системный монитор (он же вроде как монитор производительности)
добавляю счетчик "Физические диски" - "Текущая длина очереди диска", строится в шкале от 1 до 10, скачет от 0 до 10.

несколько абстрактные "попугаи", чего с ними делать-то?
25 мар 14, 17:20    [15785124]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Перво-наперво, надо ловить "висящий" запрос и смотреть, чего ждет сессия в sys.dm_os_waiting_tasks. А то вы долго будете локализовывать проблему с какими-нибудь блокировками через счетчики дисковой подсистемы.

Ежели все-таки охота помониторить диски, то смотреть надо Avg Disk Queue, желательно отдельно на Read и Write. Так же неплохо мониторить Avg Disk sec / Write или Read. Еще надо заглянуть в sys.dm_io_virtual_file_stats.

Сообщение было отредактировано: 25 мар 14, 17:29
25 мар 14, 17:24    [15785151]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Если очередь растет до 10 кратковременно, то это не страшно.
25 мар 14, 18:38    [15785589]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Кстати, база у Вас как расширяется? Поставьте сразу ожидаемый размер по объему данных.
Свойства базы.
25 мар 14, 18:40    [15785599]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
в общем попробовал я поймать мой подвисающий запрос, и покамест у меня таки ничего не выходит...

как я понимаю, sys.dm_os_waiting_tasks ловит текущие запросы, и при постоянной бомбардировке запросами выловить мой злополучный инсерт я просто не успеваю... (нашел интересную статью, в которой дается позитивный запросик с деталями по данной табличке: здесь)

единственное что сейчас кажется, это попробовать бомбардировать этим запросом сервак постоянно и писать в отдельную таблицу, для постфактум анализа...

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

про очередь диска - да периодически растет, но кратковременно...

файлы БД растут по 1 МБ mdf и 10% ldf (дефолтные параметры сиквела при создании БД, никто ничего не менял....)
26 мар 14, 10:57    [15787725]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
вообще про записи на диск...

стандартный таймаут запроса у ADO .Net - 15-20с (точно не помню но в этих рамках)... я честно говоря, слабо представляю, что нужно делать с винтом чтобы сиквел "замер" на это время... это вообще по сути вечность...
26 мар 14, 10:59    [15787740]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
chudin
Энное время сиквел отрабатывает нормально при этом постоянно увеличивая отъедаемую память

Энное время начиная с чего? С пустой таблицы?
А какой тип на первичном ключе?
26 мар 14, 11:10    [15787805]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Какая у БД модель восстановления?
26 мар 14, 11:44    [15788095]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
dma_caviar
Энное время начиная с чего? С пустой таблицы?
А какой тип на первичном ключе?


начиная с "бомбардировки" таблицы инсертами
первичный ключ - атоинкрементнтное целое

invm
Какая у БД модель восстановления?


full
26 мар 14, 12:19    [15788409]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
chudin
full
И как часто делается резервная копия журнала транзакций?
26 мар 14, 12:25    [15788463]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
invm
И как часто делается резервная копия журнала транзакций?


имеется ввиду BACKUP?

если да, то не делается :)

если что-то ещё что сиквел делает сам, то я, честно признаюсь, не знаю :)
26 мар 14, 13:52    [15789078]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
chudin
если да, то не делается :)
Ну тогда ваши зависания, скорее всего, связаны с периодическим ростом файла журнала транзакций.
26 мар 14, 14:11    [15789219]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
o-o
Guest
chudin
invm
Какая у БД модель восстановления?

full

+
chudin
invm
И как часто делается резервная копия журнала транзакций?

имеется ввиду BACKUP?
если да, то не делается :)


ну так если FULL + no log backup + до сих пор запись в базу не встала и диск не заполнился логом,
то поди никакой там не FULL, а PSEUDO SIMPLE.

что вот это выдаст:
select last_log_backup_lsn
from sys.database_recovery_status
where database_id = db_id('your_db');
26 мар 14, 14:26    [15789309]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
invm
Ну тогда ваши зависания, скорее всего, связаны с периодическим ростом файла журнала транзакций.


по ходу да...
в общем поставил ловушку - в случае если запрос выполняется дольше 3 секунд, программа наламывается автоматом к сиквелу с запросом в sys.dm_os_waiting_tasks

при этом вижу следующие причины: LATCH_EX, PAGELATCH_SH, TRACEWRITE, WRITELOG.

вот только что с этим делать, оно как-то не ясно... обрезать переодически лог? перетаскивать его на другой винт? etc?..

смех в том, что базёнка то мизерная.. 138 МБ файл данных, 3145 Мб лог файл...
26 мар 14, 15:00    [15789596]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

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

что вот это выдаст:
select last_log_backup_lsn
from sys.database_recovery_status
where database_id = db_id('your_db');


это: 868000000043800154
26 мар 14, 15:01    [15789606]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
o-o
Guest
полный , да.
...и правда лог совсем не бэкапите?
ну, подумаешь log 3 гига, даже не настораживает, правда?
26 мар 14, 15:06    [15789675]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
o-o
Guest
chudin
вот только что с этим делать, оно как-то не ясно... обрезать переодически лог?

лог или бэкапят, если он нужен, либо модель меняют на SIMPLE и лог будет усекаться и без вашего участия
26 мар 14, 15:09    [15789714]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
chudin
Member

Откуда:
Сообщений: 23
o-o
полный , да.
...и правда лог совсем не бэкапите?
ну, подумаешь log 3 гига, даже не настораживает, правда?


тестовая БД, чего её бэкапить :)

ну 3 гига... ну вот у меня на объекте был 170 гигов :)) вот там насторожило )

вообще в 3-5 Гб лога я таки особого криминала не вижу, к тому же эти 3 гига выросли за период моих экспериментов, т.е. когда он был менее гигабайта, ситуация была та же =\
26 мар 14, 15:22    [15789801]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
chudin
по ходу да...
в общем поставил ловушку - в случае если запрос выполняется дольше 3 секунд, программа наламывается автоматом к сиквелу с запросом в sys.dm_os_waiting_tasks

при этом вижу следующие причины: LATCH_EX, PAGELATCH_SH, TRACEWRITE, WRITELOG.

Просто запустите
declare @t table(waittype varchar(50), requests int, waittime decimal(15,2), signalwaittime decimal(15,2))
insert @t exec('dbcc sqlperf(waitstats)')
select top 10 * 
from @t 
where waittype <> 'Total'
order by signalwaittime desc
26 мар 14, 15:27    [15789830]     Ответить | Цитировать Сообщить модератору
 Re: Timeout on Insert  [new]
o-o
Guest
chudin
тестовая БД, чего её бэкапить :)


ну так и нафига выставлять FULL?
переведите в SIMPLE, всем станет лучше :)
26 мар 14, 15:36    [15789884]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить