|   |   | 
| 
 | Управляемая блокировка в 1С 8.3 | ☑ | ||
|---|---|---|---|---|
| 0
    
        Dmitry1c 01.05.22✎ 15:58 | 
        Управляемая блокировка в 1С 8.3
 правильно понимаю, что наложение управляемой блокировки (с помощью объекта БлокировкаДанных) просто повышает уровень изоляции транзакции с READ COMMITTED до REPEATABLE READ на записи отбора при наложении? И вся суть оптимизации и параллельности в 1С 8.3 управляемых блокировок сводится именно к грамотному повышению изоляции до REPEATABLE READ только там, где надо? | |||
| 36
    
        Timon1405 04.05.22✎ 18:31 | 
        (34) галка основной отбор, позволяющая делать отбор по этому измерению
 делать отбор где? | |||
| 37
    
        H A D G E H O G s 04.05.22✎ 18:45 | 
        (36) При обмене в планах обмена. Но к делу это мало относится. Просто надо знать, что будет еще один отдельный индекс по измерениям, которые указаны этими галками, если только этот индекс не совпадает по полям с уже существующими.     | |||
| 38
    
        Fragster гуру 04.05.22✎ 18:49 | 
        (37) вроде не только     | |||
| 39
    
        H A D G E H O G s 04.05.22✎ 18:58 | ||||
| 40
    
        ДедМорроз 04.05.22✎ 19:06 | 
        Еще в независимом регистре,включающая отбор по измерениям.     | |||
| 41
    
        H A D G E H O G s 04.05.22✎ 19:09 | 
        (40) А еще и больше нет других регистров и их типов, в которых есть "основной отбор"
 Живу в России я, а жил в Союзе я -- А это все была иллю-зи-я. На самом деле весь мир нам кажется, Вокруг нас матрица, как в фильме "Матрица". | |||
| 42
    
        ДедМорроз 04.05.22✎ 20:02 | 
        (41)естественно,что нету,так как все остальные подчинены решистратору,и если не рассматривать регистр сведений,то все остальные регистры используют решистратор и номер записи как первичный ключ.     | |||
| 43
    
        rsv 04.05.22✎ 20:08 | 
        (0) когда устанете , в свойствах конфы поставте 
 Режим блокировок автомат , все последовательно начнут. | |||
| 44
    
        ДедМорроз 04.05.22✎ 20:12 | 
        (43) вот не надо.
 Блокировки начнут работать на уровне sql,и очень большая вероятность столкновений будет. А так,две транзакции,не затронувшие общие ресурсы вполне себе параллельно выполняться будут. | |||
| 45
    
        Dmitry1c 04.05.22✎ 20:52 | 
        (43) для однопользовательской работы покатит     | |||
| 46
    
        ДедМорроз 04.05.22✎ 21:05 | 
        (45)для однопользовательской и управляемый режим годится - блокировки-то можно не ставить вообще.     | |||
| 47
    
        Dmitry1c 05.05.22✎ 08:13 | 
        https://its.1c.ru/db/metod8dev#content:5842:hdoc
 Основные индексы, создаваемые 1С:Предприятием: индекс по уникальному идентификатору (ссылке) для всех объектных сущностей (справочники, документы и т.д.); индекс по регистратору (ссылке на документ) для таблиц движений регистров, подчиненных регистратору; индекс периоду и значениям всех измерений для __итоговых таблиц__ регистров накопления; индекс периоду, счету и значениям всех измерений для итоговых таблиц регистров бухгалтерии. Вот ответ, зачем индексируется первое измерение "Организация" в регистрах накопления. Для взаимодействия с физическими таблицами, а не виртуальными. Там нет индекса, а он нужен. | |||
| 48
    
        Dmitry1c 05.05.22✎ 09:59 | 
        Можно еще вопрос. В ЕРП есть следующий программный код в модуле менеджера документа "Этап производства"
 Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Документ.ЭтапПроизводства2_2"); ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); Блокировка.Заблокировать(); ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект(); Если ДокументОбъект = Неопределено ИЛИ ДокументОбъект.Статус <> СтатусСформирован Тогда ВызватьИсключение НСтр("ru = 'Обрабатываемый объект не соответствует условиям отбора.'; |en = 'Processed object does not match filter conditions.'"); КонецЕсли; ДокументОбъект.Статус = Перечисления.СтатусыЭтаповПроизводства2_2.КВыполнению; ДокументОбъект.УстановитьРежимПакетнойПередачиКВыполнению(); ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); ЗафиксироватьТранзакцию(); зачем здесь блокировка? | |||
| 49
    
        Dmitry1c 05.05.22✎ 10:01 | 
        (48) сам задал, сам отвечу: пока мы манипулируем с объектом, чтобы другой с ним также не "проманипулировал" ...
 несмотря на то, что это три безобидные и мгновенные строчки кода | |||
| 50
    
        Dmitry1c 05.05.22✎ 10:06 | 
        &НаСервере
 Функция ОбновитьЦелевыеПараметрыНаправления(ЦелевыеПараметры) ДанныеСохранены = Истина; НачатьТранзакцию(); Попытка БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.НаправленияДеятельности"); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", НаправлениеДеятельности); ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); НаправлениеОбъект = НаправлениеДеятельности.ПолучитьОбъект(); ЗаполнитьЗначенияСвойств(НаправлениеОбъект, ЦелевыеПараметры); НаправлениеОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ДанныеСохранены = Ложь; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Для направления деятельности не удалось сохранить новые целевые значения.'; |en = 'Cannot save new target values for line of business.'"), , "Контракт"); КонецПопытки; Возврат ДанныеСохранены; КонецФункции вот тут тоже самое: но непонятно, когда надо блокировку ставить, а когда не надо? мы же частенько через ПолучитьОбъект() меняем объекты, что теперь, каждый раз блокировку управляемую хреначить и транзакцию явно открывать? | |||
| 51
    
        ptiz 05.05.22✎ 10:25 | 
        (50) Может там ПриЗаписи еще другие объекты меняются? Чтоб уж гарантированно "кашу" не получить.     | |||
| 52
    
        Dmitry1c 05.05.22✎ 10:26 | 
        (51) вот хотелось бы понять, откуда ваще это появилось ... ибо я не понимаю     | |||
| 53
    
        ptiz 05.05.22✎ 10:28 | 
        (52) Хотя один фиг это в одной транзакции происходит. Возможно, планировали и другие объекты менять в этой процедуры.     | |||
| 54
    
        lodger 05.05.22✎ 10:34 | 
        (52) так в самой первой статье про Управляемые Блокировки же написано
 ... Явная управляемая блокировка должна устанавливаться перед чтением данных: - если считываются данные, которые в дальнейшем должны быть изменены; ... https://its.1c.ru/db/v8std/content/460/hdoc | |||
| 55
    
        rozer76 05.05.22✎ 10:34 | ||||
| 56
    
        rozer76 05.05.22✎ 10:36 | 
        + (55) без этого есть риск словить дедлок     | |||
| 57
    
        Dmitry1c 05.05.22✎ 10:56 | 
        (54) (55) спасибо, погляжу сейчас.     | |||
| 58
    
        H A D G E H O G s 05.05.22✎ 10:58 | 
        (47) welcome to the club body!
 https://youtu.be/yrHXMhrs6Qg | |||
| 59
    
        Dmitry1c 05.05.22✎ 11:01 | 
        (54) т.е. это по сути все равно что каждый раз, когда программист пишет Объект = ОбъектныйТип.ПолучитьОбъект(); с целью дальнейшей записи объекта необходимо открывать явную транзакцию и создавать управляемую блокировку?     | |||
| 60
    
        Dmitry1c 05.05.22✎ 11:29 | 
        Кажется я еще понял одну причину, по которой следует использовать ОбщегоНазначения.ЗначенияРеквизитовОбъекта - в данном случае не требуется, согласно стандартам, накладывать управляемую блокировку, т.к. чтение происходит не в объектной модели, а запросом.     | |||
| 61
    
        lodger 05.05.22✎ 11:40 | 
        (59) (60) ну если следовать простой формальной логике и простой оптимизации, то метод ПолучитьОбъект() нужен ТОЛЬКО для того чтобы записать его в дальнейшем.
 а значит, все места с методом ПолучитьОбъект() надо оформить в управляемую блокировку. если нужны данные объекта, пускай даже все - получите запросом. | |||
| 62
    
        Dmitry1c 05.05.22✎ 11:41 | 
        (61) просто я всегда ранее использовал ПолучитьОбъект() - в целях обработки данных - и никогда не использовал упр. блокировок     | |||
| 63
    
        lodger 05.05.22✎ 12:24 | 
        (62) если не нужно его записывать и лень разбираться в запросах, то можно через точку ковыряться в реквизитах - эффект тот же.     | |||
| 64
    
        Dmitry1c 05.05.22✎ 13:04 | 
        (63) через точку у тебя объект прочитается вместе с таб. частями, даже если данные табличных частей тебе не нужны     | |||
| 65
    
        lodger 05.05.22✎ 14:15 | 
        (64) через ПолучитьОбъект, как в (62) будто ТЧ не прочитаются?     | |||
| 66
    
        Dmitry1c 13.05.22✎ 22:54 | 
        Про индексы вопросы остались
 1. для регистра сведений 1С создает "составной индекс" - что сие есть? просто соединяет колонки, входящие в индекс? например, индекс состоит из Период|Измерение1СсылочныйТип|Измерение2СсылочныйТип сам индекс физически будет содержать значения вида "ПериодГуид1Гуид2" или как-то по-другому? 2. можно ли средствами 1С создать т.н. покрывающий индекс? | |||
| 67
    
        H A D G E H O G s 13.05.22✎ 22:58 | 
        (66) 
 1. Да 2. Можно для всех других порядков измерений. | |||
| 68
    
        H A D G E H O G s 13.05.22✎ 23:00 | 
        Проиндексируй 
 Измерение2СсылочныйТип и 1С создаст тебе некластерный индекс "ПериодГуид2Гуид1" который будет покрывающим | |||
| 69
    
        Dmitry1c 14.05.22✎ 09:12 | 
        (68) прошу прощения, но ты различаешь покрывающий индекс и составной индекс?
 составной индекс, это индекс, создаваемый конструкцией к SQL вида SELECT OrderID, OrderDate FROM Sales WHERE OrderID = 12345; покрывающий индекс, это индекс, который создается конструкцией SQL вида CREATE NONCLUSTERED INDEX ix_orderid ON dbo.Sales(OrderID) INCLUDE (OrderDate); Т.е. в первом случае КАК Я СЕЙЧАС ПОНИМАЮ идет конкатенация полей (?верно), а во втором случае - конкатенация составной части индекса и добавление отдельных столбцов С ДАННЫМИ для того, чтобы индекс стал покрывающим | |||
| 70
    
        Dmitry1c 14.05.22✎ 09:13 | 
        (69) просто в курсах от 1с и от курсы-по-1с.рф я описание этих различий о составном и о покрывающем индексе НЕ встретил     | |||
| 71
    
        Dmitry1c 14.05.22✎ 09:22 | 
        (69) первый пример запроса некорректный, там должно быть что-то вроде 
 CREATE NONCLUSTERED INDEX ix_orderid ON dbo.Sales(OrderID, OrderDate) | |||
| 72
    
        Dmitry1c 14.05.22✎ 09:25 | 
        У 1С почему-то "покрывающим" индексом называется такой индекс, который является составным и просто "покрывает"-содержит- все поля, которые будут в условии запроса по этому индексу
 мне кажется опять что-то где-то 1Сники напортачили | |||
| 73
    
        Dmitry1c 14.05.22✎ 10:54 | 
        Вот в итоге ключевой вопрос философии индексов 1С
 Если проиндексировать поле "Реквизит1" у простого справочника, то он создаст индекс а) Конструкцией вида CREATE NONCLUSTERED INDEX ИмяИндекса ON dbo.Sales(Реквизит1, Ссылка) б) Конструкцией вида CREATE NONCLUSTERED INDEX ИмяИндекса ON dbo.Sales(Реквизит1) INCLUDE (Ссылка); | |||
| 74
    
        Dmitry1c 14.05.22✎ 11:02 | 
        Короче куплю сегодня лицензию на сервер 1С... для разработчка которая, посмотрю и отпишусь     | |||
| 75
    
        ДедМорроз 14.05.22✎ 12:14 | 
        Когда индекс не кластерный,то есть вторичный,то он создает соответствие индексировпнных полей класткрному индексу,то есть первичносу ключу,так как другой ссылки на записи в базе нет.
 Если бы в базе был некластерный первичный индекс,а записи располагались в порядке добавления,то разница бы была. А так,по идее,две конструкции дадут одно и то же на выходе. | |||
| 76
    
        ДедМорроз 14.05.22✎ 12:19 | 
        А блокировку ставят,чтобы избежать ошибки параллельного выполнения.
 Если два потока (на сервере) будут одеовременно изменять один и тот же документ,то прочитают до изменения они одно и то же,а вот при записи будет проверка версии - первый запишет,а второй получит ошибку различия версии объекта. | |||
| 77
    
        Dmitry1c 14.05.22✎ 13:33 | 
        Вот индекс в MS SQL включая Include-поля
 https://i0.wp.com/www.malinga.me/wp-content/uploads/2020/07/physical-design-example-non-clustered-index-with-includes-3.png?resize=1024%2C993&ssl=1 создает ли 1С include-поля ? | |||
| 78
    
        ДедМорроз 14.05.22✎ 13:52 | 
        Там где индексировать с доп.упорядочиваниеи,вполне вероятно,что используются включаемые поля по полям упорядочивания.
 В остальных случаях явно нет. | |||
| 79
    
        ДедМорроз 14.05.22✎ 14:09 | 
        https://use-the-index-luke.com/blog/2019-04/include-columns-in-btree-indexes
 Здесь можно почитать,как индекс с включаемыми полями работает. И понять,что раз Oracle его не умеет,то 1с его использовать не будет из-за кросплатформенной совместимости,хотя postgresql его умеет без проблем с 11-той версии. | |||
| 80
    
        Dmitry1c 14.05.22✎ 14:10 | 
        (79) т.е. в платформе 1С покрывающие индексы при работе не создаются
 а то что 1С называет покрывающим индексом, это просто составной индекс ? | |||
| 81
    
        ДедМорроз 14.05.22✎ 14:52 | 
        В 1с есть промежуточный уровень sdbl,который абстрагирован от способностей конкретного sql-сервера,а уже после все действия преобразуются в команды для конкретного sql-сервера.
 Можно получить структуру хранения для всей базы и посмотреть,что она из себя представляет и понять,что в ней нет места include. | |||
| 82
    
        ДедМорроз 14.05.22✎ 15:01 | 
        Вообще,в терминах sql покрывающий индекс рассматривается для конкретного запроса - это индекс,позволяющий выполнить этот запрос.
 Разница в том,что при определении включаемых полей есть разница между покрывающим индексом и композитным (который тоже покрывпющий,но содержит все необходимые поля в структуре индексирования). Соответственно,1с будет называть покрывающим конпозитный индекс. Еще следует отметить,что все верно доя баз данных,использующих кластерный индекс для первичного ключа,так как в дополнительных индексах хранится значение первичного ключа по которому нужно искать запись. В базах,где нет кластерного индекса,в индексе хранится ссылка на запись,и ее поиск так много времени не занимает,поэтому там нет смысла в дополнительных полях в индексе. | |||
| 83
    
        ДедМорроз 14.05.22✎ 15:06 | 
        Например, ibm db требует явно указать,что для таблицы применяется кластерный индекс по первичному ключу,соответственно,если этого не сказано,то механизм индексирования будет работать по-другому.
 Но,насколько я понимаю,1с требует кластерный индекс для своих таблиц. | |||
| 84
    
        Dmitry1c 14.05.22✎ 15:45 | 
        (73) проверил
 создает индекс, включая в ключ индекса поле "Ссылка" | |||
| 85
    
        Dmitry1c 14.05.22✎ 15:46 | 
        А нельзя через Management Studio посмотреть содержимое листьев индекса в виде таблицы?     | |||
| 86
    
        Dmitry1c 14.05.22✎ 15:49 | 
        Получается платформа 1С лишает возможности использовать механизм включения столбцов основной таблицы в индексы 
 Очень жаль, поидее хороший с точки зрения производительности механизм | |||
| 87
    
        Dmitry1c 14.05.22✎ 16:00 | 
        Чет я не догоняю
 Если у нас справочник и мы ведем поиск по неиндексированному реквизиту, у нас всегда будет CLUSTERED INDEX SCAN? мы TABLE SCAN никогда не увидим, потому что существует кластерный индекс для этой таблицы ? | |||
| 88
    
        ДедМорроз 14.05.22✎ 16:10 | 
        Кластерный индекс - это и есть сама таблица.
 Table scan - это если для таблицы нет кластерного индекса. Например,если в таблице вообще нет первичного ключа. | |||
| 89
    
        H A D G E H O G s 14.05.22✎ 17:57 | 
        (86) Мелочи, в сравнении с отсутствием сделать составной индекс для нескольких полей объектного типа. Приходится извращаться с отдельными регистрами поиска     | |||
| 90
    
        ptiz 14.05.22✎ 18:14 | 
        (89) "извращаться с отдельными регистрами поиска" - это как? Можно пример?     | |||
| 91
    
        H A D G E H O G s 14.05.22✎ 18:30 | 
        (90) Не уверен, что смогу объяснить, но вот запрос к регистру АСФКлючиПоискаДиапазоновМарок, в которые вынесены поля НачалоПолногоДиапазона, КонецПолногоДиапазона из справочника ДиапазоныМарок.
 Да, только в 2 из 3 случаев будет использован индекс полностью, без остаточного предиката, но и то хлеб. "ВЫБРАТЬ | ТаблицаДиапазонов.НачалоДиапазона КАК НачалоДиапазона, | ТаблицаДиапазонов.КонецДиапазона КАК КонецДиапазона, | ТаблицаДиапазонов.ИдентификаторСтроки КАК ИдентификаторСтроки, | ТаблицаДиапазонов.СостояниеМарок КАК СостояниеМарок |ПОМЕСТИТЬ ТаблицаДиапазонов |ИЗ | &ТаблицаДиапазонов КАК ТаблицаДиапазонов |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | Диапазоны.Диапазон КАК Диапазон, | Диапазоны.НачалоПолногоДиапазона КАК НачалоДиапазона, | Диапазоны.КонецПолногоДиапазона КАК КонецДиапазона, | ТаблицаДиапазонов.НачалоДиапазона КАК НачалоДиапазонаПоиска, | ТаблицаДиапазонов.КонецДиапазона КАК КонецДиапазонаПоиска, | ТаблицаДиапазонов.ИдентификаторСтроки КАК ИдентификаторСтроки, | ТаблицаДиапазонов.СостояниеМарок КАК СостояниеМарок |ПОМЕСТИТЬ ПромежуточныеДиапазоны |ИЗ | РегистрСведений.АСФКлючиПоискаДиапазоновМарок КАК Диапазоны | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДиапазонов КАК ТаблицаДиапазонов | ПО Диапазоны.НачалоПолногоДиапазона <= ТаблицаДиапазонов.НачалоДиапазона | И Диапазоны.КонецПолногоДиапазона > ТаблицаДиапазонов.НачалоДиапазона | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Диапазоны.Диапазон, | Диапазоны.НачалоПолногоДиапазона, | Диапазоны.КонецПолногоДиапазона, | ТаблицаДиапазонов.НачалоДиапазона, | ТаблицаДиапазонов.КонецДиапазона, | ТаблицаДиапазонов.ИдентификаторСтроки, | ТаблицаДиапазонов.СостояниеМарок |ИЗ | РегистрСведений.АСФКлючиПоискаДиапазоновМарок КАК Диапазоны | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДиапазонов КАК ТаблицаДиапазонов | ПО Диапазоны.НачалоПолногоДиапазона < ТаблицаДиапазонов.КонецДиапазона | И Диапазоны.КонецПолногоДиапазона >= ТаблицаДиапазонов.КонецДиапазона | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Диапазоны.Диапазон, | Диапазоны.НачалоПолногоДиапазона, | Диапазоны.КонецПолногоДиапазона, | ТаблицаДиапазонов.НачалоДиапазона, | ТаблицаДиапазонов.КонецДиапазона, | ТаблицаДиапазонов.ИдентификаторСтроки, | ТаблицаДиапазонов.СостояниеМарок |ИЗ | РегистрСведений.АСФКлючиПоискаДиапазоновМарок КАК Диапазоны | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДиапазонов КАК ТаблицаДиапазонов | ПО Диапазоны.КонецПолногоДиапазона < ТаблицаДиапазонов.КонецДиапазона | И Диапазоны.НачалоПолногоДиапазона > ТаблицаДиапазонов.НачалоДиапазона |; | |||
