#0
by DCKiller
Добрый день. Проблема следующая: бехгалтерия 7.7 (sql), в базе одновременно работают 10 пользователей. Как только кто-то из них запускает формирование акта сверки, скажем, за месяц, все остальные начинают жутко тормозить. Как лечится эта проблема? И еще момент. Во время групповой обработки документов частенько вылетает сообщение об ошибке "Время ожидания блокировки таблицы 1SJourn истекло". В принципе, это и так понятно, что таблица журнала доков в момент записи/проведения конкретного документа блокируется для всех остальных юзеров, но - опять же, - вроде бы есть какой-то патч?
#0
by DCKiller
Добрый день. Проблема следующая: бехгалтерия 7.7 (sql), в базе одновременно работают 10 пользователей. Как только кто-то из них запускает формирование акта сверки, скажем, за месяц, все остальные начинают жутко тормозить. Как лечится эта проблема? И еще момент. Во время групповой обработки документов частенько вылетает сообщение об ошибке "Время ожидания блокировки таблицы 1SJourn истекло". В принципе, это и так понятно, что таблица журнала доков в момент записи/проведения конкретного документа блокируется для всех остальных юзеров, но - опять же, - вроде бы есть какой-то патч?
#2
by andrewks
нагрузку на скулевом серваке мониторил? что за сервак? характеристики? и последний вопрос на пять: какой релиз платформы, и какой скуль?
#5
by Jaffar
сомневаюсь, что 8 ядер нужны на 4Гб оперативки, но автору виднее. и не понятно, терминальный режим или голая сеть?
#7
by yra77
Акт сверки всегда был таким. И на больших базах блокирует таблицы и формируется долго. Выход - искать альтернативный акт сверки или освоить самому прямые запросы. Более НИКАК.
#8
by FN
8 ядер на 10 пользователей? круть. попробуй 1cv7s.exe по ядрам пораскидывать в зависимости от пользователя - должно немного помочь start /affinity номер_ядра /normal 1cv7s.exe enterprise /DПуть_к_базе
#12
by DCKiller
Ага. А еще в QA :) Меня интересует, в первую очередь, описание содержимого его полей на ч е л о в е ч е с к о м языке :)
#14
by DCKiller
Мне нужно просто подробное описание полей 1SENTRY. А переписывать акт сверки под прямые запросы я буду сам.
#17
by DCKiller
Как получить значение субконто Дт/Кт проводки из 1SENTRY? Про структуру файла можно уже не рассказывать, есличо.
#18
by DCKiller
+17 Пытаюсь выбрать из проводок поле DTSC0, он мне выдает ошибку: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 61H ' to a column of data type int.
#23
by DCKiller
Да, ошибка именно в таком виде. Если убрать Проводки.DTSC0 As СубконтоДт1, то запрос выполняется успешно.
#24
by Креатив
Поищи на Инфоstarte. Я переделывал для УСН, но смысл тот же. Заменил ВыбратьОперации с проводками на использование бухитогов. Работает в разы быстрее.
#27
by DCKiller
Что еще показать? Весь код процедуры? Мне вот тоже непонятно, почему из-за одной этой строки такая ошибка вываливается. Мож это там в самой таблице в этом поле где глюк какой сидит?
#28
by DCKiller
+27 всё, заработало :-) мой косяк был. В-общем, вариант в рабочий. Теперь возникает вопрос, как это значение привести к типу 1с?
#30
by DCKiller
ппц, я в шоке... Вот ведь какая хрень: сделал замер скорости выполнения обычного акта сверки 1С и сделанного на прямом запросе (см. ), с одними и теми же условиями. Так вот что получилось: - время выполнения первого - 8 сек. - время выполнения второго - 98 сек... Прямые запросы меня начинают все больше разочаровывать... :((( Как такое вообще может быть?! Что делать?
#33
by Попытка1С
Почитай про класс прямой запрос, там вроде ВТ несколько оптимизированы, да и писать удобнее.
#35
by Кириллка
Попросить людей или сделать самому правильно. Чтобы сделать самому правильно, нужно попытаться понять, что ты своим запросом, с большой вероятностью, сканируешь кластерный индекс - отсюда и все проблемы.
#37
by DCKiller
Можешь ткнуть в нужном направлении? Как можно оптимизировать запрос из , чтобы он шустрее работал?
#40
by leshikkam
тебе надо использовать один из классов на базе 1С++ Либо ПрямойЗапрос либо AccountsRecordset
#41
by DCKiller
Интересно... Что такого волшебного в этих классах, что только они позволяют ускорить запрос к таблице проводок?
#44
by Дык ё
они попадают в индексы получше, чем ты в . можно и без классов - посмотри на план выполнения и подумай
#47
by DCKiller
Вот что нарыл: Там сначала чувак, задающий вопрос, приводит вот такой код без AccountRecordset: Товарищи, т.е. фактически получается, что вариант 2 будет быстрее выполняться по времени по сравнению с вариантом 1?
#48
by Дык ё
это совсем разные запросы, сравнивать время их выполнения не имеет смысла. а так, для эффективной работы варианта 2 в нем не хватает отборов по provkind и active
#49
by Chai Nic
Отбор по _1SENTRY почти всегда будет неоптимальным и тормозным. Акт сверки (обороты в разрезе движений) надо формировать бухзапросом, с отбором по субконто Контрагенты. Причем, по моему опыту - лучше не запускать запрос по всем счетам, а вызвать его несколько раз, по каждому счету, где есть субконто Контрагенты, далее эти данные свернуть в таблице значений. Почему-то несколько бухзапросов по одному счету выполняются значительно быстрее, чем один бухзапрос по списку счетов.
#51
by zak555
если ты не в курсе, можно счета не указывать, а разворачивать по контрам, а потом по счетам смотри в сторону анализ субконто
#53
by Chai Nic
Можно по-разному.. главное не запускать бухзапрос по списку счетов. И не использовать ВыбратьОперацииСПроводками. У нас на бухии изначально был акт сверки жутко тормозным, когда ушли от глобального бухзапроса по всем счетам - сразу стало всё летать, повышение скорости на порядок или на два. sql-версия.
#54
by leshikkam
Товарисчи - есть такой файл который называется Отбор проводок по субконто - _1sbkttl. Так вот именно его а также отбор проводок по счетам и надо использовать
#58
by bushd
Перепиши акт сверки). Он все равно как был уе..ким так и остался. Памяти мало. SQL жрет дофига, а там еще терминальный сервер. Это ППЦ. Так то вообще изврат, но способ (SQL + TS) вошел прочно в обиход.
#60
by Дык ё
у тебя уже тяпница? :-) в таблице итогов нет данных о документах-регистраторах движений и таблиц там куда больше трех
#61
by bushd
+58 По момему проще памяти добросить - очевидно что ее мало. Потом написать нормальный акт сверки без всяких прямых запросов - они тут нафиг не нужны... имхо, и не трахать мозг, 10 пользователей всего. Ну любят люди извращаться на ровном месте.
#62
by Сияющий Асинхраль
а можно вопрос не в тему? Зачем бухгалтерскую базу с паршивым десятком пользователей сажать на sql? Терминал плюс dbf будут работать намного быстрее
#63
by Chai Nic
Память не поможет - всё равно последовательный скан это сильно не ускорит.. даже если сервер полностью базу закэширует. Алгоритмы надо переписывать. В типовой алгоритмы под sql не всегда оптимально построены..
#65
by DCKiller
Затем, что файл проводок уже вырос до нев..бенных размеров, и индексы уже не справляются с нагрузкой.
#67
by Chai Nic
Индексы на то и предназначены, чтобы серверу было пофиг на память и быстродействие доступа к ней в первом приближении. Ибо логарифм.
#68
by bushd
Я тут подумал - из за акта может тормозить по одной причине - нехватает памяти. Так что наверное и переписывать ничего не надо. Хотя типовой уродский, писал свои давненько работали гораздо приятнее с использованием бух запроса обычного.
#71
by bushd
Почему про память говорю, потмоу что никакие таблицы в акте тут не блокируються... следовательно все упираеться тупо в производитеьность, котороя резко падает если не хватает памяти - ввиду использования под недостающее винта.
#73
by bushd
Но я его не на почве производительности писал. Прсто тогда актов вообще не было в типовых))) да было время)
#77
by bushd
У человека тормозит не акт! Другие юзвери. Так что колбасить атк особого смысла не вижу.
#78
by DCKiller
Ладно, пока всем спасибо. Сегодня уже поздно, завтра буду проверять на работе все варианты. Что получится, отпишусь.
#79
by Chai Nic
Вообще, по моему личному опыту - память менее важна, чем правильные алгоритмы доступа к данным. Попытка загладить косяки памятью ущербна изначально - ибо рано или поздно данных станет больше, и памяти будет опять не хватать.
#80
by bushd
+77 Ну т.е смыс есть но после увеличения памяти. Но вообще я повторюсь SQL + TS это дурдом на мой взгляд. Это уж когда выхода нет. Клиенты дохлые совсем, а в DBF база не влазит.
#81
by bushd
С фига ли ее станет надо больше? Акт формируеться за определнный период по контретному контрагенту. Т.е. ясное дело SQL зажрет еще себе сколько влезет, но к акту никакого отношения это не имеет. Я вот что то думаю, что SQL столбит себе память, терминальные сессиям вероятно приходиться сосать... с диска). Както так. А править алгоритмы в данном конкретном случае тут дело третье. Добавте памяти страждущему. Ведь каждая сессия дофига жрет памяти а тут еще данные обработать надо. 4Гб для SQL + TS - фигово, как впрочем и сама конфигурация дурацкая - SQL + TS.
#82
by Сияющий Асинхраль
согласен. Вопросов нет. Не хочешь поэкспериментировать? У меня в карточке есть ссылка на страничку, на этом адресе лежит несколько эртиков, один из них как раз акт сверки, он в свое время без проблем работал в базе с шестьюдесятью пользователями, а вдруг и у тебя покатит
#83
by bushd
Кстати у меня один и тот же запрос Бух на SQL базе выполняеться в 10-ки раз быстрее чем на DBF. Практика. Правда я терминалы не сажу на SQL сервер)
#84
by Chai Nic
Давать советы типа "добавьте памяти", не видя реального состояния системы, показаний счетчиков производительности в динамике, в часы наибольшей нагрузки и в среднем - по меньшей мере непрофессионально!
#86
by bushd
А че тут видеть то? - Чисто из опыта 4ГБ ОЗУ одной SQL то было мало на сравнимой базе - предел по DBF и за, а тут еще сессии терминальные подвешены на серваке. Я бы и думать не стал удволи бы и все. Тут вопрос в винде сервачной - сожрет ли 8 и все. А так самое простое и экономически целесообразное решение. Худже точно не будет, а дальше бы уже думать стал.
#88
by Кириллка
Напряг в дисковой подсистеме в первую очередь, а потом уже с памятью. Чтобы построить акт нужно перебрать за период горы данных тупым сканированием, хоть и, кластерного индекса. Физически это можно сравнить с тем, как золото добывают - большими экскаваторами выгребать руду, а потом искать писчинки золота. Вот ковш экскаватора это память скуля. И сессно, если ковш больше, то и загребать он сможет больше и, вроде как, дело пойдет быстрее. Но один фиг перебираем горы. Нужно искать подход такой, чтобы грести золотой песок - попадание в индекс. Как-то вот так :)
#90
by DCKiller
Ну, сранение красивое, не спорю :) Только теория она теория и есть. На данный момент самый быстрый вариант - акт сверки, о котором речь в . И это не прямой, а обычный, бухгалтерский запрос 1С.
#91
by Chai Nic
(+88) Индекс в подобной аналогии - это подробный указатель координат точек, где этот золотой песок находится.. и рыть экскаватору приходится на порядки меньше.. и можно обойтись меньшим размером "ковша".
#92
by Кириллка
уже было сказано, что запрос ты нарисовал не верно. Логически он верен, конечно. Но часто решение в лоб не дает хороших результатов, что и доказал твой опыт. Вот смотри.. 0. sp_help '_1sentry' - вот тут тебе будет вся инфа по табличке. 1. изучаем индексы для этой таблички: PK__1SENTRY, ACCDTID, ACCKTID и другие не интересные. 2. твой запрос идет по идексу PK__1SENTRY - 100%, а это тупо проводки отсортированные по дате (упрощенно говоря), следовательно, чем больше период, тем страшнее. Вывод: нужно искать другие пути. Если у тебя включен отбор по Контрагентам (как уже тебе тут твердили) - Метаданные-ВидыСубконто-Контрагенты-Отбор, то у тебя в табличке _1ssbsel будет немного счастья. Потому как sp_help '_1ssbsel' кажет там индекс VALUE, из значений которого можно спозиционироваться в таблице _1SENTRY.
#93
by DCKiller
Где эти индексы находятся? В самой табличке _1SENTRY? Она у мну дюже здоровая... При попытке ее открыть QA мну на хутор за бабочками посылает :(
#95
by DCKiller
Глянул. Тогда возникают след. вопросы: 1. По какому индексу оптимальнее строить запрос? 2. Как заставить RecordSet выполняться именно по этому индексу?
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- v7.7: Бухгалтерия. Запись книги продаж не формируется
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- v7: Почему медленно работает 1С:Бухгалтерия 7.7
- v7: Бухгалтерия предприятия. Печатная форма акта об оказании услуг.
- v7: 1С V7.7 в сети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: Перенос данных Бухгалтерия из v7 в v8
- v7: v7 Перехват глобального события ПриЗаписи() или ОбработкаПроведения()
В этой группе 1С
- 8.2 Внешняя ОБРАБОТКА. Вывод СКД в Табличный документ.
- 1C не видит домен, соотв. невозможно ввести доменного пользователя, что крутить?
- УПП 1.3.14 неактивна кнопка "Печать"
- 8.2. Как добавить кнопку верхней командной панели формы ?
- Перешли на 8.2 - проблема с методом НайтиПоУникальномуИдентификатору
- настройка весового товара на mobile logistic 4.7
- Прочитать данные в табличный документ
- Как выгрузить т.ч. с отбором
- БГУ выгрузка платежного поручения
- УТ11 Как включить на действующем складе ордерную схему?
- БГУ Журнал операций, не то содержание операции
- Подключение к 1С 7.7 по COM из 8.2
- Почему КЛАДР не подставляет индекс в адрес?
- 1с82 "УниверсальныеМеханизмы" не нашел во встроеннной справке
- Возможно ли штатно получить список установленных принтеров в 1с ?
- Выключить возможность изменения конфигурации
- Как можно изменить вид отчетов
- Бух, кадры: учёт во внешней программе, как вести в Бух?
- 90.01 90.02 90.03 Раскрыть по номенклатуре
- Понять в запрос по Оборотам Дебет или Кредит