1С. Кеширование данных.

Аватар пользователя 1cv8

Кеширование данных.

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

Кеш объектов состоит из двух частей: транзакционного кеша (активная транзакция) и обычного кеша.

Для обычного кеша:

Считанные данные будут находиться в кеше до тех пор, пока не наступит одно из следующих событий:

  • считанные данные будут вытеснены из кеша другими считанными данными других объектов (переполнение кеша);

  • при очередном обращении к кешу окажется, что считанные данные были изменены в базе данных;

  • закончится интервал времени в 20 минут.

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

Если обращение происходит в пределах 20 секунд после поступления данных в кеш, данные считаются верными). Если интервал превысил 20 секунд, будет выполняться проверка на соответствие версии данных, хранящихся в кеше, версии данных, находящихся в базе данных.

Если окажется, что версии данных не совпадают (т. е. произошло изменение данных в базе данных), то будет выполнено повторное считывание новых данных из базы данных и удаление старых в кеше.

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

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

Транзакционный кеш хранит считанные данные до тех пор, пока они не будут вытеснены более поздними или пока не закончится транзакция. По окончании транзакции для случая отказа транзакции кеш очищается, для случая успешного завершения транзакции кеш очищается, а данные переносятся в обычный кеш.

Кеширование конфигурации

Очень часто у пользователей появляются очень странные ошибки — у одного пользователя программа работает правильно — у другого или на другом компьютере совершенно иначе. Либо возникает ошибка потока данных. Часто что причина таких и некоторых других проблем в 8 — кеш конфигурации.

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

Для решения таких проблем часто помогает очистка кеша конфигурации:

Платформа

Действия

Пример

8.3

Запустить дополнительным параметром \ClearCache

Кеширование конфигурации - очистка кеша 1С

8.2

Очистка папок типа {00000…а…} в каталоге временных файлов

C:\Documents and Settings\username\Application Data\1C\1Cv82\

8.1

Такие же действия

C:\Documents and Settings\username\Application Data\1C\1Cv81\

 

 

Ключевые фразы:

Комментарии

Аватар пользователя Усер АнонимУсе

Правильно вот так: "/ClearCache".