| 92
    
        ДедМорроз 14.05.22✎ 18:51 | 
        Ваши марки хрень полная.
 Хэш-индекс нужно использовать,который ms5 и в guid его родимый. Ну и на случай совпадения проверять само значение,и никаких проблем с префиксами и прочим мусором не будет. По крайней мере,абзацы текста переменной длины по хэш-индексу искались на ура,а длина у них поболее будет,чем марки. | |||
| 93
    
        H A D G E H O G s 14.05.22✎ 18:52 | 
        (92) Ваше мнение очень важно для нас.     | |||
| 94
    
        ДедМорроз 14.05.22✎ 20:29 | 
        Ладно,не хотел вас ни чем обидеть.
 Просто,в некоторых случаях хэш дает такой прирост в скорости,что потом кажется,что можно внзде использовать. С марками же - порядок не важен,основная последовптельность (исключая криптохвост)уникальна и важно только совпадение. Да,конечно,может потребоваться найти марку,похожую на другую в пределах какого-то числа символов,но это,в общем случае,без полного сканирования таблицы невозможно,так как обычный индекс тут ни чем не поможет. | |||
| 95
    
        ДедМорроз 14.05.22✎ 20:32 | 
        Задачп поиска килобайта с одним-двумя изменениями требует использования кодов рида-соломона и прогулки по ближайшим в пространстве этих кодов.     | |||
| 96
    
        H A D G E H O G s 14.05.22✎ 20:40 | 
        (94) (95) Ага. Все верно. Проблема только в том, что в (91) - не марки.     | |||
| 97
    
        ДедМорроз 14.05.22✎ 21:56 | 
        Ну там интервалы.
 С интервалами интереснее. Тут одним индексом не обойдешься,так как нужно и по началу (и возможно с концом) и по концу,или переводить интервалы в неперекрывающиеся,тогда можно начало и конец положить в один индекс и все находить сканированием индекса. | |||
| 98
    
        Dmitry1c 15.05.22✎ 10:13 | 
        Вот еще вопрос достойный 1С Экспертов
 Каким образом происходит индексирование в соответствии, если в соответствии ключом является составной тип данных ? | |||
| 99
    
        Dmitry1c 15.05.22✎ 10:15 | 
        (98) ну, не составной конечно, не обязательно.     | |||
| 100
    
        H A D G E H O G s 15.05.22✎ 10:40 | 
        (98) в соответствие пихается
 Хэшключа Ключ Значение Ищется, естественно по хэшу | |||
| 101
    
        rphosts 15.05.22✎ 10:55 | 
        (100) откуда инфа? Снифером снял или утечка из конторы?     | |||
| 102
    
        H A D G E H O G s 15.05.22✎ 10:59 | 
        (101) я бы сделал так.     | |||
| 103
    
        Dmitry1c 15.05.22✎ 11:09 | 
        (100)
 блин, круто. Вообще аналог в ЯВУ соответствия - это HashMap поэтому очевидно предположить, что ключ соответствия хэшируется и индекс создается уже по хэшам, а не по самому значению ключа. ну я это так думаю, тут уже надо у разрабов платформы спрашивать | |||
| 104
    
        rphosts 15.05.22✎ 11:13 | 
        (102) ну это почти очевидно, но порой в конторе делают несколько не так как все от них ждут     | |||
