|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Господа! Есть известная проблема совместимости 1С 7.7 и новых MS SQL: не всегда позволяет войти в базу монопольно. SQL-ем запускается некий фоновый сервисный процесс; 1С он мешаться не должен, но она об этом не знает. :) Подробней проблема описана в http://forum.infostart.ru/forum9/topic143958/message1484430/#message1484430 Так вот, вопрос к sql-щикам: можно ли запретить или хотя бы прибить этот процесс? Ни в списке процессов, ни запросом я его у пор не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2016, 09:16 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
И еще вопрос чайницкий. Как всё-таки увидеть этот "фоновый процесс сброса грязных страниц"? Select * from master.sysprocesses where dbid=DB_ID('my_base') видит только мой 1с-овский коннект, если кто-то подключен к базе. Вроде как sysprocesses является устаревшей. Хорошо, на другом форуме мне посоветовали select * from sys.dm_exec_requests. Даю select * from sys.dm_exec_requests where database_id=DB_ID('my_base') Не видит даже "обычный" коннект 1С к своей базе данных. Там этих вьюшек dm_* дофига и больше, какую заюзать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 09:02 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv, вам не "фоновый процесс сброса грязных страниц" нужно искать, а пользовательский процесс. Попробуйте с помощью sp_who2 поискать, по столбцу BlockedBy. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:01 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymvSQL-ем запускается некий фоновый сервисный процесс; 1С он мешаться не должен, но она об этом не знает. :) Подробней проблема описана в http://forum.infostart.ru/forum9/topic143958/message1484430/#message1484430 ерунду говорите и в том форуме тоже ерунда написана. сервер сам по себе базы в сингл юзер не переводит. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:15 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymvКак всё-таки увидеть этот "фоновый процесс сброса грязных страниц"? еще одно подтверждение баббанства участников того форума. ни один сервер не обходится без процесса сброса грязных страниц, иначе у вас бы на диске никогда информация не обновлялась, сплошное инмемори было бы, умирающее при остановке/перезапуске сервера. только этот сброс не меняет статус базы и не переводит ее ни в какой сингл юзер. граждане хватанули интересное и непонятное слово и раздули теорию, чтобы остальные, не понимающие физики процесса, от страшного звучания "сброса грязных страниц" в это поверили. ------------------------------------------------------------------- если базу кто-то в сингл юзер переводит, то это пользователь, причем с соответствующими правами, это минимум овнер базы. другое дело, что вы можете не отловить переход базы в сингл юзер, и спохватиться слишком поздно. глючный джоб может перевести базу в сингл юзер, отвалиться, не доделав своей работы, и не вернуть базу в мультиюзер. вы начинаете мониторить, а нагадившего процесса уже нет. зато: в еррорлоге сервера будет запись о переводе в сингл юзер. правда, там всего лишь спид процесса. логин надо выуживать из дефолтного трэйса. или аудит настроить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:24 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Отвечаю последовательно. 1. "Пользовательский процесс" базу в этом случае заблокировать не может. Это контролируемо. Единственный "пользовательский процесс" - это сам аппликуха 1С, а я её контролирую. Еще раз порядок действий: 1.1 1С запускаем монопольно и что-то делаем большое, например "тестирование и исправление". Закрываем 1С. 1.2 Через некоторое время пытаемся зайти через 1С монопольно. Иногда выдаёт любимую ошибку "База данных уже открыта, и одновременно к ней может обращаться только один пользователь". Стопудово перед этим заходом никаких пользовательских процессов там нет, смотрел всем чем угодно. Да и откуда они? Сама семерка 1С никаких фоновых процессов не делает. При этом в п.1.2 если зайти не монопольно, таких проблем не возникает. sp_who2 еще не пробовал, попробую для очистки совести. 2. По поводу single_user. Да, сервер сам по себе базу в single_user не переводит. Однако когда в п.1.2 1С не может приконнектиться, она после аварийного завершения все-таки оставляет базу в single_user. То есть ей всё-таки удалось приконнектиться и перевести её в single_user, но дальше что-то её испугало, и она в ужасе отвалилась, оставив базу в single_user. Обычная трассировка SQL-профайлером или что я там использовал не показывает, что конкретно её напугало. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:39 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ну так это ваше 1С в сингл юзер базу перевело, а не "сброс грязных страниц" (инициированный сервером). а откуда ж мы знаем, почему какое-то глючное 1С отвалилось, не переведя обратно базу в мультиюзер? ну я же с тем же успехом могу спросить: вот у меня в процедуре база переводится в сингл юзер, делает switch, обратно переводит в мультиюзер. а теперь скажите мне, почему вчера база осталась в сингл юзере? а ответов может быть сколько угодно. может банально, тот, кто запустил процедуру, не дождался окончания и закрыл студию. а база осталась висеть в сингл юзере. и как же мне сейчас отловить, кто это был? ну я-то допустим отловлю. у меня снимки реквестов пишутся в табличку раз в 5 минут. процедура здоровая и длится дольше 5 минут. мне достаточно найти в еррорлоге дату и спид переведшего в сингл юзер, найти этот спид в моем аудите и наказать логин. но если это было моментальное действие типа один базу отправил в сингл юзер, а второй прибил эту сессию, я без дополнительных телодвижений в жизни не найду, чья в этом вина ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:50 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv1. "Пользовательский процесс" базу в этом случае заблокировать не может. Это контролируемо. Единственный "пользовательский процесс" - это сам аппликуха 1С, а я её контролирую. еще раз. пользовательский процесс это значит не серверный процесс. ваше 1С это пользовательский процесс. именно он и переводит в сингл юзер. и ваше ""Пользовательский процесс" базу в этом случае заблокировать не может" не принимается, потому как именно 1С и именно пользовательский процесс ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 11:53 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
возможно, вы вот это хотели услышать (только здесь не про то, кто *перевел* в сингл юзер, а про то, кто вперед вас успел приконнектиться. это да, серверный процесс) BOLThe database remains in SINGLE_USER mode even if the user that set the option logs off. At that point, a different user, but only one, can connect to the database. Before you set the database to SINGLE_USER, verify the AUTO_UPDATE_STATISTICS_ASYNC option is set to OFF. When set to ON, the background thread used to update statistics takes a connection against the database, and you will be unable to access the database in single-user mode. To view the status of this option, query the is_auto_update_stats_async_on column in the sys.databases catalog view. If the option is set to ON, perform the following tasks: Set AUTO_UPDATE_STATISTICS_ASYNC to OFF. Check for active asynchronous statistics jobs by querying the sys.dm_exec_background_job_queue dynamic management view. If there are active jobs, either allow the jobs to complete or manually terminate them by using KILL STATS JOB. ALTER DATABASE SET Options (Transact-SQL) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 12:05 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Господа, вы меня не совсем поняли. Проблема-то не в том, что база остается в single_user, это фигня, сама же 1С потом при следующем заходе этот single_user сбрасывает. Проблема в том, что не всегда может с первого раза зайти монопольно, а это плохо для всяческих регламентных работ, которые запускают 1С монопольно и автоматом в батнике. Выдало ошибку, и всё, встало раком Понятно, что 1С - это не совсем вопрос для этого форума. Вопрос в том, что эту проблему вызвало и как это отловить. Про "фоновый процесс сброса грязных страниц" - это я процитировал из мануала к патчу 1С для работы с SQL 2005-2012 безвестного аффтара. Более этот термин цитировать не буду. Чтобы закрыть левый вопрос про single_user, еще раз по шагам приведу действия: 1. 1С заходит монопольно и делает что-то большое и толстое. Выходит. 2. Смотрю на базу. На базе не висит ни одного процесса. И она не в single_user. 3. Захожу монопольно. И вижу с вероятностью 40% любимое сообщение об ошибке. Закрываю 1С. 4. Смотрю базу. Она в single_user. Ну и хрен с ним. По поводу AUTO_UPDATE_STATISTICS_ASYNC - спасибо, посмотрел в пропертях базы, оно у меня в off. По дефолту. То есть вопрос собственно в том, как отловить, чаво ей не хватает для полноты счастья. SQL profiler пробовал, но особого материала это не принесло. Результаты трассировки есть по той ссылке. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 12:40 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv2. Смотрю на базу. На базе не висит ни одного процесса. И она не в single_user. 3. Захожу монопольно. И вижу с вероятностью 40% любимое сообщение об ошибке. Закрываю 1С. так вы заходите или нет в сингл юзере? или просто пытаетесь, но обнаруживаете, что уже кто-то до вас зашел? вот еще раз: сам сервер никогда базу в порядке самодеятельности в сингл юзер не переведет. значит, переводит ваше 1С. теперь вы утверждаете, что после того, как 1С "сходило монопольно", база вернулась в мультиюзер, так? "2. Смотрю на базу. На базе не висит ни одного процесса. И она не в single_user." и после этого вам не удается зайти в сингл юзере, т.к. кто-то уже опередил. ну так чтобы опередить, надо базу перевести в сингл юзер. кто перевел? ваше 1С. почему вы этого не видите после того, как "1С сходило и вышло"? ну или потому, что смотрите графически, а ГУИ не отрефрешило (лучше "смотреть" запросом select user_access_desc from sys.databases), или потому, что между тем, как 1С сходило, и тем, как вы попытались, оно снова "сходило". это можно проверить, глядя в еррорлог сервера. там все даты перехода в сингл юзер и обратно записаны. сверьте их с запланированными заходами 1С ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 13:31 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
>так вы заходите или нет в сингл юзере? Не я. 1С. :) Еще раз последовательность, детализованно. 1) 1С чегой-то делает монопольно, долго и упорно. Какой-то пересчет с большой модификацией данных. Отработала. Вышла. 2) Смотрю базу. Она в multi_user (про F5 я в курсе, не такой уж ламер). Никаких процессов не висит. Кстати, сейчас еще посмотрел в этот момент "EXEC sp_who2" - ничего на моей базе нет. И "SELECT * FROM sys.dm_exec_background_job_queue" - ни одного процесса. 3) Запускаем опять 1С монопольно. Ругаеццо про невозможность войти монопольно и ждет нажатия OK. Жмём. Выходит. 4) Смотрим базу. Она в single_user. 5) Если 1С опять запустить - что монопольно, что разделенно, она успешно входит. Предыдущий single_user при этом сбрасывается. Но это уже совсем другая история... Последовательность запросов 1С генерит в (3) одну и ту же, что при успешном, что при неуспешном входе. Никаких процессов и блокировок обнаружить не удалось. Гипотеза может быть одна. У 1С, когда она устанавливает single_user, слишком маленький таймаут. И она отваливает по таймауту, хотя и вошла успешно в single_user. И если запущена из батника, то останавливает батник, ожидая OK. Кстати, костыль я придумал. В батнике, перед тем как запустить 1С монопольно, запросом даю принудительно переключение в single_user - под тем же юзером, что и 1С. 1С, входя следом монопольно, успешно заходит. Правда, вылезло в другом месте... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 14:12 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv1) 1С чегой-то делает монопольно, долго и упорно. Какой-то пересчет с большой модификацией данных. Отработала. Вышла. 2) Смотрю базу. Она в multi_user (про F5 я в курсе, не такой уж ламер). Никаких процессов не висит. Кстати, сейчас еще посмотрел в этот момент "EXEC sp_who2" - ничего на моей базе нет. И "SELECT * FROM sys.dm_exec_background_job_queue" - ни одного процесса. 3) Запускаем опять 1С монопольно. Ругаеццо про невозможность войти монопольно и ждет нажатия OK. Жмём. Выходит. 4) Смотрим базу. Она в single_user. 5) Если 1С опять запустить - что монопольно, что разделенно, она успешно входит. Предыдущий single_user при этом сбрасывается. Но это уже совсем другая история... Последовательность запросов 1С генерит в (3) одну и ту же, что при успешном, что при неуспешном входе. Никаких процессов и блокировок обнаружить не удалось. Гипотеза может быть одна. У 1С, когда она устанавливает single_user, слишком маленький таймаут. И она отваливает по таймауту, хотя и вошла успешно в single_user. И если запущена из батника, то останавливает батник, ожидая OK.Из вышесказонного, да и из всего обсуждения ясно, что к сиквелу это не имеет никакого отношения. Это просто баг клиентского приложения. Что то она там переключает туда-сюда, ИМХО видимо переводит базу в мульти, а где то в своих файлах сохраняет, что оставила в сингл. Решать вопрос нужно на форумах по 1С Или это какой то её баг, или баг какой то конфигурации, или там где то ваши программисты добавили в 1С сиквельный код, который что то там переводит, или которому мешает текущий режим, она вываливается, и получается несогласованное состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 15:28 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
alexeyvgИМХО видимо переводит базу в мульти, а где то в своих файлах сохраняет, что оставила в сингл. ошибка-то серверная, на 1С. это точный текст 924-ой ошибки: Код: coco 1. 2.
так что это не 1С себе что-то сохраняет в конфигурации, а база в сингл юзере. почему ТС это не видит -- думаю, плохо смотрит, кодом надо смотреть, не из своего 1С, опрашивать sys.databases. не понимаю еще, почему вместо всей этой писанины не сходить и не посмотреть еррорлог. с какой частотой там идут alter database set single_user/ alter database set multi_user? короче, пока хотя бы еррорлог не покажет, разговор ниочемный ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 15:40 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
o-oalexeyvgИМХО видимо переводит базу в мульти, а где то в своих файлах сохраняет, что оставила в сингл. ошибка-то серверная, на 1С. это точный текст 924-ой ошибки: Код: coco 1. 2.
так что это не 1С себе что-то сохраняет в конфигурации,Это понятно, что серверная. Но это же не бага сиквела, типа, что ему 1С посылает команду, а он не выполняет? Очевидно, либо бага в 1С, либо что то там ещё делается, может, какие то сторонние приложения, джобы и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:01 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
>короче, пока хотя бы еррорлог не покажет, разговор ниочемный С моим удовольствием. Management \ SQL Server Logs. Лог примерное за период, когда сегодня тестил. Причем без всяких костылей. Ошибка произошла (по логу 1С) около 15:53. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:04 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Ну вот. Вы включили или рестартанули сервер и как только он был в состоянии принимать юзерские соединения, к нему сразу прицепилось 1С, спид51. Прилагаю картинку, когда оно перевело базу в сингл юзер и в нем база пребывала с 15:30 по 15:49. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:31 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv, Зачем вы при скульной 1С заходите монопольно? Вот вам и ответ. И от версии скуля не зависит. При любом скуле нет необходимости запускаться монопольно. Но вы все так же можете продолжать это делать. Мазохисты они такие ... ) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:35 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
>Зачем вы при скульной 1С заходите монопольно? Ряд регламентных операций в 1С требуют монопольного доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:37 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Злой БобрЗачем вы при скульной 1С заходите монопольно?Как я понимаю, это же сама 1С делает? Пользователь этим же не управляет? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:38 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
После этого в 15:53 снова переводит в сингл юзер и только в 15:54 обратно. Спид все тот же, 51. Если это 1С не пересоединяется, то это все оно же. Ну и тогда логично, что в 15:53 вы получаете ошибку о том, что база уже в сингл юзере и там кто-то приконнекчен. Почему вы ничего не видите в sys.dm_exec_requests. Потому что спид51 ничего не делает. Прицепился и висит, ничего не выполняя. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:40 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
>Вы включили или рестартанули сервер и как только он был в состоянии принимать юзерские соединения, к нему сразу прицепилось 1С, спид51. Да бог с тобой: 1) Сервер написал в 10:49:38, что готов принимать клиентские подключения, процесс "Сервер" 2) Далее, в те же секунды запустил базы данных. 3) Потом в 10:49:40 писал ворнинги про протоколы и прочую фигню. 4) В 10:49:51 написал "восстановление завершено" 5) А вот в 10:52:04 уже вошел в базу монопольно, это я запустил "тестирование и восстановление". Да, с момента запуска SQL-сервера до входа в 1С прошло несколько секунд, дык я его для того и включал, это же не рабочий сервер, кто же на рабочем тестит. Только не пойму, почему так много раз он переключает затем single_user / multi_user. Счас закину еще 1С-овский лог. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:45 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
>Как я понимаю, это же сама 1С делает? Пользователь этим же не управляет? Да, при "тестировании и исправлении 1С", как минимум. И её тестирование sql-ным не заменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:47 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
Вот лог 1С. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:49 |
|
MSSQL2005-2012 & 1С 7.7: прибить фоновый процесс
|
|||
---|---|---|---|
#18+
ymv>Вы включили или рестартанули сервер и как только он был в состоянии принимать юзерские соединения, к нему сразу прицепилось 1С, спид51. Да бог с тобой: 1) Сервер написал в 10:49:38, что готов принимать клиентские подключения, процесс "Сервер" Кому вы парите мозги, Козюльский? Еррорлог не реинициализировался по причине cycle, он начал писаться заново потому что сервер рестартанул. Он в 15:22 открыл мастера и перезаписал темпдб. И далее по списку ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2016, 16:51 |
|
|
start [/forum/topic.php?fid=28&fpage=18&tid=1518764]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 156ms |
0 / 0 |