Запрос vs Объект + результат эксперимента, вполне реального




Использование 1с-запроса для доступа к данным имеет преимущество в скорости перед объектной моделью при ожидаемом объеме выборки более 10 000 ссылок. Конкретный результат: 0.07 секунды при запросе против 0.0023 секунды при использовании объектной модели.

Каждый 1снег «знает», что «в восьмерке надо использовать запросы». В первую очередь это – результат работы отдела маркетинга «флагмана». Сами же 1снеги (старого поколения) так ненавидели запросы в 7-ке, что повелись на подачу «флагмана» весьма охотно и некритически. А потом это стало так же привычно, как «всемирность» ньютонова тяготения.

 

Повод для сомнения дал ламерский вопрос на ИС. Нет, поначалу дружные вопли «Запрос! Запрос!» ничего не вызвали, кроме желания, чтобы орали по-тише. Зацепила совершенно фантастическая конструкция автора вопроса:

ДокументОбъект = Документы.ЖурналПроизводственныхЗаданий.ПолучитьСсылку(Ссылка).ПолучитьОбъект();
КопируемоеЗначение = ДокументОбъект.СпецификацияУзлов.ВыгрузитьКолонку(Колонка).Получить(Строка-1);

 

А потом в подсознании всплыло, что скульные базы еще в семёрошные времена рекомендовались для объемов и надёжности, а в скорости локальные файловые скуль превосходили.  И как-то сам собой набросался простенький тестик, см. пост (12) в той ветке.

 

Объектная модель не просто оказалась быстрее, а прямо таки уделала запрос.

 

Замечания коллеги sonuchin3  несколько снизили накал страстей, и было решено доработать условия теста, чтобы получить цифры достаточно сопоставимые с учетом кэширования.

 

В серии тестовых 100 000-ных циклов проводились обращения к разным количествам оригинальных ссылок, результат – см. табличное поле на рисунке.

 

Тестовая конфигурация – с массивом документов и обработкой – прилагается.

**

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

Т.е. мы всего лишь получили исходные цифры для эксперимента: 500 раз возьмем из массива документов порции по 200 ссылок, это и даст нам хорошее сравнение способов доступа к данным — для этого конкретного, простейшего на самом деле, случая.

ЧАСТЬ 2. Результаты эксперимента, приближенного к реальности.

Для сравнения скорости доступа к данным был поставлен следующий эксперимент.

На форме создана таблица типа ДокументСписок.РеализацияТоваровУслуг

В таблицу добавлена колонка с полем ввода типа СправочникСсылка.Номенклатура

На форме размещен радио с двумя позициями – способами получения данных:

0 – запросом, 1 – объектом

 

Для таблицы определен обработчик ПриПолученииДанных

В зависимости от положения радио колонка Номенклатура заполнялась тем или иным способом.

 

Для обоих положений радио:

  1. текущая строка помещалась вверх списка
  2. включался замер производительности
  3. текушая строка стрелкой вниз перемещалась по списку до конца
  4. снимался скрин замера

 

Результаты представлены на картинках:

 

Складывая значимые цифры, получаем

Для способа запросом: 0,07 сек

Для объектом: 0,0023 сек

 

Обработку можно скачать и попробовать.

