gifts2017

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

Опубликовал Михаил Ражиков (tango) в раздел Программирование - Практика программирования

Использование 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 сек

 

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Выгрузка тестовой базы
.dt 924,59Kb
25.10.12
18
.dt 924,59Kb 18 Скачать
ПриПолученииДанных
.epf 8,08Kb
01.11.12
3
.epf 8,08Kb 3 Скачать

См. также

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Подписаться Добавить вознаграждение

Комментарии

1. Михаил Ражиков (tango) 25.10.12 16:00
см. часть вторую - результат ПриПолученииДанных двумя способами - запрос медленнее объекта в 30 раз
2. Альтаир (Altair777) 25.10.12 16:54
Просто в 8-ке через запрос стало как-то привычнее выбирать :)
Несомненно, в 7-ой версии с запросами было просто мучение. А вот в 8-ке такие выборки можно писать в реал-тайме в консоли запросов и вживую видеть результат.
3. Михаил Ражиков (tango) 25.10.12 17:01
(2) Altair777, ну да, привычка. ощущение избранности: я вертел СКД!
а оказывается, что надо выбирать - где объект лучше, где - запрос
4. Михаил Ражиков (tango) 25.10.12 17:02
(2) Altair777,
можно привыкнуть в реалтайме пользоваться таблом :)
5. Михаил Ражиков (tango) 25.10.12 18:17
таки что-то не то
не обходит эта схема теста проблемы кеша
надо сделать накопление результата на оригинальных ссылках во всей серии
6. Роман Романов (romansun) 26.10.12 01:13
ох, наброс так наброс...

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


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


это совершенно разные вселенные, между ними только что язык написания кода одинаков..
7. Александр Рытов (Арчибальд) 26.10.12 08:30
Если отвлечься от конкретных деталей реализации, по тексту запроса строится (отфильтрованный) массив индексов для файла(ов) .dbf, а выполнение запроса - это цикл по этому массиву. Объектная модель использует предопределенные (готовые) индексные массивы, которые требуется только отфильтровать. Естественно, эта модель хорошо работает только в "простых" случаях.
MaxDavid; hogik; Hany; +3 Ответить 3
8. Михаил Ражиков (tango) 26.10.12 10:30
Спасибо за поддержку и каменты, коллеги.

Думаю, попробовать сравнить ПриПолученииДанных в форме списка
9. al petrov (petrov_al) 27.10.12 13:05
(7) Арчибальд, а можно поподробнее об этом..."по тексту запроса строится (отфильтрованный) массив индексов для файла(ов) .dbf, а выполнение запроса - это цикл по этому массиву"...или ссылочку по этой теме.
10. Денис Харченко (nomadon) 27.10.12 13:25
11. Александр Зубцов (iov) 27.10.12 15:39
(10) Это так похвастался? Или просто мимо проходил? :)
12. Владимир (hogik) 27.10.12 18:07
(7)
Присоединяюсь к просьбе из (9) сообщения. ;-)
И еще хочется узнать - почему слово "простых" заключено в апострофы?
Думаю, почти (без привнесенных извращений "запросным" ЯМД) во всех случаях эта модель работает хорошо.
А "если отвлечься от конкретных деталей реализации"(с), то в "объектной модели" индексы массивы индексов не строятся по "тексту запроса"(с), а существуют (определены) изначально в схеме базы данных...
P.S. Хотя, про "массив индексов" - это действительно "тонкости и детали". ;-)
13. Михаил Ражиков (tango) 28.10.12 11:50
ну да, ну да
документацию почитать полезно бывает
Однако запрос будет выполнять считывание из базы данных при каждом вызове. Соответственно, при многократном обращении к одним и тем же данным будет выполняться многократное считывание. Этого можно избежать, обращаясь к свойствам ссылки. В этом случае используется кэширование объектов и в определенном интервале времени при повторном обращении к данным объекта не будет выполняться повторное считывание.


актуально остается попробовать запрос<>объект при получении данных
14. Михаил Ражиков (tango) 28.10.12 12:23
еще читаем доку
При использовании запроса вся считанная информация передается на клиентский компьютер и размещается в оперативной памяти. Если требуется обработать очень большие объемы информации, то можно рекомендовать использовать выборку. Выборка не предоставляет широких возможностей по отбору и упорядочиванию информации и считывает все поля и табличные части объектов, но зато она выполняет считывание порциями и, соответственно, может использоваться для обработки любых объемов данных без помещения их в оперативную память.

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

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

(9) Ссылку не дам. Я написал это "с точки зрения банальной эрудиции". Структура данных (реляционная модель) именно на такие обращения и заточена.
16. Владимир (hogik) 29.10.12 16:16
(15)
"Я ж и говорю"(с)
Я уже потом понял Вашу формулировку. ;-)
Возможно, что перед словом "Объектная" должно стоять "А".
Но, мой вопрос про апострофы остался без Вашего ответа...
17. Кирилл (kiros) 31.10.12 09:17
Считаю автор вводит в заблуждение молодые неопытные головы, в самом начале статьи надо крупно писать "ФАЙЛОВАЯ ВЕРСИЯ", этого не увидел, засомневался: "Может от жизни отстал". Для файловой базы согласен, и даже больше скажу, что на практике такие заскоки платформы были (с переходом на 8.2 начальные релизы), что запросы на порядок медленнее отрабатывали. НО, не забываем про молодые горячие головы, которые сейчас возьмут и в клиент-серверных вариациях начнут такое "колбасить", и с пеной у рта доказывать что вот люди писали, что так быстрее, за что будут незамедлительно отправлены восвояси учить мат. часть! И не забываем что все маленькое когда-то вырастает, и что тогда? переписывать :0
18. Михаил Ражиков (tango) 31.10.12 10:06
(17) kiros, ценность вашей оценки... нет, не так.
ваша оценка имела бы некоторую ценность, сопроводись она каким-нито тестом
19. Кирилл (kiros) 31.10.12 10:16
(18) tango, я написал, что справедливость этой статьи относится к ФАЙЛОВОЙ ВЕРСИИ БД или этого ПРОСТЕЙШЕГО случая, если это указать в тексте статьи ВНАЧАЛЕ И ЯВНО сразу поставлю "+", а так, считаю что статья вводит в заблуждение, особенно если прочитать не сильно вчитываясь.
20. Михаил Ражиков (tango) 31.10.12 10:25
(19) kiros, я, наверное, плохо выразил мысль.
статья сопровождена конфигурацией, которую любой желающий может развернуть у себя хоть в файло, хоть в сервер, и погонять своими ручками.

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

вот я и говорю - бла-бла-бла стоит недорого
21. Кирилл (kiros) 31.10.12 11:23
(20) tango, весь смысл публикации свелся к последнему предложению, т.е. для каждого конкретного случая, базы и задачи. (пришлось перечитывать навеявшую публикацию) Тогда да, в таком случае красота, только эта красота далека от жизни, на практике такая задача одна на ... я даже не припомню были, ли у меня такие задачи.
22. mxm2 mxm2 (mxm2) 31.10.12 11:49
Не забываем, что запросом гораздо проще контролировать права (предложение "Разрешенные"), а также то, что запросы быстрее работают даже на меньших выборках в условиях многопользовательской работы (для этого и рекомендуется SQL). Ну и субъективно: запросы более наглядны.
23. Михаил Ражиков (tango) 31.10.12 12:22
(22) mxm2,
запросы более наглядны

часто ли вам приходилось "парсить" запросы в ЗуПе, коллега?
philya; vladir; +2 Ответить
24. Михаил Ражиков (tango) 31.10.12 12:26
(22) mxm2,
запросом гораздо проще контролировать права (предложение "Разрешенные")

утверждаете ли вы, что объектный доступ игнорирует ограничения РЛС? если нет, по поясните. пожалуйста, это свое "проще"
25. Михаил Ражиков (tango) 31.10.12 12:27
быстрее работают даже на меньших выборках в условиях многопользовательской работы

ну, собственно, см. (20)
26. mxm2 mxm2 (mxm2) 31.10.12 12:31
в ЗиУПе запросы конечно - громоздкие, но, как привило, там почти все понятно, если предварительно распечатать их на надцати листах и потом "карандашиком" произвести "анализ". Иногда даже, то, что запрятано в этих запросах, на мой взгляд, должно быть сделано в пределах объектной модели, но не думаю, что реализация будет более понятной и менее громоздкой.
27. Михаил Ражиков (tango) 31.10.12 12:31
(21) kiros,
эта красота далека от жизни

было предложено для эксперимента ПриПолученииДанных - задача весьма востребована (трудно даже придумать более востребованную), и как раз попадает в область преимущества объекта
28. mxm2 mxm2 (mxm2) 31.10.12 12:32
(24) tango, а разве не игнорирует? (и не выдает ошибку?)
29. Михаил Ражиков (tango) 31.10.12 12:35
(28) mxm2, хорошая тема для публикации, дарю :)
30. Алекс Ю (AlexO) 31.10.12 12:38
(28) mxm2,
РЛС ограничивает доступ на уровне записи в базе, а не на уровне "всевдообъектов" 1С.
Чтобы получить "объект" 1С - нужно сначала прочитать его из базы. А этого как раз и не даст сделать ограничение РЛС.
31. mxm2 mxm2 (mxm2) 31.10.12 12:47
(25) tango, про тестирование - ничего сказать не могу. Да. Но есть такой опыт:

1. работа пользователей в количестве 10-20 человек субъектовно ощущается более конфортной при использовании SQL базы вместо файловой.
2. при активной работе пользоваталей на SQL базе производительность запросов напрямую зависит от производительности SQL сервера, в то время как объектная модель менее подвержена этому влиянию, поскольку исполняется в пределах "Сервера 1С".

ЗЫ. будет время оттестю Вашу систему.
32. mxm2 mxm2 (mxm2) 31.10.12 13:34
(30) AlexO, (29) tango, ... прикольно, усомнился даже, но вот код:

Выборка = Справочники.Партнеры.Выбрать();
Пока Выборка.Следующий() Цикл
Стр = Стр + Выборка.Наименование;
КонецЦикла;


в условиях ограничения прав дает ошибку "У пользователя недостаточно прав на исполнение операций с базой данных"
33. Михаил Ражиков (tango) 31.10.12 14:21
(32) mxm2, да, вы правы, РАЗРЕШЕННЫЕ перекладывает проблемы на платформу.
но!
1. общим местом являются тормоза при рлс
2. в языке есть методы, позволяющие разрулить ситуацию, ПараметрыДоступа и банальная попытка

так что опять - фифти-фифти, решаем по месту
34. mxm2 mxm2 (mxm2) 31.10.12 14:34
(33) tango, "Попытка" - сама тормозная, причем исполнятся будет пообъектно (последнее касается и "ПараметровДоступа"), что не есть гуд, в сравнении с запросом. решение 50/50 - приводит к тому, что придется вообще 2 кода писать (и запросом и объектом), и использовать в зависимости от предполагаемого количества элементов (как-то мне не нравится эта мысль )) ), и потом как перед заказчиком обуславливать, что мол на это нужно в 2 раза больше времени, чтобы работало "быстро".
35. Михаил Ражиков (tango) 31.10.12 14:37
(34) mxm2,
перед заказчиком обуславливать
эк вас торкнуло-то, батенька
36. Михаил Ражиков (tango) 31.10.12 14:41
кроме номенклатуры есть много "простых" справочников, где больше пары десятков записей не бывает
37. Михаил Ражиков (tango) 31.10.12 14:42
кстати, "объяснять" клиенту, что тормоза из-за рлс - да, реально приходилось
38. mxm2 mxm2 (mxm2) 31.10.12 14:48
(35) tango, не то слово... + позволю высказать теоретическое соображение: т.к. в условиях работы более мощного SQL сервера запросы выполняются быстрее по сравнению с менее мощным, аналогично как и в случае использования более мощной системы на которой расположен "Сервер 1с" - пообъектной перебор будет быстрее чем в условиях использования менее мощной, то задача еще более усложняется, т.к. появляется зависимость от конкретного оборудования, на котором все это дело "исполняется"
39. mxm2 mxm2 (mxm2) 31.10.12 14:50
(36) tango, про микро справочники речь и не идет, но ведь слишком часто их приходится "вязать" с большими.
40. Михаил Ражиков (tango) 31.10.12 14:52
(38) mxm2, ну, хромая лошадка по имени "кластер 1С" все равно вынуждена транслировать обращения клиента, хоть "объектные", хоть "запросные" в мелкомягкий (или другой) диалект
41. Михаил Ражиков (tango) 31.10.12 14:53
(39) mxm2, и вот здесь мы (плавно не) переходим от бла-бла-бла к более-менее моделирующим реал тестам
42. Михаил Ражиков (tango) 31.10.12 14:55
вообще, по поводу трехзвенки, столько долго выжидаемой 1снегами, получилась очередная опа
чё б ни ограничиться клиентами, работающими с SQL?
**
ну, не так, чтобы как 77, а как у людей
43. mxm2 mxm2 (mxm2) 31.10.12 14:56
(37) tango,
кстати, "объяснять" клиенту, что тормоза из-за рлс - да, реально приходилось

ага и даже "справлятся" с ними приходилось, иногда даже "оптимизацией" запросов )), но что греха таить - наращивание серверной мощности - универсальный ответ, хоть и не дешевый.
44. mxm2 mxm2 (mxm2) 31.10.12 15:14
(42) tango, согласен со всем, но выбора нет... или это предложение спрыгнуть с 1С?
про бла-бла-бла тоже... но это человчья сущность, "пивом не корми а дай пообщаться" (с)
45. Алекс Ю (AlexO) 31.10.12 15:17
(32) mxm2,
в условиях ограничения прав дает ошибку

все правильно, а в чем противоречие?
Вы не знаете, как формируются выборки, а как - запросы в 1С?
(33) tango,
РАЗРЕШЕННЫЕ перекладывает проблемы на платформу

они ничего не перекладывают, это только инструкция "не ругаться на "нечитаемые" записи" в результатах запросов :)
Ибо обратное "как в выборках" невозможно - отругаться "нет прав", когда выполняется запрос. Вот и выход либо ошибка выполнения запроса, либо - РАЗРЕШЕННЫЕ.
46. Алекс Ю (AlexO) 31.10.12 15:18
(40) tango,
кластер 1С

да и не кластер это в общем, а авторассовывание клиентских подключений по разным машинам.
47. Михаил Ражиков (tango) 31.10.12 15:21
(44) mxm2, что значит "спрыгнуть"?
лишать себя гарантированного куска, сменив свою специализацию? нафиг-нафиг
перевести бухию?.. просто не на что, не зачем, не реально, не наше дело, да и просто глупо
короче, жрать кактус - есть такая профессия

а потрындеть - это да. с другой стороны, огоньку не хватает :)
**
вот, коллега Алекс нам щас огоньку поднесет :)
48. mxm2 mxm2 (mxm2) 31.10.12 15:22
(45) AlexO, "разрешенные" - делает объединие с неким запросом по "правам" в результате выбираются только "нужные, доступные пользователю" элементы (все это делает SQL в случае SQL базы). в объектоной же модели - в любом случае приходится перебирать все и из них использовать доступные.
49. Михаил Ражиков (tango) 31.10.12 15:26
(48) mxm2, в объекте кто генерит отлуп, "кластер" или скл?
**
вы уверены, что объединение "правного" запроса и запроса к данным выполняется не в "кластере"?
50. Алекс Ю (AlexO) 31.10.12 15:28
(38) mxm2,
т.к. в условиях работы более мощного SQL сервера запросы выполняются быстрее по сравнению с менее мощным, аналогично как и в случае использования более мощной системы на которой расположен "Сервер 1с" - пообъектной перебор будет быстрее

ничего подобного.
Никакой прямой связи "запросы - это только SQL, объекты - это только 1С" нет и не было.
На самом деле вся производительность зависит на 90% от производительнотси 1С-сервера, а SQL уже вторичен.
Все - и запросы, и выборки, и объекты, и все-все-все в 1С обрабатывает 1С-сервер (платформа).
А SQL дает только "сырые" данные, причем в объеме, зачастую много-сотен-раз-кратно превышающими нужные данные.
Ибо 1С-севрер не может путью оптимизировать запрос к SQL, и совсем практически не использует SQL как СУБД, а только - как хранилище таблиц с данными (исключая простейшие запросы, которые, можно сказать, один-в-один ложатся из 1С через её транслятор в обработчик запросов SQL).
Вся обработка происходит на сервере 1С.
И, естесственно, сам SQL ничего не знает о "закидонах" 1С и что там надо обработать и вытащить.
Еще про индексы скажите...
А то и так мало обсудили пресловутую работу 1С-сервера на ИС...
51. Алекс Ю (AlexO) 31.10.12 15:29
(47) tango,
вот, коллега Алекс нам щас огоньку поднесет :)

а то! вижу очередного студента :)
mxm2, у вас еще нет в активе обработки "прямые доступы к SQL или как убыстрить работу 1С"? :))
52. mxm2 mxm2 (mxm2) 31.10.12 15:39
(47) tango, в том-то и дело (про профессию), а вот про РЛС, Вы меня право испугали, уж подумал, что пропустил чего в изменениях платформы, ан нет (все самое худшее 1с оставляет как есть )))) ).
53. Алекс Ю (AlexO) 31.10.12 15:39
(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? :)
54. Алекс Ю (AlexO) 31.10.12 15:44
(48) mxm2,
все это делает SQL в случае SQL базы

да, конечно, вы бы прикинули - а кто делает запросы и выборки в случае файловой базы 1С? :)
Платформа мутирует под каждый случай?
55. Кирилл (kiros) 31.10.12 15:48
Так вот, вернемся к запрос VS объект, потратил время на полезно/бесполезную оптимизацию (и так работало никто не жаловался) списка документов (ПриПолученииДанных), к которому так жестко отфутболил коллега tango, якобы объекты именно то, что нужно для этого дела. И... как многие догадались, на практике запросы дали тройной прирос производительности VS объектов (и это без возможной еще оптимизации). Так что, как и писал раньше, все зависит от конкретных условий и желаний, где то (как и было до этого у нас) прекрасно себя чувствуют себя объекты, а при оптимизации (особенно когда надо более одного поля выскрести, а то еще и расчетик и т.п.) тут однозначно ЗАПРОСЫ.
p.s. это касается серверной вариации, в файловой вероятнее будет не так, т.к. принцип получения данных там другой, как раз подходящий для объектов, но здесь не готов разглагольствовать, т.к. уже давно не занимался файлами.
з.ы. И потрындеть, это мы всегда пожалуйста :)
56. mxm2 mxm2 (mxm2) 31.10.12 15:49
(53) AlexO, в некоторой части позволю с Вами не согласится, а именно был такой опыт: на трехзвенке база УТ 10.3, 50 пользователей - замена сервера SQL (как железки) дала заметный прирост, "на глазок" - раза в 4. )

по поводу того как что работает - это все домыслы (что с Вашей, что с моей сторны), ибо никто из нас не имеет исходников нашей горячо любимой платформы.
57. Михаил Ражиков (tango) 31.10.12 15:51
(55) kiros,
потратил время на полезно/бесполезную оптимизацию

что ж вы примеров кода пожалели?
58. mxm2 mxm2 (mxm2) 31.10.12 15:52
(54) AlexO, так уж случилось что с файловой практически не работаю... объемы не те ))).
59. Алекс Ю (AlexO) 31.10.12 15:53
(55) kiros,
И... как многие догадались, на практике запросы дали тройной прирос

об этом уже давно было завлено самой 1С в лице её глашатаев от обучения :)
Потому что преобразование запрос-данные быстрее, чем объект-запрос-данные, тем более - 1С так и не научилась (и, видимо, никогда уже не научится) делать правильные "объекты" и в силу их "правильности" (читай, структурированности и "прозрачности") - очень быстро их обрабатывать.
в файловой вероятнее будет не так

в файловом же варианте все упирается в структуру хранения, реализованную в 1CD, которая тоже непонятно на какой свалке была взята :).
Поэтому там без особой разницы - запросы, объекты, - т.к. нет основного преимущества, которые дают запросы: 1С - ЭТО НЕ СУБД!!
60. Алекс Ю (AlexO) 31.10.12 15:55
(56) mxm2,
замена сервера SQL (как железки)

сделайте наоборот - поставьте маломощный 1С и сильный SQL :)
И все сразу поймете.
А то, что наверняка ваш SQL не успевал "кормить" данными 1С сервер - так то ж понятно, что сделай даже сеть не гигабит, а 10 МбИт - жди тормозов :)
Но из этого не следует, что сеть вообще как-либо участвует в обработке данных, не так ли?
61. Алекс Ю (AlexO) 31.10.12 15:57
(55) kiros,
и это без возможной еще оптимизации

кстати, замена "объектных" выборок на запросы - давно признанный официальный способ "оптимизации".
62. Алекс Ю (AlexO) 31.10.12 15:59
(56) mxm2,
по поводу того как что работает

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

и никогда их не будет в лицензии GPL - ибо этот день будет началом краха 1С как баблозарабатываля на невежестве.
63. mxm2 mxm2 (mxm2) 31.10.12 16:01
(51) AlexO, одну идею (подарок) от tango уже пришлось "забраковать", возможно это и к Вашему предложению относится ))... так то я с SQL - на "Вы". Просто не отрицаю очевидный факты своего, пусть и небольшого, опыта. )
64. Алекс Ю (AlexO) 31.10.12 16:03
(63) mxm2,
tango уже пришлось "забраковать"

какую - использовать РАЗРЕШЕННЫЕ? не будете использовать?
ну не используйте :)
Получите "полбу" от сервера 1С :)
PS: Михаил, это не тебя пришлось "забраковать", не подумай чего :))
65. mxm2 mxm2 (mxm2) 31.10.12 16:09
(60) AlexO, не та была ситуация, а именно до внедрения трехзвенки все (SQL и 1С) вертелось в пределах одного сервера "железки", и было реально тормознуто, даже по сравнению с трехзвенкой (со старым SQL).

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


откуда такая инфа?
и еще все справочники предполагаются "маленькими"?
66. mxm2 mxm2 (mxm2) 31.10.12 16:12
(64) AlexO, не передергивайте...) учитесь уважать других )...

зы это уже бла-бла-бла )
67. Алекс Ю (AlexO) 31.10.12 16:16
(65) mxm2,
трехзвенки все (SQL и 1С) вертелось в пределах одного сервера

три раза "ха-ха" :))
Начиная с 8.2 бессмысленно ставить SQL и 1С на одну машину - будут пинаться и отбирать друг у друга ресурсы, ибо SQL пытается занять столько памяти, сколько у него запросили данных (а аппетиты у 1С все время растут - растут и объемы затребованных ресурсов у SQL), а 1С-сервер вообще плевать хотел, кто там рядом крутится, и считает, что кроме него во всей вселенной больше нет никого, и берет столько, сколько позволит унести ОС: хоть памяти, хоть процессорного времени, хоть чего.
68. Алекс Ю (AlexO) 31.10.12 16:17
(66) mxm2,
я не передергиваю, а про подарок спрашиваю :)
69. mxm2 mxm2 (mxm2) 31.10.12 16:21
(67) AlexO, трехзвенки были еще на 8.1 (даааавно это было). а по поводу пиннают друг-друга по памяти, так это настраивается ). причем это несколько раз в разных вариантах описано на инфостарте.

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

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


откуда такая инфа?
и еще все справочники предполагаются "маленькими"?
70. Алекс Ю (AlexO) 31.10.12 16:22
(65) mxm2,
откуда такая инфа?

задайте на партнерке вопрос "медленно выборка идет..." - и сразу узнаете источник инфы :)
и еще все справочники предполагаются "маленькими"?

не "все", а есть много справочников, из которых делаются выборки, но они отнюдь не такие монстры, каким обычно становится справочник Номенклатуры, и - реже, - Контрагентов.
И вы бы не на запросы к справочникам (которые хоть и "родственники" по структуре документам, а по смыслу - регистрам, но менее гибче первых и тормознее последних) смотрели в первую очередь, если хотите чему-то научиться на поле 1С, а на запросы к регистрам всевозможных форм и размеров.
71. mxm2 mxm2 (mxm2) 31.10.12 16:23
(68) AlexO,

29.
tango
31.10.12 12:35

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


предмет чуть раньше ) и сразу "за".
72. Алекс Ю (AlexO) 31.10.12 16:23
(69) mxm2,
так это настраивается ).

видимо, память динамически подсовывается в плату? :D
На что вы настраиваетесь, когда "настраиваете" сервер?
73. Алекс Ю (AlexO) 31.10.12 16:25
(71) mxm2,
т.е. вы не поняли, что Михаил предлагает в рамках своей будущей публикации разобраться с RLS, и, в частности, с РАЗРЕШЕННЫЕ? :)
74. mxm2 mxm2 (mxm2) 31.10.12 16:26
(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
75. mxm2 mxm2 (mxm2) 31.10.12 16:28
(73) AlexO, а Вы с Михаилом общяетесь вне эфира инфостарта? ведь это ниоткуда не следует.
76. Алекс Ю (AlexO) 31.10.12 16:30
(74) mxm2,
это парнерский сайт 1С
http://partners.v8.1c.ru/
умейте правильно переставить буквы :)
77. Алекс Ю (AlexO) 31.10.12 16:31
(75) mxm2,
общаемся и в личке, но в данном случае это видно из контекста обсуждаемого вопроса и предлагаемой темы для статьи.
78. Михаил Ражиков (tango) 31.10.12 16:31
(59) AlexO,
реализованную в 1CD, которая тоже непонятно на какой свалке была взята

FAT?
79. mxm2 mxm2 (mxm2) 31.10.12 16:33
(72) AlexO, если памяти достаточно, то все работает быстро и не конфликутет, любой объем памяти требует настройки со стороны сервера 1с и SQL (MS) в пределах одного сервера (железки), как раз чтобы не было конфликтов и 1с сервер не выпадал в своп.
80. mxm2 mxm2 (mxm2) 31.10.12 16:34
(76) AlexO,
умейте правильно переставить буквы :)

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

и нет у меня "NFR-версии комплекта" - "любитель" я по Вашей классификации )
81. Алекс Ю (AlexO) 31.10.12 16:35
(78) tango,
структура таблиц в 1CD не FAT :)
но крайне похожа на неё своей громозкостью, падениесклонностью и тормознутостью.
Не говоря уже про впадение в ступор при сетевой работе нескольких и более пользователей.
82. Алекс Ю (AlexO) 31.10.12 16:36
(80) mxm2,
у меня тоже нет, я просто "партнер" :))
ну, или без кавычек партнер :)
83. Алекс Ю (AlexO) 31.10.12 16:37
(79) mxm2,
если памяти достаточно

на 8.2.15.317-318 еще не работали?
крайне советую, причем с одновременной установкой на сервер 64 гигов памяти и более :)
и 1с сервер не выпадал в своп.