| 105
    
        Dmitry1c 15.05.22✎ 11:14 | 
        а у объекта ТаблицаЗначений создаются какие-нибудь индексы ?     | |||
| 106
    
        rphosts 15.05.22✎ 11:14 | 
        (103) даже для длинного хэша значения хэша могут совпадать для разных исходных значений хэш-функции.     | |||
| 107
    
        Dmitry1c 15.05.22✎ 11:15 | 
        Опа
 ТЗ.Индексы.Добавить("Колонка1"); я и не знал о таком ... | |||
| 108
    
        rphosts 15.05.22✎ 11:15 | 
        (105) продам СП... дорого....     | |||
| 109
    
        rphosts 15.05.22✎ 11:15 | 
        (107) эх, уже не продать...     | |||
| 110
    
        Dmitry1c 15.05.22✎ 11:16 | 
        спустя 10 лет работы узнать что таблицу значений можно проиндексировать :) нормально так     | |||
| 111
    
        xXeNoNx 15.05.22✎ 11:42 | 
        (0) сдается мне я знаю в какую контору ты пришел и зачем тебе kvm.     | |||
| 112
    
        H A D G E H O G s 15.05.22✎ 11:44 | 
        (111) Сдается мне, я знаю, какой веткой ты ошибся..     | |||
| 113
    
        xXeNoNx 15.05.22✎ 11:45 | 
        (112) нет, если бы не эта ветка, я бы этого не понял.     | |||
| 114
    
        ptiz 15.05.22✎ 12:32 | 
        (91) Я понял так:
 - есть огромный список документов/справочник - создаем РС, в который ПриЗаписи каждого документа пишутся поля (измерения), которые используются для поиска в тяжелых запросах - в этих тяжелых запросах для быстрого поиска лезем в РС (а его поля индексированы в нужном нам порядке) и быстро находим Ссылку на документ Тут, видимо, аналогично, только уже не надо лезть в таблицу самого документа/справочника, т.к. все данные уже в АСФКлючиПоискаДиапазоновМарок. | |||
| 115
    
        H A D G E H O G s 15.05.22✎ 12:43 | 
        (114) Да     | |||
| 116
    
        ДедМорроз 15.05.22✎ 12:46 | 
        При желании,индекс можно создать и по самим значениям,точнее,для объектов,сначпла по типу,а потом по адресу,ничуть не медленнее будет,но будет двухуровневый индекс,а в случае хэша - одноуровневый.     | |||
| 117
    
        H A D G E H O G s 15.05.22✎ 12:49 | 
        (116) Ну давай, расскажи нам.     | |||
| 118
    
        Dmitry1c 15.05.22✎ 14:22 | 
        (116) ?! это как     | |||
| 119
    
        ДедМорроз 15.05.22✎ 14:38 | 
        И что тут такого сложного?
 Для типов есть rtti А что такое объект в памяти? Это адрес,где размещаются какие-то данные объекта,и этого достаточно для того,чтобы различать объекты. Правда,чтобы не спутать два интерыейса одного объекта,обычно,договариваются,по какому или по каким интерыейсам идентифицировать объект. Собственно говоря,хэш-то тоже от этого значения будет строится. Можно,конечно,сериализовать объект и построить хэш от его данных,но тут можно получить что два документа й1с полученные из одной ссылки,будут одинаковыми,пока в них не запишут разные значения. Опять же,не зря 1с придумала термин МутабельныйОбъект. | |||
| 120
    
        H A D G E H O G s 15.05.22✎ 17:04 | 
        (119) Ты втираешь какую-то дичь     | |||
| 121
    
        ДедМорроз 15.05.22✎ 17:22 | 
        Какая дичь?
 Это основы программирования на Си. Как в Си можно сравнить два объекта? Только сравнить ссылки. Ну и ничего не мешает упорядочить объекты по адресу в памятм и так их искать - все остальные методы тркбуют хоть что-то знать о внутренностях объекта. Да,наверное,людям,которые не программировпли на ассемблере,сложно понять,что есть объекты и что есть данные. | |||