99 Comments

  1. tango

    см. часть вторую — результат ПриПолученииДанных двумя способами — запрос медленнее объекта в 30 раз

    Reply
  2. Altair777

    Просто в 8-ке через запрос стало как-то привычнее выбирать 🙂

    Несомненно, в 7-ой версии с запросами было просто мучение. А вот в 8-ке такие выборки можно писать в реал-тайме в консоли запросов и вживую видеть результат.

    Reply
  3. tango

    (2) Altair777, ну да, привычка. ощущение избранности: я вертел СКД!

    а оказывается, что надо выбирать — где объект лучше, где — запрос

    Reply
  4. tango

    (2) Altair777,

    можно привыкнуть в реалтайме пользоваться таблом 🙂

    Reply
  5. tango

    таки что-то не то

    не обходит эта схема теста проблемы кеша

    надо сделать накопление результата на оригинальных ссылках во всей серии

    Reply
  6. romansun

    ох, наброс так наброс…

    нет смысла сравнивать подход, вполне достаточный в работе с базами на простеньком файл/сервере, с dt на 100мб, кол-вом активных юзеров от 0 до 2 шт (терминалом) и т.п.

    с подходом, критически необходимым к базам на мощных зубодробительных sql-серверах, с гигабайтными dt и с кол-вом активых юзеров в >100500 человек и т.д.

    это совершенно разные вселенные, между ними только что язык написания кода одинаков..

    Reply
  7. Арчибальд

    Если отвлечься от конкретных деталей реализации, по тексту запроса строится (отфильтрованный) массив индексов для файла(ов) .dbf, а выполнение запроса — это цикл по этому массиву. Объектная модель использует предопределенные (готовые) индексные массивы, которые требуется только отфильтровать. Естественно, эта модель хорошо работает только в «простых» случаях.

    Reply
  8. tango

    Спасибо за поддержку и каменты, коллеги.

    Думаю, попробовать сравнить ПриПолученииДанных в форме списка

    Reply
  9. petrov_al

    (7) Арчибальд, а можно поподробнее об этом…»по тексту запроса строится (отфильтрованный) массив индексов для файла(ов) .dbf, а выполнение запроса — это цикл по этому массиву»…или ссылочку по этой теме.

    Reply
  10. nomadon

    ничо не понял

    Reply
  11. iov

    (10) Это так похвастался? Или просто мимо проходил? 🙂

    Reply
  12. hogik

    (7)

    Присоединяюсь к просьбе из (9) сообщения. 😉

    И еще хочется узнать — почему слово «простых» заключено в апострофы?

    Думаю, почти (без привнесенных извращений «запросным» ЯМД) во всех случаях эта модель работает хорошо.

    А «если отвлечься от конкретных деталей реализации»(с), то в «объектной модели» индексы массивы индексов не строятся по «тексту запроса»(с), а существуют (определены) изначально в схеме базы данных…

    P.S. Хотя, про «массив индексов» — это действительно «тонкости и детали». 😉

    Reply
  13. tango

    ну да, ну да

    документацию почитать полезно бывает

    Однако запрос будет выполнять считывание из базы данных при каждом вызове. Соответственно, при многократном обращении к одним и тем же данным будет выполняться многократное считывание. Этого можно избежать, обращаясь к свойствам ссылки. В этом случае используется кэширование объектов и в определенном интервале времени при повторном обращении к данным объекта не будет выполняться повторное считывание.

    актуально остается попробовать запрос<>объект при получении данных

    Reply
  14. tango

    еще читаем доку

    При использовании запроса вся считанная информация передается на клиентский компьютер и размещается в оперативной памяти. Если требуется обработать очень большие объемы информации, то можно рекомендовать использовать выборку. Выборка не предоставляет широких возможностей по отбору и упорядочиванию информации и считывает все поля и табличные части объектов, но зато она выполняет считывание порциями и, соответственно, может использоваться для обработки любых объемов данных без помещения их в оперативную память.

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

    С точки зрения поиска объектов (ссылок на объекты) по простым условиям (по коду, по наименованию и т.д.) использование запроса и методов менеджеров объектов (НайтиПоКоду() и др.) не имеют существенных отличий по реализации с точки зрения платформы. Методы менеджеров имеет смысл использовать, если выполняются именно одиночные операции поиска. Основным преимуществом методов менеджеров является краткость записи в модуле. Если необходимы сложные условия или поиск нескольких объектов, то необходимо использовать запрос.

    Reply
  15. Арчибальд

    (12) Я ж и говорю

    Объектная модель использует предопределенные (готовые) индексные массивы

    (9) Ссылку не дам. Я написал это «с точки зрения банальной эрудиции». Структура данных (реляционная модель) именно на такие обращения и заточена.

    Reply
  16. hogik

    (15)

    «Я ж и говорю»(с)

    Я уже потом понял Вашу формулировку. 😉

    Возможно, что перед словом «Объектная» должно стоять «А».

    Но, мой вопрос про апострофы остался без Вашего ответа…

    Reply
  17. kiros

    Считаю автор вводит в заблуждение молодые неопытные головы, в самом начале статьи надо крупно писать «ФАЙЛОВАЯ ВЕРСИЯ», этого не увидел, засомневался: «Может от жизни отстал». Для файловой базы согласен, и даже больше скажу, что на практике такие заскоки платформы были (с переходом на 8.2 начальные релизы), что запросы на порядок медленнее отрабатывали. НО, не забываем про молодые горячие головы, которые сейчас возьмут и в клиент-серверных вариациях начнут такое «колбасить», и с пеной у рта доказывать что вот люди писали, что так быстрее, за что будут незамедлительно отправлены восвояси учить мат. часть! И не забываем что все маленькое когда-то вырастает, и что тогда? переписывать :0

    Reply
  18. tango

    (17) kiros, ценность вашей оценки… нет, не так.

    ваша оценка имела бы некоторую ценность, сопроводись она каким-нито тестом

    Reply
  19. kiros

    (18) я написал, что справедливость этой статьи относится к ФАЙЛОВОЙ ВЕРСИИ БД или этого ПРОСТЕЙШЕГО случая, если это указать в тексте статьи ВНАЧАЛЕ И ЯВНО сразу поставлю «+», а так, считаю что статья вводит в заблуждение, особенно если прочитать не сильно вчитываясь.

    Reply
  20. tango

    (19) kiros, я, наверное, плохо выразил мысль.

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

    в вашем же «замечании» ничего кроме вашего же «имхо» нет

    вот я и говорю — бла-бла-бла стоит недорого

    Reply
  21. kiros

    (20) весь смысл публикации свелся к последнему предложению, т.е. для каждого конкретного случая, базы и задачи. (пришлось перечитывать навеявшую публикацию) Тогда да, в таком случае красота, только эта красота далека от жизни, на практике такая задача одна на … я даже не припомню были, ли у меня такие задачи.

    Reply
  22. mxm2

    Не забываем, что запросом гораздо проще контролировать права (предложение «Разрешенные»), а также то, что запросы быстрее работают даже на меньших выборках в условиях многопользовательской работы (для этого и рекомендуется SQL). Ну и субъективно: запросы более наглядны.

    Reply
  23. tango

    (22) mxm2,

    запросы более наглядны

    часто ли вам приходилось «парсить» запросы в ЗуПе, коллега?

    Reply
  24. tango

    (22) mxm2,

    запросом гораздо проще контролировать права (предложение «Разрешенные»)

    утверждаете ли вы, что объектный доступ игнорирует ограничения РЛС? если нет, по поясните. пожалуйста, это свое «проще»

    Reply
  25. tango
    быстрее работают даже на меньших выборках в условиях многопользовательской работы

    ну, собственно, см. (20)

    Reply
  26. tango

    (21) kiros,

    эта красота далека от жизни

    было предложено для эксперимента ПриПолученииДанных — задача весьма востребована (трудно даже придумать более востребованную), и как раз попадает в область преимущества объекта

    Reply
  27. mxm2

    в ЗиУПе запросы конечно — громоздкие, но, как привило, там почти все понятно, если предварительно распечатать их на надцати листах и потом «карандашиком» произвести «анализ». Иногда даже, то, что запрятано в этих запросах, на мой взгляд, должно быть сделано в пределах объектной модели, но не думаю, что реализация будет более понятной и менее громоздкой.

    Reply
  28. mxm2

    (24) а разве не игнорирует? (и не выдает ошибку?)

    Reply
  29. tango

    (28) mxm2, хорошая тема для публикации, дарю 🙂

    Reply
  30. AlexO

    (28) mxm2,

    РЛС ограничивает доступ на уровне записи в базе, а не на уровне «всевдообъектов» 1С.

    Чтобы получить «объект» 1С — нужно сначала прочитать его из базы. А этого как раз и не даст сделать ограничение РЛС.

    Reply
  31. mxm2

    (25) про тестирование — ничего сказать не могу. Да. Но есть такой опыт:

    1. работа пользователей в количестве 10-20 человек субъектовно ощущается более конфортной при использовании SQL базы вместо файловой.

    2. при активной работе пользоваталей на SQL базе производительность запросов напрямую зависит от производительности SQL сервера, в то время как объектная модель менее подвержена этому влиянию, поскольку исполняется в пределах «Сервера 1С».

    ЗЫ. будет время оттестю Вашу систему.

    Reply
  32. mxm2

    (30) AlexO, (29) … прикольно, усомнился даже, но вот код:

    Выборка = Справочники.Партнеры.Выбрать();

    Пока Выборка.Следующий() Цикл

    Стр = Стр + Выборка.Наименование;

    КонецЦикла;

    в условиях ограничения прав дает ошибку «У пользователя недостаточно прав на исполнение операций с базой данных»

    Reply
  33. tango

    (32) mxm2, да, вы правы, РАЗРЕШЕННЫЕ перекладывает проблемы на платформу.

    но!

    1. общим местом являются тормоза при рлс

    2. в языке есть методы, позволяющие разрулить ситуацию, ПараметрыДоступа и банальная попытка

    так что опять — фифти-фифти, решаем по месту

    Reply
  34. mxm2

    (33) «Попытка» — сама тормозная, причем исполнятся будет пообъектно (последнее касается и «ПараметровДоступа»), что не есть гуд, в сравнении с запросом. решение 50/50 — приводит к тому, что придется вообще 2 кода писать (и запросом и объектом), и использовать в зависимости от предполагаемого количества элементов (как-то мне не нравится эта мысль )) ), и потом как перед заказчиком обуславливать, что мол на это нужно в 2 раза больше времени, чтобы работало «быстро».

    Reply
  35. tango

    (34) mxm2,

    перед заказчиком обуславливать

    эк вас торкнуло-то, батенька

    Reply
  36. tango

    кроме номенклатуры есть много «простых» справочников, где больше пары десятков записей не бывает

    Reply
  37. tango

    кстати, «объяснять» клиенту, что тормоза из-за рлс — да, реально приходилось

    Reply
  38. mxm2

    (35) не то слово… + позволю высказать теоретическое соображение: т.к. в условиях работы более мощного SQL сервера запросы выполняются быстрее по сравнению с менее мощным, аналогично как и в случае использования более мощной системы на которой расположен «Сервер 1с» — пообъектной перебор будет быстрее чем в условиях использования менее мощной, то задача еще более усложняется, т.к. появляется зависимость от конкретного оборудования, на котором все это дело «исполняется»

    Reply
  39. mxm2

    (36) про микро справочники речь и не идет, но ведь слишком часто их приходится «вязать» с большими.

    Reply
  40. tango

    (38) mxm2, ну, хромая лошадка по имени «кластер 1С» все равно вынуждена транслировать обращения клиента, хоть «объектные», хоть «запросные» в мелкомягкий (или другой) диалект

    Reply
  41. tango

    (39) mxm2, и вот здесь мы (плавно не) переходим от бла-бла-бла к более-менее моделирующим реал тестам

    Reply
  42. tango

    вообще, по поводу трехзвенки, столько долго выжидаемой 1снегами, получилась очередная опа

    чё б ни ограничиться клиентами, работающими с SQL?

    **

    ну, не так, чтобы как 77, а как у людей

    Reply
  43. mxm2

    (37)

    кстати, «объяснять» клиенту, что тормоза из-за рлс — да, реально приходилось

    ага и даже «справлятся» с ними приходилось, иногда даже «оптимизацией» запросов )), но что греха таить — наращивание серверной мощности — универсальный ответ, хоть и не дешевый.

    Reply
  44. mxm2

    (42) согласен со всем, но выбора нет… или это предложение спрыгнуть с 1С?

    про бла-бла-бла тоже… но это человчья сущность, «пивом не корми а дай пообщаться» (с)

    Reply
  45. AlexO

    (32) mxm2,

    в условиях ограничения прав дает ошибку

    все правильно, а в чем противоречие?

    Вы не знаете, как формируются выборки, а как — запросы в 1С?

    (33)

    РАЗРЕШЕННЫЕ перекладывает проблемы на платформу

    они ничего не перекладывают, это только инструкция «не ругаться на «нечитаемые» записи» в результатах запросов 🙂

    Ибо обратное «как в выборках» невозможно — отругаться «нет прав», когда выполняется запрос. Вот и выход либо ошибка выполнения запроса, либо — РАЗРЕШЕННЫЕ.

    Reply
  46. AlexO

    (40)

    кластер 1С

    да и не кластер это в общем, а авторассовывание клиентских подключений по разным машинам.

    Reply
  47. tango

    (44) mxm2, что значит «спрыгнуть»?

    лишать себя гарантированного куска, сменив свою специализацию? нафиг-нафиг

    перевести бухию?.. просто не на что, не зачем, не реально, не наше дело, да и просто глупо

    короче, жрать кактус — есть такая профессия

    а потрындеть — это да. с другой стороны, огоньку не хватает 🙂

    **

    вот, коллега Алекс нам щас огоньку поднесет 🙂

    Reply
  48. mxm2

    (45) AlexO, «разрешенные» — делает объединие с неким запросом по «правам» в результате выбираются только «нужные, доступные пользователю» элементы (все это делает SQL в случае SQL базы). в объектоной же модели — в любом случае приходится перебирать все и из них использовать доступные.

    Reply
  49. tango

    (48) mxm2, в объекте кто генерит отлуп, «кластер» или скл?

    **

    вы уверены, что объединение «правного» запроса и запроса к данным выполняется не в «кластере»?

    Reply
  50. AlexO

    (38) mxm2,

    т.к. в условиях работы более мощного SQL сервера запросы выполняются быстрее по сравнению с менее мощным, аналогично как и в случае использования более мощной системы на которой расположен «Сервер 1с» — пообъектной перебор будет быстрее

    ничего подобного.

    Никакой прямой связи «запросы — это только SQL, объекты — это только 1С» нет и не было.

    На самом деле вся производительность зависит на 90% от производительнотси 1С-сервера, а SQL уже вторичен.

    Все — и запросы, и выборки, и объекты, и все-все-все в 1С обрабатывает 1С-сервер (платформа).

    А SQL дает только «сырые» данные, причем в объеме, зачастую много-сотен-раз-кратно превышающими нужные данные.

    Ибо 1С-севрер не может путью оптимизировать запрос к SQL, и совсем практически не использует SQL как СУБД, а только — как хранилище таблиц с данными (исключая простейшие запросы, которые, можно сказать, один-в-один ложатся из 1С через её транслятор в обработчик запросов SQL).

    Вся обработка происходит на сервере 1С.

    И, естесственно, сам SQL ничего не знает о «закидонах» 1С и что там надо обработать и вытащить.

    Еще про индексы скажите…

    А то и так мало обсудили пресловутую работу 1С-сервера на ИС…

    Reply
  51. AlexO

    (47)

    вот, коллега Алекс нам щас огоньку поднесет 🙂

    а то! вижу очередного студента 🙂

    mxm2, у вас еще нет в активе обработки «прямые доступы к SQL или как убыстрить работу 1С»? :))

    Reply
  52. AlexO

    (48) mxm2,

    все это делает SQL в случае SQL базы

    SQL ничего не делает из вами перечисленного, а «тупо» (так как поставлен 1с-ом в роль тупой «животины-хранилища») выдает все запрошенное и незапрошенное, но связанное с запрошенным.

    И знать ничего не знает ни о каких RLS.

    RLS — это сугубо 1совая недоподелка, которая до сих пор в бета-тесте, без документации, и, видимо, так же тихо будет задвинута в угол скоро, т.к. у же лет 5 никаких подвижек и исправления проблем не наблюдается в нем.

    Огранчиение записей в MS SQL не было и нет, еще только планируется, и то — в простейшем виде (но время покажет, эти люди серьезные, не 1с).

    В других SQL (Оракл) уже есть более продвинутые реализации «RLS».

    Но 1С НИКОГДА не будет использовать встроенные в СУБД RLS, ибо:

    — это надо менять всю платформу напрочь

    — это надо переписывать все конфы подчистую (запросы конкретно в них)

    — в разных SQL — разная реализация RLS, причем кардинально отличающаяся от «конкурента», со своими уникальными фишками/функционалом (Postgre И Oracle, а скоро и MS SQL).

    в объектоной же модели — в любом случае приходится перебирать все

    и при выборке, и при запросах — все окончательно отбирает 1С сервер, он же принимает решение об ограничении RLS, и он же в одном случае отрабатывает с ошибкой «нет доступа» (выборки), а в другом — «ошибка запроса» (понятно где).

    Вот такая … неумелая 1С 🙂

    А «объединение запроса RLS с основным запросом» — все это делает 1С сервер.

    На стадии пост (вернее, основной, главной для 1С) обработки результата запроса/выборки.

    Так чем отличается 1с-ные выборка от запроса со стороны SQL? 🙂

    Reply
  53. mxm2

    (47) в том-то и дело (про профессию), а вот про РЛС, Вы меня право испугали, уж подумал, что пропустил чего в изменениях платформы, ан нет (все самое худшее 1с оставляет как есть )))) ).

    Reply
  54. AlexO

    (48) mxm2,

    все это делает SQL в случае SQL базы

    да, конечно, вы бы прикинули — а кто делает запросы и выборки в случае файловой базы 1С? 🙂

    Платформа мутирует под каждый случай?

    Reply
  55. kiros

    Так вот, вернемся к запрос VS объект, потратил время на полезно/бесполезную оптимизацию (и так работало никто не жаловался) списка документов (ПриПолученииДанных), к которому так жестко отфутболил коллега tango, якобы объекты именно то, что нужно для этого дела. И… как многие догадались, на практике запросы дали тройной прирос производительности VS объектов (и это без возможной еще оптимизации). Так что, как и писал раньше, все зависит от конкретных условий и желаний, где то (как и было до этого у нас) прекрасно себя чувствуют себя объекты, а при оптимизации (особенно когда надо более одного поля выскрести, а то еще и расчетик и т.п.) тут однозначно ЗАПРОСЫ.

    p.s. это касается серверной вариации, в файловой вероятнее будет не так, т.к. принцип получения данных там другой, как раз подходящий для объектов, но здесь не готов разглагольствовать, т.к. уже давно не занимался файлами.

    з.ы. И потрындеть, это мы всегда пожалуйста 🙂

    Reply
  56. mxm2

    (53) AlexO, в некоторой части позволю с Вами не согласится, а именно был такой опыт: на трехзвенке база УТ 10.3, 50 пользователей — замена сервера SQL (как железки) дала заметный прирост, «на глазок» — раза в 4. )

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

    Reply
  57. tango

    (55) kiros,

    потратил время на полезно/бесполезную оптимизацию

    что ж вы примеров кода пожалели?

    Reply
  58. mxm2

    (54) AlexO, так уж случилось что с файловой практически не работаю… объемы не те ))).

    Reply
  59. AlexO

    (56) mxm2,

    замена сервера SQL (как железки)

    сделайте наоборот — поставьте маломощный 1С и сильный SQL 🙂

    И все сразу поймете.

    А то, что наверняка ваш SQL не успевал «кормить» данными 1С сервер — так то ж понятно, что сделай даже сеть не гигабит, а 10 МбИт — жди тормозов 🙂

    Но из этого не следует, что сеть вообще как-либо участвует в обработке данных, не так ли?

    Reply
  60. AlexO

    (56) mxm2,

    по поводу того как что работает

    за работой обоих серверов понаблюдайте хотя бы в течении дня — загрузка, последовательность, передача данных по сети 😉

    ибо никто из нас не имеет исходников нашей горячо любимой платформы.

    и никогда их не будет в лицензии GPL — ибо этот день будет началом краха 1С как баблозарабатываля на невежестве.

    Reply
  61. mxm2

    (51) AlexO, одну идею (подарок) от tango уже пришлось «забраковать», возможно это и к Вашему предложению относится ))… так то я с SQL — на «Вы». Просто не отрицаю очевидный факты своего, пусть и небольшого, опыта. )

    Reply
  62. AlexO

    (63) mxm2,

    tango уже пришлось «забраковать»

    какую — использовать РАЗРЕШЕННЫЕ? не будете использовать?

    ну не используйте 🙂

    Получите «полбу» от сервера 1С 🙂

    PS: Михаил, это не тебя пришлось «забраковать», не подумай чего :))

    Reply
  63. mxm2

    (60) AlexO, не та была ситуация, а именно до внедрения трехзвенки все (SQL и 1С) вертелось в пределах одного сервера «железки», и было реально тормознуто, даже по сравнению с трехзвенкой (со старым SQL).

    кстати, замена «объектных» выборок на запросы — давно признанный официальный способ «оптимизации».

    откуда такая инфа?

    и еще все справочники предполагаются «маленькими»?

    Reply
  64. mxm2

    (64) AlexO, не передергивайте…) учитесь уважать других )…

    зы это уже бла-бла-бла )

    Reply
  65. AlexO

    (65) mxm2,

    трехзвенки все (SQL и 1С) вертелось в пределах одного сервера

    три раза «ха-ха» :))

    Начиная с 8.2 бессмысленно ставить SQL и 1С на одну машину — будут пинаться и отбирать друг у друга ресурсы, ибо SQL пытается занять столько памяти, сколько у него запросили данных (а аппетиты у 1С все время растут — растут и объемы затребованных ресурсов у SQL), а 1С-сервер вообще плевать хотел, кто там рядом крутится, и считает, что кроме него во всей вселенной больше нет никого, и берет столько, сколько позволит унести ОС: хоть памяти, хоть процессорного времени, хоть чего.

    Reply
  66. AlexO

    (66) mxm2,

    я не передергиваю, а про подарок спрашиваю 🙂

    Reply
  67. mxm2

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

    и где ответ на уточняющие вопросы: повторю их по памяти:

    кстати, замена «объектных» выборок на запросы — давно признанный официальный способ «оптимизации».

    откуда такая инфа?

    и еще все справочники предполагаются «маленькими»?

    Reply
  68. AlexO

    (65) mxm2,

    откуда такая инфа?

    задайте на партнерке вопрос «медленно выборка идет…» — и сразу узнаете источник инфы 🙂

    и еще все справочники предполагаются «маленькими»?

    не «все», а есть много справочников, из которых делаются выборки, но они отнюдь не такие монстры, каким обычно становится справочник Номенклатуры, и — реже, — Контрагентов.

    И вы бы не на запросы к справочникам (которые хоть и «родственники» по структуре документам, а по смыслу — регистрам, но менее гибче первых и тормознее последних) смотрели в первую очередь, если хотите чему-то научиться на поле 1С, а на запросы к регистрам всевозможных форм и размеров.

    Reply
  69. AlexO

    (69) mxm2,

    так это настраивается ).

    видимо, память динамически подсовывается в плату? 😀

    На что вы настраиваетесь, когда «настраиваете» сервер?

    Reply
  70. mxm2

    (68) AlexO,

    29.

    tango

    31.10.12 12:35

    (28) mxm2, хорошая тема для публикации, дарю 🙂

    предмет чуть раньше ) и сразу «за».

    Reply
  71. AlexO

    (71) mxm2,

    т.е. вы не поняли, что Михаил предлагает в рамках своей будущей публикации разобраться с RLS, и, в частности, с РАЗРЕШЕННЫЕ? 🙂

    Reply
  72. mxm2

    (70) AlexO,

    задайте на пранерке вопрос «медленно выборка идет…» — и сразу узнаете источник инфы 🙂

    что за такой «пранерк»? не яндекс случаем?

    http://yandex.ru/yandsearch?text=%D0%BC%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE+%D0%B2­%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B0+%D0%B8%D0%B4%D0%B5%D1%8­2&lr=51

    Reply
  73. mxm2

    (73) AlexO, а Вы с Михаилом общяетесь вне эфира инфостарта? ведь это ниоткуда не следует.

    Reply
  74. AlexO

    (74) mxm2,

    это парнерский сайт 1С

    http://partners.v8.1c.ru/

    умейте правильно переставить буквы 🙂

    Reply
  75. AlexO

    (75) mxm2,

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

    Reply
  76. mxm2

    (72) AlexO, если памяти достаточно, то все работает быстро и не конфликутет, любой объем памяти требует настройки со стороны сервера 1с и SQL (MS) в пределах одного сервера (железки), как раз чтобы не было конфликтов и 1с сервер не выпадал в своп.

    Reply
  77. mxm2

    (76) AlexO,

    умейте правильно переставить буквы 🙂

    — моя дислексия отличается от Вашей )

    и нет у меня «NFR-версии комплекта» — «любитель» я по Вашей классификации )

    Reply
  78. AlexO

    (80) mxm2,

    у меня тоже нет, я просто «партнер» :))

    ну, или без кавычек партнер 🙂

    Reply
  79. AlexO

    (79) mxm2,

    если памяти достаточно

    на 8.2.15.317-318 еще не работали?

    крайне советую, причем с одновременной установкой на сервер 64 гигов памяти и более 🙂

    и 1с сервер не выпадал в своп.

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

    Reply
  80. kiros

    (57)

     Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    Запрос=Новый Запрос(«ВЫБРАТЬ
    | РасходныйКассовыйОрдерРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств.Наименование КАК Статья,
    | ВЫБОР
    |  КОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка.Контрагент ССЫЛКА Справочник.ФизическиеЛица
    |   ТОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка.Контрагент.Должность
    |  ИНАЧЕ «»»»
    | КОНЕЦ КАК Должность
    |ИЗ
    | Документ.РасходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа
    |ГДЕ
    | РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &Ссылка
    | И РасходныйКассовыйОрдерРасшифровкаПлатежа.НомерСтроки = 1″);
    Запрос.УстановитьПараметр(«Ссылка»,ОформлениеСтроки.ДанныеСтроки.Ссылка);
    Результат=Запрос.Выполнить();
    Если не Результат.Пустой() Тогда
    СтрокаРезультата=Результат.Выгрузить().Получить(0);
    ОформлениеСтроки.Ячейки.Статья.УстановитьТекст(СтрокаРезультата.Статья);
    ОформлениеСтроки.Ячейки.Должность.УстановитьТекст(СтрокаРезультата.Должность);
    КонецЕсли;
    КонецЦикла;
    

    Показать

    это через запрос, а вот через объект

     Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    Попытка
    ОформлениеСтроки.Ячейки.Статья.УстановитьТекст(ОформлениеСтроки.ДанныеСтроки.Ссылка.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств);
    Исключение
    КонецПопытки;
    Если ОформлениеСтроки.ДанныеСтроки.Контрагент<>Неопределено Тогда
    Если ТипЗнч(ОформлениеСтроки.ДанныеСтроки.Контрагент) = Тип(«СправочникСсылка.ФизическиеЛица») Тогда
    ОформлениеСтроки.Ячейки.Должность.УстановитьТекст(ОформлениеСтроки.ДанныеСтроки.Контрагент.Должность);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    

    Показать

    и через замер производительности (2-запрос, 3-объект)

    ]

    Reply
  81. AlexO

    (85) kiros,

    а через УФ формы? Возможно, будете неприятно удивлены новыми знаниями… 🙁

    Reply
  82. tango

    (86) AlexO, спалил 🙂

    Reply
  83. mxm2

    (83) AlexO, возможно на указанном не пробывали… но работает на 8.2.16.352.) памяти всего 24, server 64 бит настроено 2 рабочих процесса.

    Reply
  84. AlexO

    (88)

    прости, могу см-ами отдать :))

    Reply
  85. AlexO

    (89) mxm2,

    8.2.16.352

    ну так скорей ставьте 8.2.15.317! :)))

    Reply
  86. kiros

    (86) AlexO, новым знаниям я всегда приятно удивляюсь. УФ это управляемые? до них еще даже шаловливые ручки не допускал, но наслышан, что это другая песня 🙂

    Reply
  87. logos

    (54) AlexO, Спасибо, ещё одна пелена спала с глаз 🙂

    Я наивный тоже думал что этот «РЛС» пристраивается в условие запроса к БД или джойн дополнительный там крячит, ан нет простейший тест на профайлере показал как обстоят дела на самом деле 🙂

    Reply
  88. AlexO

    (93) kiros,

    это не просто другая песня, это песня задом наперед с одновременным сальто 🙂

    Причем часто тормознутее обычных, хотя якобы призваны как раз быть «тоньше» их.

    Reply
  89. AlexO

    (94) logos,

    киньте свежий пример запроса «с РЛС» сюда, а то народ заволнуется — «что за профайлер, там можно править РЛС-запросы, да?!» :))

    Reply
  90. AlexO

    (94) logos,

    что этот «РЛС» пристраивается в условие запроса к БД

    просто никто даже не может прикинуть стоп-вопрос себе чисто с другой стороны — «а откуда знаменитые тормоза в 1С при использвоании RLS, если все гладко идет в обработку на SQL-сервере?!

    Reply
  91. logos

    (95) AlexO, Да ничего интересного не будет. Простейший запрос в консоли запросов, получить все ссылки из справочника «Организации».

    Первый запуск был с полными правами, второй — с ограничениями. Конфа — БП 2.0.41, рлс штатные. SQL запрос 1 в 1.

    ВЫБРАТЬ
    Организации.Ссылка
    ИЗ
    Справочник.Организации КАК Организации
    

    В обоих случаях транслировался в:

    SELECT
    T1._IDRRef
    FROM _Reference52 T1 WITH(NOLOCK)
    

    Результаты показывать, не буду, стесняюсь. Но смысл, что минимум УИДы он извлекает, чего бы не было при RLS на уровне БД

    Reply
  92. logos

    (98) logos, Прошу прощения, ошибочка вышла. В случае ограниченной учетки был другой запрос:

    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Организации.Ссылка
    ИЗ
    Справочник.Организации КАК Организации
    
    Reply
  93. tango

    (90) AlexO, торговля какая-то вялая. не сезон. но предложение принято 🙂

    Reply
  94. tango

    (90) AlexO, ну, вот и случай представился. приму в подарок пару сотен

    Reply
  95. sanfoto

    (67) AlexO,

    со всеми Вашими высказываниями касательно «Сервера 1С» +»SQL» — и то что он тупо юзает SQL как хранилище Абсолютно согласен))

    Но не совсем согласен с ниже описанной Вашей цитатой))

    три раза «ха-ха» :))

    Начиная с 8.2 бессмысленно ставить SQL и 1С на одну машину — будут пинаться и отбирать друг у друга ресурсы

    По моим данным можно настроить для примера — 2-ух процессорную схему:

    (на основе процессоров и операционных систем поддерживающих NUMA-узлы)

    1)Настраиваем для SQL -использование ядер только «NUMA-узла №2» + фиксируем ему(SQL) МАКС=МИН Объем RAM = примерно 1/2 всей оперативки.

    2)Настраиваем запуск сервера 1с для запуска только на ядрах «NUMA-узла №1» — это уже настраивается несколько нестандартно))

    PS:

    Если вы укажите РЕАЛЬНЫЕ конфигурации железа на сравнимых Процессорах — в РАЗДЕЛЕННОМ по СЕТИ варианте и чтобы производительность не падала в сравнении со ВСЕ В ОДНОМ))) тогда изменю свое мнение.

    Reply
  96. sanfoto

    +к (136)

    т.к. Вы же сами утверждаете что 1С использует SQL тупо как хранилище — я немного перефразирую))

    — это т.е. грубо -«тупо как файловую систему» (далее сокращенно ФС) —

    и следовательно локальный доступ к ФС будет таки быст

    Reply
  97. mxm2

    (136) sanfoto, у меня без разузлования настроено, и никто никого не пиннает, настроено ограничение по используемой памяти MS SQL и соответственно для рабочих процессов сервера 1С. Ситуации выпадения сервера 1С в своп — не наблюдается при 24 Гб ОЗУ.

    Reply
  98. AlexO

    (136) sanfoto,

    Если вы укажите РЕАЛЬНЫЕ конфигурации железа

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

    На основе знакомства с десятками НАСТОЯЩИХ серверов, работающих под 1С — скажу, что уживаться они не могут под одной «крышей» с SQL, т.к. 1С совершенно неоптимизирована, и сколько ей не дай — все мало.

    А когда они на одном железе крутятся — то разделение — это первое, что делается для хоть какого-то расшевеления 1С.

    Т.е. вопрос поставить «более мощный, с 128 гигов памяти, с новейшим процепссором» НИКОГДА НЕ СТОИТ — ибо бессмысленен, если сейчас уже все тормозит на одном.

    (155) sanfoto,

    просто вопрос RLS меня оччень интересует.. на днях запустим в УПП))

    ну так и начните с азов, профайлер ничего вам по РЛС не покажет.

    Reply
  99. AlexO

    (141) mxm2,

    и никто никого не пиннает

    а когда никто в 1с-ке и не работает — то и 1с-ка вполне себе такая вся причесанная и красивая.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *