Переключение на Главную Страницу Страницы: 1 ... 26 27 [28] 29 30 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 480246 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #405 - 12. Сентября 2008 :: 04:35
Печать  
kms писал(а) 11. Сентября 2008 :: 18:17:
orefkov писал(а) 11. Сентября 2008 :: 10:45:
Ну, тут говорят еще, что в 1С есть внутренний кэш объектов, и не обязательно она сразу полезет читать таблицу, но сильно рассчитывать на это не нужно.

+1
Не факт, кстати, что кеширование и блокировка вообще как-либо связаны.
По логике, начало транзакции вполне могло бы безусловно сбрасывать кеш объектов.
Ну а как там оно обстоит в дикой природе, утверждать не возьмусь.

Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

доки.НайтиДокумент();
доки.Провести();

то таблица справочника блокировалась.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #406 - 12. Сентября 2008 :: 06:52
Печать  
kiruha писал(а) 11. Сентября 2008 :: 14:46:
8.Исходный запрос, не монопольный режим, запрос внутри транзации
проверь пожалуйста, для чистоты эксперимента

Дело в том, что движения выбираются не запросом, а так:
Код
Выбрать все
Рег = СоздатьОбъект("Регистр.ОстаткиТовара");
Рег.УстановитьФильтр(,,Товар.ТекущийЭлемент(),);
Рег.ВыбратьДвижения(ДатаС,ДатаПо,);
Пока Рег.ПолучитьДвижение() > 0 Цикл
... 


ну для чистоты эксперимента проверил, разница в пределах погрешности измерений:

Исходный отчет, монопольный режим: ~1,750c.
Исходный отчет, монопольный режим, внутри транзакции: ~1,750c.
Исходный отчет, не монопольный режим: ~4,800c.
Исходный отчет, не монопольный режим, внутри транзакции: ~1,750c.

Сделал для себя полезный вывод, как то раньше не задумывался об этом:
При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
внутрь транзакции.
Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #407 - 12. Сентября 2008 :: 06:57
Печать  
CaBaT писал(а) 12. Сентября 2008 :: 06:52:
При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
внутрь транзакции.
Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


Я заключал. При существенном увеличении количества пользователей нарвался на периодически возникающий вал блокировок. Пришлось отказаться.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #408 - 12. Сентября 2008 :: 06:59
Печать  
kiruha писал(а) 12. Сентября 2008 :: 06:57:
CaBaT писал(а) 12. Сентября 2008 :: 06:52:
При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
внутрь транзакции.
Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


Я заключал. При существенном увеличении количества пользователей нарвался на вал блокировок. Пришлось отказаться.

Ты отказался вообще везде? Даже в модулях проведения? Если где-то оставил, то по какому принципу? В общем, расскажи поподробнее, если можешь. Думаю, что всем будет полезно почитать.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #409 - 12. Сентября 2008 :: 07:14
Печать  
JohnyDeath писал(а) 12. Сентября 2008 :: 06:59:
kiruha писал(а) 12. Сентября 2008 :: 06:57:
CaBaT писал(а) 12. Сентября 2008 :: 06:52:
При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
внутрь транзакции.
Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


Я заключал. При существенном увеличении количества пользователей нарвался на вал блокировок. Пришлось отказаться.

Ты отказался вообще везде? Даже в модулях проведения? Если где-то оставил, то по какому принципу? В общем, расскажи поподробнее, если можешь. Думаю, что всем будет полезно почитать.


Везде. Я же на прямых(vfpoledb) почти везде работаю  Улыбка

В модуле проведения оставлять конечно можно, но не нужно- там и так все блокируется при начале проведения,
но  проведение и так входит в транзакцию
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #410 - 12. Сентября 2008 :: 07:27
Печать  
orefkov писал(а) 12. Сентября 2008 :: 04:35:
Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

доки.НайтиДокумент();
доки.Провести();

то таблица справочника блокировалась.

Ну, выходит, 1С здесь при работе с кешем вполне оптимистична и довольна жизнью.
Хорошо это или плохо - второй вопрос. Улыбка

Вот, набросал небольшой тест на эту тему.
Надо запускать в двух разных сессиях 1С.
Для меня было неожиданным, что последовательность "НайтиЭлемент" - "Изменить наименование (на другое)" дают в дампе разные значения.

Ну а интереснее всего - это как раз тест влияния кеша (правда, этот набросок для SQL).
(в одной сессии - "Тест влияния кеша", в другой - "Найти элемент" - "Изменить наименование").
У меня выходит, что таблицы начинают блокироваться где-то после размера в 1000 элементов.

Еще интересно, что замена типа обращения с "Строка(_т.Объект)" на "_т.Объект.Наименование" блокирует таблицу сразу (у меня нет объяснения).
  

TestIsol.ert ( 9 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #411 - 12. Сентября 2008 :: 08:32
Печать  
orefkov писал(а) 12. Сентября 2008 :: 04:35:
Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

доки.НайтиДокумент();
доки.Провести();

то таблица справочника блокировалась.



У меня была застарелая проблема - периодичесое зависалово (блокировка) спр номенклатуры. Программное проведение -обязательно для появления блокировки спр.?
Может при других условиях при проведении через форму  тоже возможно появление блокировки?
« Последняя редакция: 12. Сентября 2008 :: 10:31 - kiruha »  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #412 - 12. Сентября 2008 :: 12:31
Печать  
kiruha писал(а) 12. Сентября 2008 :: 08:32:
orefkov писал(а) 12. Сентября 2008 :: 04:35:
Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

доки.НайтиДокумент();
доки.Провести();

то таблица справочника блокировалась.



У меня была застарелая проблема - периодичесое зависалово (блокировка) спр номенклатуры. Программное проведение -обязательно для появления блокировки спр.?
Может при других условиях при проведении через форму  тоже возможно появление блокировки?

Ну, имхо - если на экране видна ТЧ, и элементы в ней, то скорее всего, эти объекты лежат в кэше, и при обращении к их реквизитам 1С не полезет подчитывать данные из таблицы, и блокировки не будет. А если элементов больше, наверняка чтонить не найдется в кэше.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #413 - 14. Сентября 2008 :: 15:54
Печать  
1sqlite вылетает вместе с 1С на подключении таблиц если в документе нет реквизитов шапки (добавляю реквизит - работает).
Выгрузка c глючным документом (12kb) приложена. Должно вылетать в 1sqlite.ert по кнопке "Подключаемые таблицы" Документ.ПлохойДокумент.
С автоподключением: "select * from Документ_ПлохойДокумент" тоже вылетает.
  

bugbase.zip ( 12 KB | Загрузки )
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #414 - 01. Ноября 2008 :: 11:31
Печать  
Скопирую и сюда:
JohnyDeath писал(а) 01. Ноября 2008 :: 06:59:
Тут небольшой баг нарисовался.
Но меня другое немного пугает. Может кто-нибудь сказать (тут же есть люди, которые сидят бок о бок с ним  Круглые глаза ), Саша Орефков будет продолжать проект?

  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #415 - 04. Ноября 2008 :: 15:42
Печать  
А вот и я тут свою "находку" покажу.
Описал подробно тут - http://www.1cpp.ru/forum/YaBB.pl?num=1206042291/666#666
В кратце: ИТЗ сформированная запросом чем-то отличается от ИТЗ "классической" и в итоге после подключения в ТП 1С-ка может падать. Причем не обязательно сразу же. А после нескольких обновлений ИТЗ (путем Запрос.Выполнить(ИТЗПоставщика)) и обновлений строк в ТП. В общем какого-то постоянного теста наваять не удается. Видимо это и от данных как то зависит.  Плачущий
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #416 - 04. Ноября 2008 :: 15:48
Печать  
Блин я запутался. С одной стороны сама ДЛЛ может лежать и в репозитории и проблемы с ней лучше писать тут. Обсуждение "запросов" через 1sqlite можно обсуждать там - http://www.1cpp.ru/forum/YaBB.pl?num=1192855975. Но в итоге мне кажется народ путается и не знает куда лучше написать чтобы не потерялось.
Вернее всего конечно писать в google Улыбка наверное.  Класс
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #417 - 18. Ноября 2008 :: 09:17
Печать  
Выпущена официальная 1.0.1.9

    - Сделано принудительное округление чисел при типизации :Число, тк получатели
     результата (кроме ТаблицыЗначений) сами этого не делают.
    - Исправлена работа типизации при обработке NULL значений, тк получатели
     результата (кроме ТаблицыЗначений) сами этого не делают.
    - Изменена логика работы с Begin/EndReadSequnce. В немонопольном режиме падение
     производительности, зато не падает.
    - Добавлен метод SQLiteQuery::ОбработатьТекстЗапроса
    - Добавлено свойство SQLiteQuery::ВыполнятьВТранзакции
    - Исправлена ошибка программы при подключении таблиц шапки документа, не имеющего
     реквизитов шапки.
    - Исправлена ошибка при выборке из таблиц 1С, иногда могущая привести к зависанию
     программы.
    - Добавлено подключение таблиц ЖурналовРасчетов ДБФ версии 1С.
    - Исправлена укладка списка объектов при наличии иерархии - неверно укладывались
     объекты, содержащие в идентификаторе русские буквы (распределенка с русским
     префиксом ИБ).
    - Добавлен объект SQLiteDataProvider - поставщик данных табличного поля 1С++ для
     таблиц sqlite и таблиц 1С DBF-версии.

Обновлена документация.

http://code.google.com/p/sqlite1c/downloads/list
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #418 - 18. Ноября 2008 :: 09:58
Печать  
Спасибо!

А БыстрогоПоиска в поставщике для ТП не будет?  Нерешительный
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #419 - 18. Ноября 2008 :: 10:25
Печать  
Может мне кто подскажет, в чем засада. Пробую два аналогичныйх запроса на Oledb и 1sqlite
Код
Выбрать все
	НачВремя=_GetPerformanceCounter();
	БазаОЛЕ					= СоздатьОбъект("OLEDBData");
	БазаОЛЕ.Connect("Provider=VFPOLEDB.1;Data Source="+КаталогИБ()+"1Cv7.DBC;Mode=ReadWrite;Mask Password=False;Collating Sequence=MACHINE;");
	Запрос					= БазаОЛЕ.СоздатьКоманду();
	MetaDataWork			= СоздатьОбъект("MetaDataWork");

	ТекстЗапроса			= "
	|SELECT		Товары.Descr as [Наименование as $Строка],
	|			Товары.IsMark as [Пометка as $Строка],
	|			Остатки.Количество as [Остаток as $Число]
	|FROM		$Справочник.Номенклатура as Товары
	|LEFT JOIN
	|	(	SELECT $врОст.Номенклатура as ID,SUM($врОст.Количество) as Количество
	|		FROM $РегистрИтоги.ОстаткиТМЦ as врОст
	|		WHERE period=:НачДата~~
	|		GROUP BY 1
	|		HAVING SUM($врОст.Количество)<>0
	|	) as Остатки ON Остатки.ID=Товары.ID
	|WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
	|ORDER BY 1
	|";
	Запрос.УстановитьТекстовыйПараметр("НачДата",НачМесяца(ТекущаяДата()));
	Табл					= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("Прошло: "+(_GetPerformanceCounter()-НачВремя));
	Табл.Выгрузить(Данные);
КонецПроцедуры 


Выводит "Прошло: 135"
Код
Выбрать все
	НачВремя=_GetPerformanceCounter();
	БазаSQLite				= СоздатьОбъект("SQLiteBase");
	БазаSQLite.Открыть(":memory:");
	Запрос					= БазаSQLite.НовыйЗапрос();
	ТекстЗапроса			= "
	|SELECT		Товары.Descr [Наименование:Строка],
	|			Товары.IsMark as [Пометка as $Строка],
	|			Остатки.Количество [Остаток:Число.19.3]
	|FROM		Справочник_Номенклатура as Товары
	|LEFT JOIN
	|	(	SELECT врОст.Номенклатура as ID,SUM(врОст.Количество) as Количество
	|		FROM РегистрИтоги_ОстаткиТМЦ as врОст
	|		WHERE period=:НачДата
	|		GROUP BY 1
	|		HAVING SUM(врОст.Количество)<>0
	|	) as Остатки ON Остатки.ID=Товары.ID
	|WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
	|ORDER BY 1
	|";
	Запрос.Подставлять("НачДата",НачМесяца(ТекущаяДата()));
	Табл					= Запрос.ВыполнитьЗапрос(ТекстЗапроса);
	Сообщить("Прошло: "+(_GetPerformanceCounter()-НачВремя));
	Табл.Выгрузить(Данные);
КонецПроцедуры 


Выводит "Прошло: 9286"
База в обоих случаях локально на висте, пробовал и транзакции и вообще все подряд. Результат, с незначителными изменениями, одинаковый
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 26 27 [28] 29 30 ... 79
ОтправитьПечать