в космос он выпадает, причем в район черной дыры, не меньше.
84. Алекс Ю (AlexO) 31.10.12 16:39
(78) tango,
или имелось ввиду, что "там же, где и FAT"? :))
тогда да, именно там :)))
85. Кирилл (kiros) 31.10.12 16:40
(57) tango,
	Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		Запрос=Новый Запрос("ВЫБРАТЬ
		                    |	РасходныйКассовыйОрдерРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств.Наименование КАК Статья,
		                    |	ВЫБОР
		                    |		КОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка.Контрагент ССЫЛКА Справочник.ФизическиеЛица
		                    |			ТОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка.Контрагент.Должность
		                    |		ИНАЧЕ """"
		                    |	КОНЕЦ КАК Должность
		                    |ИЗ
		                    |	Документ.РасходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа
		                    |ГДЕ
		                    |	РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &Ссылка
		                    |	И РасходныйКассовыйОрдерРасшифровкаПлатежа.НомерСтроки = 1");
		Запрос.УстановитьПараметр("Ссылка",ОформлениеСтроки.ДанныеСтроки.Ссылка);
		Результат=Запрос.Выполнить();
		Если не Результат.Пустой() Тогда
			СтрокаРезультата=Результат.Выгрузить().Получить(0);
		ОформлениеСтроки.Ячейки.Статья.УстановитьТекст(СтрокаРезультата.Статья);
		ОформлениеСтроки.Ячейки.Должность.УстановитьТекст(СтрокаРезультата.Должность);
		КонецЕсли;
	КонецЦикла;
...Показать Скрыть

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

и через замер производительности (2-запрос, 3-объект)
]
Прикрепленные файлы:
86. Алекс Ю (AlexO) 31.10.12 16:42
(85) kiros,
а через УФ формы? Возможно, будете неприятно удивлены новыми знаниями... :(
87. Михаил Ражиков (tango) 31.10.12 16:44
(85) kiros,
1. колонка статья - какого типа?
2. зачем запрос в цикле сделали, для "сравнимости"? в таком виде сравнимости не хочу
88. Михаил Ражиков (tango) 31.10.12 16:45
89. mxm2 mxm2 (mxm2) 31.10.12 17:01
(83) AlexO, возможно на указанном не пробывали... но работает на 8.2.16.352.) памяти всего 24, server 64 бит настроено 2 рабочих процесса.
90. Алекс Ю (AlexO) 31.10.12 17:18
(88) tango,
прости, могу см-ами отдать :))
91. Кирилл (kiros) 31.10.12 17:18
(87) tango, 1. Справочник статьи ДДС
2. Вообще не оптимизировал, и не претендую на абсолютную корректность, так число для спортивного интереса.
92. Алекс Ю (AlexO) 31.10.12 17:19
(89) mxm2,
8.2.16.352

ну так скорей ставьте 8.2.15.317! :)))
93. Кирилл (kiros) 31.10.12 17:20
(86) AlexO, новым знаниям я всегда приятно удивляюсь. УФ это управляемые? до них еще даже шаловливые ручки не допускал, но наслышан, что это другая песня :)
94. Anton Loginchev (logos) 31.10.12 17:24
(54) AlexO, Спасибо, ещё одна пелена спала с глаз :)
Я наивный тоже думал что этот "РЛС" пристраивается в условие запроса к БД или джойн дополнительный там крячит, ан нет простейший тест на профайлере показал как обстоят дела на самом деле :)
95. Алекс Ю (AlexO) 31.10.12 17:28
(93) kiros,
это не просто другая песня, это песня задом наперед с одновременным сальто :)
Причем часто тормознутее обычных, хотя якобы призваны как раз быть "тоньше" их.
96. Алекс Ю (AlexO) 31.10.12 17:30
(94) logos,
киньте свежий пример запроса "с РЛС" сюда, а то народ заволнуется - "что за профайлер, там можно править РЛС-запросы, да?!" :))
97. Алекс Ю (AlexO) 31.10.12 17:33
(94) logos,
что этот "РЛС" пристраивается в условие запроса к БД

просто никто даже не может прикинуть стоп-вопрос себе чисто с другой стороны - "а откуда знаменитые тормоза в 1С при использвоании RLS, если все гладко идет в обработку на SQL-сервере?!
98. Anton Loginchev (logos) 31.10.12 17:39
(95) AlexO, Да ничего интересного не будет. Простейший запрос в консоли запросов, получить все ссылки из справочника "Организации".
Первый запуск был с полными правами, второй - с ограничениями. Конфа - БП 2.0.41, рлс штатные. SQL запрос 1 в 1.
ВЫБРАТЬ
	Организации.Ссылка
ИЗ
	Справочник.Организации КАК Организации
...Показать Скрыть

В обоих случаях транслировался в:
SELECT
T1._IDRRef
FROM _Reference52 T1 WITH(NOLOCK)
...Показать Скрыть

Результаты показывать, не буду, стесняюсь. Но смысл, что минимум УИДы он извлекает, чего бы не было при RLS на уровне БД
99. Anton Loginchev (logos) 31.10.12 17:41
(98) logos, Прошу прощения, ошибочка вышла. В случае ограниченной учетки был другой запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	Организации.Ссылка
ИЗ
	Справочник.Организации КАК Организации
...Показать Скрыть