powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
12 сообщений из 12, страница 1 из 1
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620045
Redmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Итак... Столкнулся со странной проблемой.

Установил бесплатный Express на домашний комп. Создал пару практически пустых баз. Пользуюсь компом один. Никто кроме меня к SQLServer'у не тыкается.
Моя программа выполняет запросы в одном Connection, строго по очереди, иногда только из MSSQLSMS какую-то выборку гляну и всё.
Программа подключается через OleObject ADODB.Connection к серверу, периодически делает SELECT, потом генерирует новые данные и делает однострочные INSERT'ы, всё строго по очереди.

И вот программа застопорилась, висела-висела, выдаёт EOleException with message 'Время ожидания запроса истекло' - и программа выключается. Перезапускал раз пять - одно и то же.
Почесал я тыкву, увеличил ему до кучи и ConnectionTimeout и CommandTimeout. Пытаюсь продолжить работу - без изменений, только разумеется висит дольше.
За время работы программа сделала чуть больше 2 миллионов INSERT'ов - соответственно в таблице столько же строк - и все всегда выполнялись моментально. При этом база и сейчас не такая уж и большая - 265 Мб.
Удалил логи БД - без изменений. Сделал сжатие "Реорганизовать" и "Освободить" файлам базы - без изменений. Презагружал службу SQLServer'а многократно - без изменений. Перезагружал весь комп многократно - без изменений.

Попробовал сделать из MSSQLSMS простой INSERT без данных:
Код: sql
1.
INSERT INTO [X] ([A], [B], [C], [D], [E], [F], [G], [H], [I]) VALUES (0, 0, '', '', '', '', '', '', 1);

Работает моментально, зараза, что меня ещё больше озадачило.
Может с программой моей что не так? Ну сделал чтоб программа перед началом непосредственной работы делала холостой INSERT, почти такой же как выше:
Код: sql
1.
INSERT INTO [X] ([A], [B], [C], [D], [E], [F], [G], [H], [I]) VALUES (0, 0, 'Program started', '', '', '', '', '', 1);

Работает, и тоже моментально...
Не придумал ничего другого кроме как вывести в лог полный текст INSERT-запроса, который так вот намертво зависает (с данными), вот он приблизительно какой:
Код: sql
1.
INSERT INTO [X] ([A], [B], [C], [D], [E], [F], [G], [H], [I]) VALUES (8374633393, 8374633015, '<строка, кириллица и пробелы, 15 символов>', '<строка, только цифры, 27 символов>', '<строка, цифры, 2 символа>', NULL, '<строка, латиница, 4 символа>', NULL, 0);

Вроде ничего подозрительного, в остальных строках такая же кириллица, но вот вставляю его в MSSQLSMS - бинго, зависает!
Минута, три, пять... Отошёл по делам, когда вернулся смотрю - всё же сработал, но длился 26 минут!

Вот сфига ли? Единственное подключение к БД, единственный запрос, в таблице никаких ключей, ну, если не считать авто-счётчика ID.
Что же случилось..?
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620047
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- посмотреть есть ли свободное место в файле базы
- в момент тормозящего инсерта посмотреть на счётчики производительности (диск, память, процессор)
- посмотреть ожидания в sys.dm_os_wait_stats
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620048
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, если будете смотреть ожидания...
перед экспериментами для наглядности может быть удобно очистить старую статистику
DBCC SQLPERF (N'sys.dm_os_wait_stats', CLEAR)
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620056
Redmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База - начальный размер = 1Мб, увиличение/максимальный = с шагом по 1 МБ, без ограничений.
На SSD места навалом. Диспетчер задач ничего примечательного не показывает.

Погуглил, нашёл и выполнил пару хитрых запросов из sys.dm_os_wait_stats - показывает ASYNC_NETWORK_IO = 97%, внезапно, будем думать, спасибо большое!
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620080
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redmondв таблице никаких ключей, ну, если не считать авто-счётчика ID.А триггер есть?
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620100
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Redmond, вчера, 22:52 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1288709&msg=21283454][21283454]
>... который так вот намертво зависает...
Доставай бубен... и по шагам добавляй в INSERT не пустые поля. Найди поле(-я), что губит INSERT.
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620161
Redmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgRedmondв таблице никаких ключей, ну, если не считать авто-счётчика ID.А триггер есть?
Нет, ничего нету кроме не связанных таблиц.

http://www.sql.ru/forum/705900/async-network-io
https://www.sqlskills.com/help/waits/async_network_io/
http://www.sql.ru/forum/4345/ado-cursorlocation-aduseserver-pri-kazhdom-vyzove-sp-sozdaetsya-novaya-sessiya
http://www.sql.ru/forum/53351/cursorlocation-cluseserver-i-cluseclient

Так что судя по всему мой SELECT использует adUseServer, и поэтому сервер держит какие-то блокировки.
Не задумывался об этом, слишком уже привык к другим системам, где об таком просто не требуется задумываться...

Но почему оно не давало о себе знать пока количество строк таблицы не перевалило да 2 миллиона? И при этом INSERT'ы которые я обозвал "без данных" спокойно работают? гм...
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620207
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RedmondБаза - начальный размер = 1Мб, увиличение/максимальный = с шагом по 1 МБ, без ограничений.
На SSD места навалом. Диспетчер задач ничего примечательного не показывает.

Погуглил, нашёл и выполнил пару хитрых запросов из sys.dm_os_wait_stats - показывает ASYNC_NETWORK_IO = 97%, внезапно, будем думать, спасибо большое!
Точно 1 Мб, а не 10%, как по умолчанию?
Instant File Initialization включено?
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620209
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя, конечно, 26 минут быть не может.
Возможно, дело в программе.
Например, она открыла транзакцию, а закрыть - забыла.
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620246
Redmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, я сделал SELECT и работаю с результатами, а потом разумеется обязательно закрываю. Но вот INSERT'ы идут до этого закрытия, на тот момент выборка ещё нужна.
Просто я машинально ожидал что у меня эти данные "локальная копия" и ничего не блокируют... Привык к библиотекам со службы, которые из коробки всё обеспечивают как надо...
А тут через ADO подсоединился и вот. Непонятно только чего оно раньше спокойно работало.

У меня 2014 Express, настроек вообще не трогал - по умолчанию "шаг 1МБ" . "Instant File Initialization" тоже не трогал и даже не смотрел - у меня же SSD и микроскопическая (пока) нагрузка.
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620260
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RedmondПросто я машинально ожидал что у меня эти данные "локальная копия" и ничего не блокируют. snapshot isolation
...
Рейтинг: 0 / 0
Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
    #39620414
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой тип курсора используете? очень похоже на серверный (динамический).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему может неадекватно долго выполняться простейший INSERT на простаивающей БД?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]