Преобразование T-SQL запроса MSSQL в запрос 1С 8

20.07.12

База данных - Инструменты администратора БД

Одним из традиционных способов определения узких мест работы информационной базы 1с 8 под MSSQL является отлов медленных запросов профайлером. Но видя "много букоф" на языке T-SQL, не так уж и просто понять, как найти запрос 1с, который их порождает. Особенно, если дополнительно используется механизм ограничения прав на уровне записей. В данной статье предлогается один из подходов упрощающих жизнь оптимизатору с использованием обработки, конвертирующей T-SQL запрос в запрос, похожий на язык запросов 1с 8.

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

Наименование Файл Версия Размер
Обработка конвертации запроса 8.2
.epf 19,92Kb
261
.epf 19,92Kb 261 Скачать

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

T-SQL запрос:

SELECT
MIN(CASE WHEN T2.SDBL_RLS_SIGNAL_ = 0x01 AND ISNULL(T7.SDBL_RLS_SIGNAL_,0x01) = 0x01 THEN 0x01 ELSE 0x00 END),
T1._Document367_IDRRef,
T7.Date_Time_,
T7.Number_,
T7.Fld7948RRef,
T7.Fld7949RRef,
T7.Fld7950RRef,
T7.Fld7956RRef,
T7.Fld7954_,
T7.Fld7955RRef,
CAST(T7.Fld7951_ AS NVARCHAR(300)),
T7.Fld7946_,
T7.Fld7947_,
T7.Fld7962RRef,
T7.Fld17647RRef
FROM _Document367_VT7991 T1 WITH(NOLOCK)
INNER JOIN (SELECT
CASE WHEN (EXISTS(SELECT
@P1 AS Q_002_F_000_
FROM (SELECT DISTINCT
@P1 AS SDBL_RLS_SIGNAL_,
T5._Fld16928RRef AS Q_001_F_000RRef
FROM _InfoRg16925 T5 WITH(NOLOCK)
INNER JOIN
_InfoRg16833 T6 WITH(NOLOCK)
ON ((((
T5._Fld16926 = @P2) AND (T6._Fld16834RRef = @P3)) AND (T6._Fld16835_TYPE = @P4 AND T6._Fld16835_RTRef = @P5 AND T6._Fld16835_RRRef = @P6)) AND (T6._Fld16837_TYPE = T5._Fld16927_TYPE AND T6._Fld16837_RTRef = T5._Fld16927_RTRef AND T6._Fld16837_RRRef = T5._Fld16927_RRRef))) T4
WHERE 1=1)) THEN @P1 ELSE @P7 END AS SDBL_RLS_SIGNAL_,
T3._IDRRef AS IDRRef
FROM _Document367 T3 WITH(NOLOCK)) T2
ON T1._Document367_IDRRef = T2.IDRRef
LEFT OUTER JOIN (SELECT
CASE WHEN (EXISTS(SELECT
@P1 AS Q_002_F_000_
FROM (SELECT DISTINCT
@P1 AS SDBL_RLS_SIGNAL_,
T10._Fld16928RRef AS Q_001_F_000RRef
FROM _InfoRg16925 T10 WITH(NOLOCK)
INNER JOIN
_InfoRg16833 T11 WITH(NOLOCK)
ON ((((
T10._Fld16926 = @P2) AND (T11._Fld16834RRef = @P3)) AND (T11._Fld16835_TYPE = @P4 AND T11._Fld16835_RTRef = @P5 AND T11._Fld16835_RRRef = @P6)) AND (T11._Fld16837_TYPE = T10._Fld16927_TYPE AND T11._Fld16837_RTRef = T10._Fld16927_RTRef AND T11._Fld16837_RRRef = T10._Fld16927_RRRef))) T9
WHERE 1=1)) THEN @P1 ELSE @P7 END AS SDBL_RLS_SIGNAL_,
T8._IDRRef AS IDRRef,
T8._Date_Time AS Date_Time_,
T8._Number AS Number_,
T8._Posted AS Posted_,
T8._Fld7946 AS Fld7946_,
T8._Fld7947 AS Fld7947_,
T8._Fld7948RRef AS Fld7948RRef,
T8._Fld7949RRef AS Fld7949RRef,
T8._Fld7950RRef AS Fld7950RRef,
T8._Fld7951 AS Fld7951_,
T8._Fld7954 AS Fld7954_,
T8._Fld7955RRef AS Fld7955RRef,
T8._Fld7956RRef AS Fld7956RRef,
T8._Fld7962RRef AS Fld7962RRef,
T8._Fld17647RRef AS Fld17647RRef
FROM _Document367 T8 WITH(NOLOCK)
WHERE
T8._Date_Time >= @P8 AND T8._Date_Time @P9 AND T8._Fld7948RRef = @P10 AND T8._Fld7956RRef = @P11) T7
ON T1._Document367_IDRRef = T7.IDRRef
WHERE T7.Posted_ = @P1 AND ((T7.Date_Time_ >= @P8) AND (T7.Date_Time_ @P9)) AND (T7.Fld7948RRef = @P10) AND (T7.Fld7956RRef = @P11) AND (T1._Fld7994_TYPE = @P12)
GROUP BY
T1._Document367_IDRRef,
T7.Date_Time_,
T7.Number_,
T7.Fld7948RRef,
T7.Fld7949RRef,
T7.Fld7950RRef,
T7.Fld7956RRef,
T7.Fld7954_,
T7.Fld7955RRef,
CAST(T7.Fld7951_ AS NVARCHAR(300)),
T7.Fld7946_,
T7.Fld7947_,
T7.Fld7962RRef,
T7.Fld17647RRef
ORDER BY 3, 4