| 122
    
        Dmitry1c 16.05.22✎ 08:09 | 
        Вот еще прикол.
 У меня есть самописная учетная система для личных финансов. Закинул ее на клиент-серверный режим. В итоге замером профайлера при проведении документа увидел: SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRANSACTION А где SNAPSHOT ? | |||
| 123
    
        Dmitry1c 16.05.22✎ 15:12 | 
        https://infostart.ru/1c/articles/936914/
 вот здесь вот, кстати, в разделе >>Можно ли сделать покрывающий индекс нашелся ответ на ранее поставленный мной вопрос про INCLUDE и некорректность термина "покрывающий индекс" у 1С | |||
| 124
    
        Dmitry1c 16.05.22✎ 17:00 | 
        Еще прикол из-за разделителя ОбластьДанныхОсновныеДанные:
 сделал запрос по индексированному измерению регистра сведений, и не по индексированному измерению регистра сведений в обоих случаях получаю Clustered Index Seek в визуализации плана запроса, пушо первым полем индекса идет разделитель ... хотя во втором случае явно происходит сканирование таблицы что помогает - надпись Missing Index (Impact 94) ... | |||
| 125
    
        H A D G E H O G s 16.05.22✎ 18:06 | 
        (124) Ничего не понял, но очень интересно.     | |||
| 126
    
        Dmitry1c 16.05.22✎ 18:08 | 
        (125) из-за разделителя областей данных не очевидно, что Clustered Index Seek на самом деле является Scan'ом 
 т.к. на уровне корня индекса первым столбцом идет разделитель области данных, который предназначен для работы в модели сервиса а потом идет сканирование всего индекса но план запроса отображает как будто идет SEEK, хотя от SEEK по факту там нулевой разделитель области данных | |||
| 127
    
        H A D G E H O G s 16.05.22✎ 18:12 | 
        (126) Да, есть такое.     | |||
| 128
    
        H A D G E H O G s 16.05.22✎ 18:13 | 
        (126) Но ты молодец, редко такое упорство встретишь.     | |||
| 129
    
        Merkalov 17.05.22✎ 02:27 | 
        Вопрос по объеду "БлокироваДанных".
 В СП и на its написано что в качестве источника данных может выступать НаборЗаписей, но не может. "Ошибка при установке значения атрибута контекста (ИсточникДанных) по причине: Несоответствие типов" Прошелся поиском в типовых конфигурациях - БП и УТ, не нашел использований набора записей в качестве источника. Меня что, обманули? | |||
| 130
    
        lodger 17.05.22✎ 10:35 | 
        (129) НЗ у тебя от РС? подчинен регистратору?     | |||
| 131
    
        Merkalov 18.05.22✎ 03:05 | 
        (130) Попробовал на РС с регистратором - та же ошибка.     | |||
| 132
    
        lodger 18.05.22✎ 09:32 | 
        (131) слушай, а куда ты там собрался набор записей совать?
 есть такой синтаксис: Бл=Новый БлокировкаДанных; Эл=Бл.Добавить("РегистрСведений.ЦеныНоменклатуры.НаборЗаписей"); Эл.Режим=РежимБлокировкиДанных.Исключительный; Эл.УстановитьЗначение("Регистратор",Ссылка); Бл.Заблокировать(); а ты со своим НЗ прочитанным из базы наверное хочешь его же и заблочить? так вот нет. в ИсточникДанных можно сунуть только РезультатЗапроса, Табличная часть, ТаблицаЗначений. | |||
| 133
    
        Merkalov 18.05.22✎ 10:52 | 
        (132) 
 https://its.1c.ru/db/metod8dev/content/5839/hdoc >В качестве источника данных можно указывать результат запроса, табличную часть, набор записей или таблицу значений. А мне сказали, что всунуть можно и сам набор записей.. "на заборе тоже написано" | |||
| 134
    
        lodger 18.05.22✎ 11:01 | 
        (133) забавно. в СП одно, и исполняемый код ему вторит, а в доке другое.
 https://its.1c.ru/db/v8320doc#bookmark:dev:TI000000535 | |||
| 135
    
        lodger 18.05.22✎ 11:02 | 
        может уровень совместимости надо снять?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |