Секретный релиз платформы v77.27.1
Исправления платформы, позволяющие запустить 1cv77 в клиент-серверном варианте на СУБД MS SQL 2005/2008 без понижения режима совместимости.
24.02.2011 18:24 [16.01.2012 21:44] 337 [+] [−] Перейти к публикации
Подскажите, пожалуйста, какой должен быть параметр sql-базы МОДЕЛЬ ВОССТАНОВЛЕНИЯ для разработки. Должна быть только ПРОСТАЯ или можно любую?
(305) dumsik,
Ключевое слово здесь - FORCE ORDER
индекс есть стандартный
I=PARENT |Parent Referen|1 |MDID,PARENTVAL,CHILD_DATE_TIME_IDDOC |0
-- (spock) Kirill - Solution7
-- Спасибо автору за проделанную работу
SELECT JOURN.*
FROM [dbo].[_1scrdoc] as CRDOC WITH (NOLOCK)
INNER JOIN [dbo].[_1sjourn] as JOURN WITH (NOLOCK) ON JOURN.date_time_iddoc = CRDOC.child_date_time_iddoc
WHERE
CRDOC.mdid = ?
AND CRDOC.parentval = ?
AND CRDOC.child_date_time_iddoc >= ?
AND CRDOC.child_date_time_iddoc <= ?
ORDER BY JOURN.date_time_iddoc
OPTION(FORCE ORDER, LOOP JOIN)
Необходимо что-бы выборка сначала произошла по _1scrdoc, т.к таких документов не более 1-10 в стандартных случаях, за исключением отбора по графе в журналах
Обсуждение от 17 окт 08 на SQL.ru (Anddros):
P.S При неисправленном запросе на 2008 вызывает вообще провисание при выборке в общем журнале по графе отбора например по Контрагенту, при очень большом _1sjourn (данную ситуацию неоднократно наблюдал в SQL Profiler)
Что происходит:
1. Открываем журнал
2. Задаем период весь журнал
3. Выбираем контрагента
4. При испорченном плане сканируется весь журнал причем двумя запросами: count(*) и сама выборка
5. Идет sp_cursorfetch (собственно заполнение строк журнала)
6. Наступает событие обновление экрана (при неоконченном первом запросе) - посылается такой же запрос
7. Переход на пункт 4
Пользователь ждет, SQL наращивает очередь,а пользователей более 300 :)
Получаем зависание 1С
Ответили: (309)
(308) kudenzov, Что сделал spock я прекрасно уведел в профайлере. В своем посте (305) я предложил другой вариант решения проблемы. У меня объединение идет по CRDOC.CHILDID=JOURN.IDDOC тогда FORCE ORDER не нужен. Но к сожалению нужен доп индекс. Посмотрите мой запрос в профайлере без доп.индекса и с ним все сразу станет ясно.
вроде как все работает, сегодня попробуем перевести рабочую базу - конфигурация Win2K8 R2 64x + ms sql 2008 64x... по результату отпишу
Господа, немного не по теме, но специалисты здесь собрались именно те, которые могут помочь.
Порекомендуйте, пожалуйста, где почитать об ускорении групповых операций 1C под SQL ?
Я знаю, что SQL не дает преимущества в скорости, но если проведение месяца сплошным потоком в 6 раз медленнее, чем на DBF, ужасно хочется с этим что-нибудь сделать.
Групповое проведение (оно же волсстановление последовательности) это и есть глобальные тормоза.
Как вариант это переписать восстановление вручную.
Делать транзакции +/- определенное количество документов.
И внимание.
Использовать это:
| Код |
|---|
База=СоздатьОбъект("ODBCDataBase");
База.ReconnectNative();
|
по крайней мере у меня стало меньше времени уходить на восстановление.
Ответили: (317)
| Цитата |
|---|
| Я знаю, что SQL не дает преимущества в скорости, но если проведение месяца сплошным потоком в 6 раз медленнее, чем на DBF, ужасно хочется с этим что-нибудь сделать. |
Перепроводите документы со сдвигом ТА, чтобы каждый документ проводился на ТА - тогда не нужен расчет итогов.
Стандартная, встроенная в оболочку процедура проведения документов и так проводит их со сдвигом ТА. И у меня есть обработка, которая также сдвигает ТА назад, потом начинает проводить - скорость одинаковая. В свое время натыкался на статью от какой-то компании, которая предлагала за деньги решить эту проблему, утверждая, что все проблемы в переполнении каких-то внутренних структур SQL-Server, от которого эти тормоза и происходят. Видимо, встраивали какую-то процедуру или триггеры... Я потому и спрашиваю здесь, что несколько человек тут достаточно хорошо представляют себе механизмы обращения 1С к SQL и дагадываются, какие там структуры могут переполняться и как с этим бороться.
Ответили: (318)
(318) dumsik, я использую SQL 2008 R2 вместе с разработкой автора темы, за что ему огромное спасибо.
Я уже выяснил, что объект ODBCDataBase содержится в 1С++, проверил, что ее подключение не дает никакого прироста в скорости, и я сильно подозреваю, что секретный релиз и так использует native подключение.
Машина у меня довольно мощная, при этом проведение месяца в почти стандартной торговле занимает у меня час в базе SQL и 10 минут в базе DBF. Поскольку вся эта канитель затеяна ради регулярного проведения другой базы, которая является значительно модифицированной торговлей, и модифицировал ее не я, а стоит она на сильно худшем железе и денег на апгрейд пока не дадут, есть желание изучить возможности оптимизации.
Огромное спасибо разработчику.
Жаль что второй раз "плюсануть" нельзя!
Запустил 1С77 под Win7-64x. Правда по админом в режиме совместимости с WinXP.
Все вроде работает нормально.
Даже самые разные прямые запросы 1С++ в обработке по свертке базы
(проверяемая база была в формате SQL, под DBF не проверял).
Особо хочется отметить приятный эффект
(незнаю связан ли с данной разработкой, или с операционной системой):
Как известно при выполнении трудоемких действий в конфигураторе
(реорганизация базы, тестирование-исправление) 1С-ка выводит сообщения в панели состояния.
И если по ходу дела переключиться в окно другого приложения и вернуться назад,
то 1С-ка тупеет почему-то и перестает обновлять сообщения в панели состояния.
В данном случае (проводилось тестирование-исправление) этого дефекта не наблюдалось.
ЗЫ
Мелочь ... но приятно! :)))))))))))))))))))))
Ответили: (322)
Надо же ... а говорят ГЛОБАЛЬНОЕ ПОТЕПЛЕНИЕ.
Даже у вас МОРОЗ-ик и даже снежок.
А у нас в этом году со снегом плоховато. В прошлом году просто совсемь завалило в это время.
Двигаемся же в дубак как по полю боя -
- короткими перебежками до близжайшего гааастранома.
:)))
А вы тоже все на 7.7 сидите?
и как многие все планируете на 8.х переходить?
там с совместимостью с новыми версиями винды вроде пааааалутше.
Ответили: (330)
(330) z0lberg, да текучка засасывает ...
...денег всегда мало, а работы много.
:))).
А на каких конфигурациях работаете.
У нас жутко переписанная ТиС-7.7 (все почти на прямых запросах).
Просто перевести ее на 8-ку нереал.
Нужно какую-нибудь конфу под 8-х также уделать.
Правда на всех компах XP-ха стоит.
Vista и Win-7 только на некоторых ноутах.
А 1с-7.7 сама в терминале жывет.
(322) varelchik,
твоя правда! но и моя тоже
;)))
При загрузке/выгрузке данных 1с-ка как-то странно ведет.
До определенного момента переключение между окнами не "замораживает" сообщения в панели состояния.
а потом 1с-ка сама без переключения "замораживается".
Ответили: (333)
(333) varelchik, по поводу 1с++ - это точно!
Не так давно накололся на этом.
Под 2005 сервером запрос нормально выполняется,
а под 2000-ным ошибку валит, типа:
"поля, перечисленные в предложении ORDER BY, должны присутствовать в списке SELECT".
Источник ошибки - подзапросы,
выдаваемые метапарсером при развороте виртуальной таблицы $ПоследнееЗначение.ИмяСпр.ИмяРекв.
Так что можно сделать вывод, что метапарсер в 1с++ под MSSQL-2000 явно не затачивался.
(335) spock,
Описанный в (334) глюк не связан с твоими библиотеками.
Все делалалось на обычной 1С-7.7.
у меня есть одна база - сильно подломленная ТиС-7.7
вся на прямых запросах 1С++ под MS SQL и на FormEx.
Возникла надобность поставить ее на бук чтобы показать.
Бук не шибко крутой, ну я по простоте душевной поставил на нее SQL-2000
Окрыл базу, смотал на пробу первый попавший отчет - вроде работает.
Прихожу к людям ...
... и то что было интересно показать - не работает,
выдает описанную выше ошибку.
Ну и пришлось SQL-2000 снести и поставить SQL-2005.
:))))
(334) yuraos,
Вообще-то странно.
У меня такое происходило только с OLEDB для DBF,
Хотя вообще-то для любых запросов правилом должно быть то что тебе метапарсер сказал.
А насчет заточки 1С++ для 2000 это ты неправ.
ODBCRecordSet появился как раз таки на 2000 когда 2005 еще и не пахло.
Так что ненадо винить 1С++.
Запросы надо корректные писать.
Ответили: (338)
(337) varelchik, я вобщем-то никого и ничего не виню.
Вопрос, как говорится, тонкий:
Может быть сервер 2000 у меня древний, без каких-то сервис-паков....
От версии 1С++ тоже может зависить (она правда у меня довольно свежая)...
Ну а насчет корректности запросов...
...извини!
Думаю использование виртуальной таблицы
$ПоследнееЗначение.ИмяСпр.ИмяРекв
в списке select - вполне корректно для T-SQL.
Ну а то как эту виртуальную таблицу развернет метапарсер...
за этож я не отвечаю.
:))))))))))))))))
А ты можешь полный запрос привести?
Проблема обычно возникает если ты используешь $ПоследнееЗначение.ИмяСпр.ИмяРекв на одном уровне при объединении через UNION. В этом случае он всегда ругается на то что нельзя в UNION использовать ORDER BY.
Вот тута возник вопрос.
А как поведет себя 7.7 если сделать блокировки на определенные таблицы или же записи в этих таблицах
используя виндовозную авторизацию а не sa?
Ну скажем так Справочник Ограничить просомтр определенных групп вообще.
Кирилл что скаже на это?
Реально ли?
(350) varelchik, интересная идея!
нарулить типа разделения прав доступа на уровне полей и записей как в 8.х.
Но таким способом наверное не получится
по следующему соображению:
Если использовать стандартную платформу 1с-7.7
(если я ошибаюсь - народ поправит ;) )
то она на SQL-сервере использует не видозную авторизацию, а именно скульную.
И учетка под которой 1С-ка ходит на SQL жестко прописывается в свойствах базы в конфигураторе
(это кстати относится и к 8.х).
Так что, к сожалению,
не получится разным юзерам ходить под 1С на SQL под разными учетками,
чтобы разграничить доступ к таблицам правами на SQL-сервере.
PS:
К стати о птичках, вопрос:
А сам SQL умеет рулить правами на уровне полей и записей?
2000-ный вроде рулил только на уровне самих таблиц.
Про 2005/2008 я не знаю изменилось что-нибудь в этом отношении.
(350) varelchik, почему нет? Вон у меня есть соседняя публикация, начиная с которой я пришел к этой разработке. Там я реализовал функционал, который позволяет заменять в запросах имена родных таблиц на свои, например, на другие таблицы или представления. А где есть представления, то там есть возможность организовать ограничения.
А где скачать Solution 7 ? По кнопке "Скачать" качается Solution 5 и никак иначе. Вроде пролистал все странички обсуждения, а никаких других ссылок не нашел. Хочется уж обновить систему. Тем более новый сервак щас ставится SQL 2008 R2. Одна из предыдущих версий "Секретного релиза" уже больше полугода работает, никаких нареканий
(367) spock,
1c уже есть установленная по вышеописанной методике (с Solution5), и работает с MS SQL Server 2008 (10.0.1600) ОС Windows 2008 Std 32bit
Сейчас ставлю новый сервер MS SQL Server 2008 R2 (10.50.1600) ОС Windows 2008 R2 Std 64bit
и 1С ,работающая нормально со старым сервером, на новый базу не может загрузит - выдает описанную ошибку
А что значит использовать другие способы? Это с подменой библиотек что-ли?
Win2k8r2 x64 + SQL2k8r2
Перепровел базу ТиС за несколько лет. За неделю непрерывного перепроведения ни одного сбоя.
Сравнил обороты, себестоимость, остатки, дебиторку.. в общем все итоги и обороты по регистрам в получившейся базе и в основной - ни одного расхождения.
Вердикт: буду внедрять в промышленную эксплуатацию.
З.Ы.
Использовал Solution5. Жаль, что по основной ссылке загружается он, а не последняя версия.
(377) Sk0rp, А что мешает зайти и взять последнюю?
Кстати в последней поборено зависание на журнале подчиненных документов!
У меня тоже стоит, правда на 2008 пока только бухи сидять, они же и выловиди странное поведение журнала подчиненных документов.
Ответили: (386)
В общем перерыл кучу всякой информации и заработало только вот это:
Помещаем файлы (из ХР: sqlsrv32.dll, sqlsrv32.rll) в
C:\ODBC\
Делаем рег файл типа
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI]
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"SQL Server 1C"="Installed"
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server 1C]
"UsageCount"=dword:00000004
"Driver"="C:\\ODBC\\sqlsrv32.dll"
"Setup"="C:\\ODBC\\sqlsrv32.dll"
"SQLLevel"="1"
"FileUsage"="0"
"DriverODBCVer"="03.50"
"ConnectFunctions"="YYY"
"APILevel"="2"
"CPTimeout"="60"
в поле "Сервер" пишем "ИмяИлиАйписервера;Driver=SQL Server 1C"
остальные поля заполняем как обычно
а никто еще не решил проблему выгрузок больших баз? 30Гб просто про говорившиеся поля неопределенной длины не канают, все убраны и толку нет. bcp делал, но это гемор :( и не все так просто там, чтобы тестить чтобы понять точно ли все будет работать, откат то еще сложнее потом.
Если клюшки справляются - лучше их вообще не трогать. Помню бухгалтера были довольны и 6-й версией, т.к. их задачи она точно решала.
Я вот тоже подумывал, что может пора уже посчитать сколько будет стоить переход на 8-ку для 60-ти пользователей да боюсь лучше не озвучивать.
По моим прикидкам денежных вложений потребуется в следующие вещи:
1. Рабочие станции
2. Сервера SQL
3. Лицензии 1С 8 версии (сейчас у нас 7.7 с неограниченным кол-вом пользователей).
Стоимость доработки функционала я вообще не считал, т.к. в существующей системе постоянно дорабатывается функционал.
У нас уже был один переход со старой версии 1С на 7.7 когда конфигурация еще была написана под 7.5 версию. Так что помню сколько было косяков с учетом доработки новой конфигурации.
Господа! Помогите!
Поставил данную разработку, 3 месяца все было без проблем или почти без проблем,
т.е. примерно раз в месяц приходилось реструктиризировать базу из за зависания
на выборе подчиненных документов.
С начала марта вдруг зависать на этих запросах стала чуть не каждые два часа!
Конфа сильно самописная.
Сервер 2008 std R2.
SQL 2008 SP2.
Такое ощущение что, что то периодически подменяет запрос к подчиненным документам на некорректный.
Кто, что может посоветовать. Погибаю!
Ответили: (399)
spock, можно задать пару вопросов по вашей win-авторизации?
1) Предположим, есть доменный юзверь "petrov" и пользователь в 1с "ПетровПП". При включении win-авторизации в окошке выбора пользователя/ввод пароля 1С отобразится какое имя - "petrov" или "ПетровПП"? Если "petrov", то существует ли способ прописывания соответствий "petrov = ПетровПП"?
2) Если, например, понадобится позже отключить win-авторизацию и вернуться назад на 1с-авторизацию, что необходимо сделать? Достаточно ли удалить фрагмент строки ";Trusted_Connection=yes" из поля "Сервер" или нужно совершать что-то дополнительно?
Сейчас использую win-авторизацию, реализованную так - . Всё работает замечательно, но недавно всплыла одна неприятная особенность - подхватывается доменный пароль лишь пользователя, который сейчас залогинился на машину; если нужно войти под другим пользователем, то приходится вводить не доменный, а 1с-пароль :-(
Интересный результат, правда сервер новый и не протестированный
Процедуры
1.Отчет по проводкам за квартал,
2.Перепроведение документов за кварталv
Условия одинаковые(база та же, количество документов и проводок то же).
Железо - soft
1. сервер 2x Xeon5120@1.86 16gb sata - v7.7 + win2003+ ms sql server 2000 (sp4) enterprise
2. сервер 2х Xeon5630@2.56 24gb ssd - v7.7(патченный) + win2008R2 64+ ms sql server 2008 standart
3. сервер 2х Xeon5630@2.56 24gb ssd - v7.7(solution6) + win2008R2 64+ ms sql server 2008 standart
Результат по таймеру
[Задача, железо]
[1,1] = 95 сек
[1,2] = 135 сек
[1,3] = 186 сек
[2,1] = 62 мин
[2,2] = 75 мин
[2,3] = 120 мин
я не могу обяснить причину, возможно не правильно натроен sql на новом серваке
Пока решил остаться на старом железе со старым софтом т.е.
337 [+] [−] Перейти к публикации
Поделился всё таки тайным знанием..