Преобразованный запрос:

ВЫБРАТЬ

МИНИМУМ(ВЫБОР КОГДА T2.SDBL_RLS_SIGNAL_ = 1 И ISNULL(T7.SDBL_RLS_SIGNAL_,0x01) = 1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ),

T1.Документ.ПлатежноеПоручениеВходящее_Ссылка,
T7.Дата_,
T7.Номер_,
T7.Организация,
T7.СчетОрганизации,
T7.Контрагент,
T7.ВидОперации,
T7.СуммаДокумента,
T7.ВалютаДокумента,
ВЫРАЗИТЬ(T7.НазначениеПлатежа КАК СТРОКА(300)),
T7.ДатаВходящегоДокумента,
T7.НомерВходящегоДокумента,
T7.Ответственный,
T7.Автор
ИЗ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа T1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВЫБОР КОГДА (СУЩЕСТВУЕТ(ВЫБРАТЬ
@P1 КАК Q_002_F_000_
ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ
@P1 КАК SDBL_RLS_SIGNAL_,
T5.ГруппаДоступа КАК Q_001_F_000RRef
ИЗ РегистрСведений.ТаблицыГруппДоступа T5
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа T6
ПО ((((T5.Таблица = @P2) И (T6.ВидДоступа = @P3)) И (T6.ЗначениеДоступа = @P4 И T6.ЗначениеДоступа = @P5 И T6.ЗначениеДоступа = @P6)) И (T6.ГруппаДоступа = T5.Пользователь И T6.ГруппаДоступа = T5.Пользователь И T6.ГруппаДоступа = T5.Пользователь))) T4
ГДЕ 1=1)) ТОГДА @P1 ИНАЧЕ @P7 КОНЕЦ КАК SDBL_RLS_SIGNAL_,
T3._Ссылка КАК Ссылка
ИЗ Документ.ПлатежноеПоручениеВходящее T3 ) T2
ПО T1.Документ.ПлатежноеПоручениеВходящее_Ссылка = T2.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВЫБОР КОГДА (СУЩЕСТВУЕТ(ВЫБРАТЬ
@P1 КАК Q_002_F_000_
ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ
@P1 КАК SDBL_RLS_SIGNAL_,
T10.ГруппаДоступа КАК Q_001_F_000RRef
ИЗ РегистрСведений.ТаблицыГруппДоступа T10
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа T11
ПО ((((T10.Таблица = @P2) И (T11.ВидДоступа = @P3)) И (T11.ЗначениеДоступа = @P4 И T11.ЗначениеДоступа = @P5 И T11.ЗначениеДоступа = @P6)) И (T11.ГруппаДоступа = T10.Пользователь И T11.ГруппаДоступа = T10.Пользователь И T11.ГруппаДоступа = T10.Пользователь))) T9
ГДЕ 1=1)) ТОГДА @P1 ИНАЧЕ @P7 КОНЕЦ КАК SDBL_RLS_SIGNAL_,
T8._Ссылка КАК Ссылка,
T8._Дата КАК Дата_,
T8._Номер КАК Номер_,
T8._Проведен КАК Проведен_,
T8.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
T8.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
T8._Организация КАК Организация,
T8._СчетОрганизации КАК СчетОрганизации,
T8._Контрагент КАК Контрагент,
T8.НазначениеПлатежа КАК НазначениеПлатежа,
T8.СуммаДокумента КАК СуммаДокумента,
T8._ВалютаДокумента КАК ВалютаДокумента,
T8._ВидОперации КАК ВидОперации,
T8._Ответственный КАК Ответственный,
T8._Автор КАК Автор
ИЗ Документ.ПлатежноеПоручениеВходящее T8
ГДЕ T8._Дата >= @P8 И T8._Дата @P9 И T8._Организация = @P10 И T8._ВидОперации = @P11) T7
ПО T1.Документ.ПлатежноеПоручениеВходящее_Ссылка = T7.Ссылка
ГДЕ T7.Проведен_ = @P1 И ((T7.Дата_ >= @P8) И (T7.Дата_ @P9)) И (T7.Организация = @P10) И (T7.ВидОперации = @P11) И (T1.Сделка = @P12)
СГРУППИРОВАТЬ ПО
T1.Документ.ПлатежноеПоручениеВходящее_Ссылка,
T7.Дата_,
T7.Номер_,
T7.Организация,
T7.СчетОрганизации,
T7.Контрагент,
T7.ВидОперации,
T7.СуммаДокумента,
T7.ВалютаДокумента,
ВЫРАЗИТЬ(T7.НазначениеПлатежа КАК СТРОКА(300)),
T7.ДатаВходящегоДокумента,
T7.НомерВходящегоДокумента,
T7.Ответственный,
T7.Автор
УПОРЯДОЧИТЬ ПО 3, 4

Осталось почистить ненужную информацию и строки, касающиесь RLS.

Получаем:

ВЫБРАТЬ
МИНИМУМ(ВЫБОР КОГДА T2.SDBL_RLS_SIGNAL_ = 1 И ISNULL(T7.SDBL_RLS_SIGNAL_,0x01) = 1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ),
T1.Документ.ПлатежноеПоручениеВходящее_Ссылка,
T7.Дата_,
T7.Номер_,
T7.Организация,
T7.СчетОрганизации,
T7.Контрагент,
T7.ВидОперации,
T7.СуммаДокумента,
T7.ВалютаДокумента,
ВЫРАЗИТЬ(T7.НазначениеПлатежа КАК СТРОКА(300)),
T7.ДатаВходящегоДокумента,
T7.НомерВходящегоДокумента,
T7.Ответственный,
T7.Автор
ИЗ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа T1

ГДЕ T7.Проведен_ = @P1 И ((T7.Дата_ >= @P8) И (T7.Дата_ @P9)) И (T7.Организация = @P10) И (T7.ВидОперации = @P11) И (T1.Сделка = @P12)
СГРУППИРОВАТЬ ПО
T1.Документ.ПлатежноеПоручениеВходящее_Ссылка,
T7.Дата_,
T7.Номер_,
T7.Организация,
T7.СчетОрганизации,
T7.Контрагент,
T7.ВидОперации,
T7.СуммаДокумента,
T7.ВалютаДокумента,
ВЫРАЗИТЬ(T7.НазначениеПлатежа КАК СТРОКА(300)),
T7.ДатаВходящегоДокумента,
T7.НомерВходящегоДокумента,
T7.Ответственный,
T7.Автор
УПОРЯДОЧИТЬ ПО 3, 4

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

Здесь параметры вида @P1 - это выражения, соответствующие некоторым параметрам запроса 1с. Иначе говоря, вместо них будет что-то вроде &МойПараметр.

P.S. Это первая пробная версия. Так что пожелания и баг репорты приветствуются Smile

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2976    13    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3531    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177744    1073    0    

849

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27378    79    146    

59

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61317    88    59    

73

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11746    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

3600 руб.

06.02.2017    31110    31    18    

47

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    10984    5    8    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. German 413 20.07.12 23:38 Сейчас в теме
Как учитываются параметры виртуальных таблиц?
Как интерпретируется DATEPART?
Что делаете с типизацией?

А вообще уже было Трассировка Ei
3,5 года назад :)
3. kilokilo 18 27.07.12 01:22 Сейчас в теме
(1) (2) Но в профайлере же мы увидим оптимизированные движком SQL запрос, а не преобразованный исходный? Или я ошибаюсь?
5. Invaa 409 27.07.12 10:06 Сейчас в теме
(3) kilokilo,

Мы увидим оптимизированный запрос движком 1С. SQL Server оптимизирует план выполнения запроса, при этом текст T-SQL запроса переданный 1Сом не меняется.
8. eligor 27.07.12 10:39 Сейчас в теме
Invaa 27.07.12 10:06
(3) kilokilo,
"SQL Server оптимизирует план выполнения запроса" - ужас люди!!!! SQL Server не оптимизирует план запроса, он ЕГО СТРОИТ!!!!
А вот то, что 1С параметризует запрос это очень хорошо, но все равно кэш запросов довольно быстро растет, потому что в 1С все равно их много.

Как вариант использовать ключи сеанса типа /clearcashe и сброса пользовательских настроек непосредственно в БД MS SQL 1С таблички Config, ConfigSave, v8users, Params и !!! Files, но это крайне осторожно, не забывая о версионности объектов и ссылок.
10. Invaa 409 06.08.12 15:27 Сейчас в теме
(8) eligor,

прежде чем капс-локить на кого-нибудь, разберитесь в мат. части...

/ClearCache — очистка кэша клиент-серверных вызовов. На кеш запросов (имелась в виду статистика оптимизации в ms sql server?) этот параметр не влияет.

вот вам статья на "почитать" про оптимизацию плана выполнения запроса ms sql server:
http://www.simple-talk.com/sql/sql-training/the-sql-server-query-optimizer/

и еще интересная статья Гилева
http://www.gilev.ru/1c/81/index/optimquery.htm
11. eligor 07.08.12 09:48 Сейчас в теме
(10)
Ну хорошо, хорошо не буду спорить по поводу /ClearCache , сами надеюсь почитаете про него, он же ведь не влияет на сам MS SQL в общем, а только какой-то сброс для одного рабочего места, правильно? А по поводу оптимизации планов запросов... ну тут поспорить можно, вот я себе как-то смутно представляю при чем тут оптимизация запросов на самом SQL? Из 1С-ки формируется запрос, уже переведенный в T-SQL, для него строится план выполнения 1,2, и т.д. (строит сам MS SQL) и на основе статистики в данный момент времени сам MS SQL и выбирает какой ему лучше использовать план, либо построит новый. Но все это лишь бла бла бла, на самом деле наверное все-же лучше правильно организовать построение и хранение данных в самой 1С и по возможности избегать написание монстроидальных запросов(в 8.3 корректно поддерживается более 400 уровней вложенности запросов дерзайте), для полей(реквизитов, измерений и т.п.) связи и условий выборки лучше вводить индексы, ну и тому подобные несложные вещи. Повторюсь MS SQL не панацея! и у микросовта всегда был свой взгляд на "разработку и реализацию" любых комплексов и серверов... эх ка бы не удачная реализация офисной печати+пакет офисных програм... глядишь винда была бы и не такая популярная, не зацикливайтесь на ней
12. eligor 07.08.12 09:50 Сейчас в теме
(10)
Цитата из вашей ссылки от Гилева
Поиск длительных запросов SQL Server Profiler-ом

Последний способ для страдающих ностальгией по 90м годам, когда администраторы баз данных куда больше ценились (и это было вполне обосновано). Способ не то чтобы для извращенцев, но квалификации требует наибольшей из всех перечисленных здесь способов, а эффективность не гарантируется.
2. Invaa 409 21.07.12 13:33 Сейчас в теме
За ссылку спасибо, действительно хороший вариант.

Что касается работы с виртуальными таблицами и DATEPART, то пока это не релизовано.
Типизация у меня реализована следующим образом: синтаксис заменяется на аналог из 1С если такой имеется и просто переводится на русский, если аналогичного типа в 1С нет.
4. eligor 27.07.12 09:55 Сейчас в теме
Безусловно в данной публикации рассмотрен и приведен нетривиальный метод преобразования запросов, довольно поучительный.
Но кажется в поиске "узких мест" не обязательно выбирать путь "подземный ход на чердак".
Если вы являетесь администратором данной базы данных 1С, то достаточно опросить пользователей и выявлять подобные "узкие места" в работе базы моделированием ситуации с использованием встроенного замера производительности 1С там достаточно одного нажатия на будильник и в конфигураторе вы увидите где именно происходят задержки выполнения, это намного легче чем использование сторонних средств, да и далеко не всегда базы 1С крутятся именно на MS SQL.
Но в целом автору статьи большой респект за описание методики и модели оценочного преобразования запроса T-SQL в аналог запроса языка 1С.
6. Invaa 409 27.07.12 10:12 Сейчас в теме
(4) eligor,

замер производительности - это очень хорошая вещь, но он покажет только производительность в конкретном сеансе и в конкретной среде работы сеанса. А отловленные запросы профайлером могут указать и на сам проблемный сеанс (например, сеанс пользователя с существенно отличными от остальных пользовательскими настройками) и на проблемные условия в среде в которой работает сеанс (время дня, когда выполняется закрытие смены другими пользователями и т.п.).
7. eligor 27.07.12 10:27 Сейчас в теме
Обычно "проблемные условия в среде в которой работает сеанс (время дня, когда выполняется закрытие смены другими пользователями и т.п.)." выявляются опросом пользователей, в 99% случаев сами-же пользователи и обращаются.
И как скажите мне профайлером вообще можно оценить конкретный сеанс!???? Только источник увидеть, т.е. пользовательскую машину, а если БД на управляемых формах, либо WEB приложение!?
Профайлер вещь хорошая..., но количество запросов которые "сыпет" 1С в БД MS SQL оооочень велико, для отрисовки справочника например на 1 обновление 1С делает 2(ДВА) запроса один по колонке сортировки, другой по сортировки UIN-ов, для чтения регистров от 4 до 6 запросов), и довольно проблематично выявлять запросы с большим количеством duration's либо reads'ов вот это бы автоматизировать...
Да и повторюсь MS SQL как среда развертывания баз 1С далеко не панацея.
13. mip128 05.12.18 17:36 Сейчас в теме
(7) ты это точно трезвый написал?
14. eligor 06.12.18 01:33 Сейчас в теме
Вопрос в тему... вы спросили трезвый оценивает свои результаты по выполнению кем то другим сформулированным условиям и логики. и еще раз перечитайте тему. А так - можно ли решить вопрос - кто то ставит условия и задачи, другой их формализует, третий их ставит в очередь(в порядки формализации или плана запроса), четвертый обрабатывает ну и пусть даже возвращает результаты - вы думаете это можно сложить в одно - "ответственного" и где то там найти ответы?
9. Angeros 30.07.12 07:19 Сейчас в теме
Ни разу не приходилось прибегать к профайлеру. Все проблемы с производительностью решаются с помощью шаблонных решений оптимизации запроса. Такие как - не обращаться к данным в базе более 1ого раза. использовать индексы, иногда помогает разбивка запроса на более простые части. и т.д.
15. eligor 06.12.18 01:47 Сейчас в теме
(9) Подтверждаю. По опыту лучше 2(3,4..) запроса и внутреннея логика(обработка данных), чем один запрос, быстрее больше чем в разы. Да и вообще SQL и тп запросы не слово божье, данные можно и подправить на лету и индексы сбить... SQL-фобы - сектанты
16. ManyakRus 483 07.04.21 14:29 Сейчас в теме
обработка работает отлично :)
17. olbu 26.10.22 11:13 Сейчас в теме
Работает в обычных формах. Некоторые Временные таблицы - не получается прочитать. выводит как есть:
ВЫБРАТЬ
T1.Q_003_F_000RRef,
T1.Q_003_F_001RRef,
T32.ЕдиницаХраненияОстатков,
T37.Коэффициент,
T1.Q_003_F_002RRef,
Оставьте свое сообщение