Ошибка кэша при запуске
Наверное, редко можно встретить человека, который часто работает с программой 1С 8.3 и не встречался с окошком с надписью подобного рода: «Неверный формат хранилища данных ‘file://C:/Users/Alex1/AppData/Local/1C/1cv8/058t1m89-295c-47c4-8922-f67f568rf70e/Config/RuntimeCacheStorage’ «.
Чаще всего такая ошибка появляется при обновлении конфигурации, при открытии обработки, в конфигураторе и в других случаях. Причина кроется либо в нарушении целостности структуры информационной базы, либо — чаще — в кеше 1С.
- очистка кеша;
- исправление структуры базы данных;
- перенос данных в чистую, не «битую» информационную базу.
Сбои в работе
Система не может быть надёжной на 100%, поэтому нужно предусмотреть, как она будет вести себя при сбоях. Сбои могут быть как в работе самого кэша, так и в работе базы данных.
При сбоях в работе базы данных и отсутствии кэша мы можем попасть в ситуацию cache stampede, про которую я тоже уже рассказывал раньше. Выйти из неё можно уже описанными способами, а можно записать в кэш заведомо некорректное значение с небольшим сроком жизни. В этом случае система сможет определить, что источник недоступен, и на какое-то время перестанет пытаться запрашивать данные.
6. Удалите проблемный антивирус / программное обеспечение
Ошибки BSoD, такие как CACHE_MANAGER, могут быть вызваны как программным, так и аппаратным обеспечением, и для исправления этих ошибок рекомендуется найти проблемное программное обеспечение и удалить его.
Ваш антивирус и брандмауэр могут быть наиболее распространенной причиной ошибки BSoD, поэтому для устранения этой проблемы рекомендуется временно удалить антивирусное программное обеспечение.
Практически любая антивирусная программа может вызывать ошибки такого типа, поэтому обязательно удалите любое антивирусное программное обеспечение, которое вы установили в дополнение Windows Defensor.
Немногие пользователи сообщили, что даже после удаления некоторых антивирусных программ ошибка CACHE_MANAGER не была исправлена. Вероятно, это связано с оставшимися антивирусными файлами и записями реестра, а для полного удаления антивирусного программного обеспечения следует использовать специальные средства удаления.
Большинство антивирусных компаний размещают инструменты удаления на своих веб-сайтах, и вы можете скачать и использовать их бесплатно.
Второй способ очистки временных файлов 1С — удаление базы из списка
Второй способ более простой, однако он не совсем правильный. Для очистки достаточно удалить эту конфигурацию и создать новую с тем же путем к ИБ.
Вследствие этого старая папка с кэшем «отвяжется» от этой ИБ, и создастся новый каталог.
Можно делать и так, кеш очищается, однако временные файлы так и остаются на жестком диске.
Заключение
В статье я затронул основные проблемы при работе с кэшем, но уверен, что, кроме них, есть множество других, и продолжать этот разговор можно очень долго. Надеюсь, что после прочтения моей статьи ваш кэш станет более эффективным.
Синий экран ошибок смерти может быть довольно неприятным, поскольку он заставляет ваш компьютер часто перезагружаться. Эти ошибки могут повлиять на любую операционную систему и Windows 10 не исключение.
Деление данных между кэширующими серверами
Если вы хотите использовать кэширование в достаточно большой системе, нужно позаботиться о том, чтобы можно было поделить кэшируемые данные между доступными серверами. Это необходимо по нескольким причинам:
- данных может быть очень много, и они физически не поместятся в память одного сервера;
- данные могут запрашиваться очень часто, и один сервер не в состоянии обработать все эти запросы;
- вы хотите сделать кэширование более надёжным. Если у вас только один кэширующий сервер, то при его падении вся система останется без кэша, что может резко увеличить нагрузку на базу данных.
Есть разные алгоритмы для реализации этого. Самый простой — вычисление номера сервера как остатка от целочисленного деления численного представления ключа (например, CRC32) на количество кэширующих серверов:
Такой алгоритм называется хешированием по модулю (англ. modulo hashing). CRC32 здесь использован в качестве примера. Вместо него можно взять любую другую хеширующую функцию, из результатов которой можно получить число, большее или равное количеству серверов, с более-менее равномерно распределённым результатом.
Этот способ легко понять и реализовать, он достаточно равномерно распределяет данные между серверами, но у него есть серьёзный недостаток: при изменении количества серверов (из-за технических проблем или при добавлении новых) значительная часть кэша теряется, поскольку для ключей меняется остаток от деления.
Я написал небольшой скрипт, который продемонстрирует эту проблему.
В нём генерируется 1 млн уникальных ключей, распределённых по пяти серверам с помощью хеширования по модулю и CRC32. Я эмулирую выход из строя одного из серверов и перераспределение данных по четырём оставшимся.
В результате этого «сбоя» примерно 80% ключей изменят своё местоположение, то есть окажутся недоступными для последующего чтения:
Total keys count: 1000000
Shards count range: 4, 5
ShardsBefore | ShardsAfter | LostKeysPercent | LostKeys |
---|---|---|---|
5 | 4 | 80.03% | 800345 |
Самое неприятное тут то, что 80% — это далеко не предел. С увеличением количества серверов процент потери кэша будет расти и дальше. Единственное исключение — это кратные изменения (с двух до четырёх, с девяти до трёх и т. п.), при которых потери будут меньше обычного, но в любом случае не менее половины от имеющегося кэша:
Я выложил на GitHub скрипт, с помощью которого я собрал данные, а также ipynb-файл, рисующий данную таблицу, и файлы с данными.
Для решения этой проблемы есть другой алгоритм разбивки — согласованное хеширование (англ. consistent hashing). Основная идея этого механизма очень простая: здесь добавляется дополнительное отображение ключей на слоты, количество которых заметно превышает количество серверов (их могут быть тысячи и даже больше). Сами слоты, в свою очередь, каким-то образом распределяются по серверам.
При изменении количества серверов количество слотов не меняется, но меняется распределение слотов между этими серверами:
- если один из серверов выходит из строя, то все слоты, которые к нему относились, распределяются между оставшимися;
- если добавляется новый сервер, то ему передаётся часть слотов от уже имеющихся серверов.
На картинке начального разбиения все слоты одного сервера расположены подряд, но в реальности это не обязательное условие — они могут быть расположены как угодно.
Основное преимущество этого способа перед предыдущим заключается в том, что здесь каждому серверу соответствует не одно значение, а целый диапазон, и при изменении количества серверов между ними перераспределяется гораздо меньшая часть ключей ( k / N , где k — общее количество ключей, а N — количество серверов).
Если вернуться к сценарию, который я использовал для демонстрации недостатка хеширования по модулю, то при той же ситуации с падением одного из пяти серверов (с одинаковым весом) и перераспределением ключей с него между оставшимися мы потерям не 80% кэша, а только 20%. Если считать, что изначально все данные находятся в кэше и все они будут запрошены, то эта разница означает, что при согласованном хешировании мы получим в четыре раза меньше запросов к базе данных.
Код, реализующий этот алгоритм, будет сложнее, чем код предыдущего, поэтому я не буду его приводить в статье. При желании его легко можно найти — на GitHub есть rendezvous hashing), но они гораздо менее распространены.
Вне зависимости от выбранного алгоритма выбор сервера на основе хеша ключа может работать плохо. Обычно в кэше находится не набор однотипных данных, а большое количество разнородных: кэшированные значения занимают разное место в памяти, запрашиваются с разной частотой, имеют разное время генерации, разную частоту обновлений и разное время жизни. При использовании хеширования вы не можете управлять тем, куда именно попадёт ключ, и в результате может получиться «перекос» как в объёме хранимых данных, так и в количестве запросов к ним, из-за чего поведение разных кэширующих серверов будет сильно различаться.
Чтобы решить эту проблему, необходимо «размазать» ключи так, чтобы разнородные данные были распределены между серверами более-менее однородно. Для этого для выбора сервера нужно использовать не ключ, а какой-то другой параметр, к которому нужно будет применить один из описанных подходов. Нельзя сказать, что это будет за параметр, поскольку это зависит от вашей модели данных.
В нашем случае почти все кэшируемые данные относятся к одному пользователю, поэтому мы используем User ID в качестве параметра шардирования данных в кэше. Благодаря этому у нас получается распределить данные более-менее равномерно. Кроме того, мы получаем бонус — возможность использования multi_get для загрузки сразу нескольких разных ключей с информацией о юзере (что мы используем в предзагрузке часто используемых данных для текущего пользователя). Если бы положение каждого ключа определялось динамически, то невозможно было бы использовать multi_get при таком сценарии, так как не было бы гарантии, что все запрашиваемые ключи относятся к одному серверу.
Как мне отремонтировать CACHE MANAGER BSoD в Windows 10?
Содержание:
- обновление Windows 10 регулярно
- Обновите ваши драйверы
- Запустите средство устранения неполадок BSOD
- Запустите сканирование SFC
- Запустите DISM
- Удалить проблемный антивирус / программное обеспечение
- Запустить chkdsk
- Проверьте ваше оборудование
3. Запустите средство устранения неполадок BSOD
Если обновление драйверов не привело к ошибке CACHE_MANAGER BSoD, мы попробуем инструмент для устранения неполадок. Windows 10 имеет удобный встроенный инструмент устранения неполадок, который может помочь вам с различными проблемами, включая ошибки BSOD. Так что мы можем попробовать и посмотреть, повезет ли нам.
Третий способ — параметр ClearCache
Рекомендую использовать, если глюки из-за наличия временных файлов появляются постоянно. Однако данный способ снижает производительность системы. Подходит только для тонкого клиента.
Необходимо в дополнительных параметрах запуска (в списке баз кнопка Изменить, последняя закладка) прописать команду /ClearCache. Пример использования:
Видео по очистке кэша в программах 1С:
Если же «глюки» в 1С не пропали после очистки кэша, и 1С работает не так, как хотелось бы, Вы можете обратиться к квалифицированному программисту 1С.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Другие статьи по 1С:
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
ClearCache ключ работает только для чистки кэша тонкого клиента. Некоторые особо квалифицированные считают ClearCache программой! и требуют ее скачать .
очень интересная и полезная статья мне понравилось кое какие полезные моменты я узнал для себя спасибо за статью
А если в BAT-файл первой строчкой поставить копирование папок Ext.. и tmplts а так же профилей по маске *.pfl в какую-нибудь корневую временную папку и после выполнения удаления — возврат из временной папки обратно — это более безопасный вариант?
If Exist %USERPROFILE%\AppData\Roaming\1C\1Cv82 (
rem Удаляем все файлы
Del /F /Q %USERPROFILE%\AppData\Roaming\1C\1Cv82\*.*
Del /F /Q %USERPROFILE%\AppData\Local\1C\1Cv82\*.*
rem Удаляем все каталоги
for /d %%i in («%USERPROFILE%\AppData\Roaming\1C\1Cv82\*») do rmdir /s /q «%%i»
for /d %%i in («%USERPROFILE%\AppData\Local\1C\1Cv82\*») do rmdir /s /q «%%i»
)
Спасибо за ценнейший комментарий :))
Кстати, ищем авторов для новых статей!)))
а если я электрочайник, я понимаю что надо что-то там прописать..но напрягать мозг не хочу, так как знаю это поверхностно и мне это не совсем интересно — я пользователь…1С перестала загружаться с рабочего ярлыка, открывается только конфигурация…я нашла главный файл и создала новый ярлык….но наверное это не правильно, надо понять почему перестал работать старый…помогите
for /d %i in («%USERPROFILE%\AppData\Roaming\1C\1cv8», «%USERPROFILE%\AppData\Local\1C\1cv8») do (pushd %i & rd . /s /q & popd)
Спасибо. Пригодился способ 3. А главное работает.
Спасибо. Все получилось по второму способу.
Спасибо за замечание, добавил 🙂
Удаление конфигурации из списка может привести к полному сбросу настрое торгового оборудования для конфигурации Розница 2.0. Привет от 1С!
В УТ 11 в кэш запихали настройки оборудования и если удалять папки вашим способом, то ни сканировать, ни печатать чеки и пр. вы не сможете пока не настроите их заново в торговом оборудовании…
Можно уточнить откуда информация и для какой версии УТ11 это актуально?
Из личного опыта: настройка подключаемого оборудования привязывается к рабочему месту (связка [компьютер]+[пользователь компьютера]), а к пользователю 1С не имеет никакого отношения. На кассе работают ~10 кассиров, а торговое оборудование я настраивал только один раз (из под своей учётки 1С).
Забыл уточнить: настраивалось на УТ11.1 (11.1.9.55).
ОЧЕНЬ верное и полезное замечание !
Неистово плюсую. Чистка кэша убивает настройки подключаемого оборудования.
не чиста кэша, а удаление какого-то там файлика (который dhjlt живёт в каталоге App). И не сбраывает настройки, а делает их недоступными (в файлике хранится строка, вроде GUID, а при сносе файла и последующей загрузке создаётся файл с новой такой строкой, не похожей на предыдущую). Лечение такой мелочи у специалиста занимает 10-15 минут. Но, конечно, не надо до такого доводить.
На рознице 2.0 100% убиваются настройки торгового оборудования при удалении базы из списка и добавления заново. 1С решила привязать рабочее место к имени папки с настройками. Это жесткая подстава для админов…
не совсем так, см. выше
Здравствуйте.
Подскажите, пожалуйста, подробнее последовательность действий по второму способу
«Второй способ более простой, однако он не совсем правильный. Для очистки достаточно удалить эту конфигурацию и создать новую с тем же путем к ИБ»
А как-нибудь можно параметр ClearCache записать в файл списка информационных баз v8i?
Сам нашел посмотрев в %AppData%\1C\1CEStart\ibases.v8i
Нужно прописать
AdditionalParameters=/ClearCache
Огромное спасибо. Способ 1 очень пригодился.
Легче всего найти кэш через поиск файлов(Ctrl+F).
В настройках поиска ставим искать в скрытых и системных файлах и ставим на поиск файл: 1cv8.pfl.
Способ 1, шаг 1… У меня путь к шаблонам такой:
c:\=1с\=шаблоны\
А под GNU/Linux вообще другой.
То, что кэш там рядом не валялся — очевидно. Не поленитесь, напишите нормально, где и как его найти.
Попробуйте найти так: системный диск(где Windows установлена):\Пользователи (или Users)\Нужный пользователь\AppData\Local\1c
А как очистить КЭШ для самого вёб-сервера ?
Ведь в базу за данными лезет именно он — и «залипнуть» может и в этом моменте.
У нас к примеру сейчас постоянно «версия программы обновлена», при том что всё обновлено и все возможные кешы почистили и службу презапустили.
Для ускорения работы 1С сделайте RAM-диск (диск в системе, который на самом деле находится в оперативной памяти) и присвойте букву R
В автозапуск всем пользователям поставить следующий скрипт ram_disk.bat
rem Удаляет кэш на RAM диске
rd /s /q «R:\%USERNAME%»
rem Создаем каталоги на RAM-диске и связываем их с папками пользователя
rem Работает для всех версий 1С ред 8
mkdir R:\%USERNAME%\Local\1C
rd /s /q «C:\Users\%USERNAME%\AppData\Local\1C»
mklink /j «C:\Users\%USERNAME%\AppData\Local\1C» «R:\%USERNAME%\Local\1C»
rem в Roaming находится список баз пользователя, поэтому удаляем только эти подпапки и создаем новые на RAM диске
mkdir R:\%USERNAME%\Roaming\1C\1cv8
rd /s /q «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv8»
mklink /j «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv8» «R:\%USERNAME%\Roaming\1C\1cv8»
mkdir R:\%USERNAME%\Roaming\1C\1cv81
rd /s /q «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv81»
mklink /j «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv81» «R:\%USERNAME%\Roaming\1C\1cv81»
mkdir R:\%USERNAME%\Roaming\1C\1cv82
rd /s /q «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv82»
mklink /j «C:\Users\%USERNAME%\AppData\Roaming\1C\1cv82» «R:\%USERNAME%\Roaming\1C\1cv82»
4. Запустите сканирование SFC
- Щелкните правой кнопкой мыши кнопку «Пуск» и откройте командную строку (администратор).
- Введите следующую строку и нажмите Enter: SFC / SCANNOW
- Дождитесь окончания процесса (это может занять некоторое время).
- Если решение найдено, оно будет применено автоматически.
- Теперь закройте командную строку и перезагрузите компьютер.
SFC-сканирование – это еще один инструмент для устранения неполадок, который мы собираемся попробовать. Это средство сканирования командной строки, которое сканирует ваш компьютер на наличие возможных проблем и решает их на ходу. Многие пользователи сообщают, что сканирование SFC может быть полезно при работе с проблемами BSOD в Windows 10)
2. Обновите ваши драйверы
Многие ошибки BSoD вызваны устаревшими драйверами, которые не полностью совместимы с Windows 10)
Многие пользователи сообщали, что после обновления драйверов Realtek ошибка CACHE MANAGER была устранена, поэтому, если вы используете вышеупомянутые драйверы, обязательно обновите их до последней версии.
Стоит отметить, что эта ошибка может появиться практически в любом устаревшем драйвере, поэтому рекомендуется обновить как можно больше драйверов.
Обновление драйверов относительно просто, а чтобы обновить драйвер, просто посетите веб-сайт производителя оборудования и загрузите последние версии драйверов для вашего устройства.
В некоторых случаях достаточно установить драйверы, которые вы получили на компакт-диске, вместе с вашим оборудованием.
2.1 Обновлять драйверы автоматически
Note: Некоторые драйверы должны быть установлены в несколько этапов, поэтому вам придется нажимать кнопку «Обновить» несколько раз, пока не будут установлены все их компоненты.
Поиск драйверов самостоятельно может занять много времени. Поэтому мы рекомендуем использовать инструмент, который делает это автоматически.
Использование автоматического обновления драйверов избавит вас от необходимости вручную искать драйверы и всегда будет поддерживать вашу систему обновленной версией драйверов.
Tweakbit Driver Updater (одобрен Microsoft и Norton Antivirus) поможет вам автоматически обновить драйверы и предотвратить повреждение вашего ПК, вызванное установкой неправильных версий драйверов. После нескольких испытаний наша команда пришла к выводу, что это лучшее автоматизированное решение.
Кеш 1С
Кеширивание — процесс создания буфера часто используемой и, как правило, статичной информации. Кеширование используется для ускорения работы программы, в частности, в 1С на компьютер пользователя подгружаются файлы конфигурации, чтобы не запрашивать их с сервера при каждом обращении.
Однако очень часто платформа 1С неправильно отрабатывает кеширование конфигурации, и в результате мы получаем неадекватное поведение конфигурации.
Причины некорректного поведения могут быть разные: динамическое обновление конфигурации, программные или аппаратные сбои.
«Горячие» ключи
Данные в кэше разнородные, некоторые из них могут запрашиваться очень часто. В этом случае проблемы могут создавать даже не параллельные обновления, а само количество чтений. Примером подобного ключа у нас является счётчик общего количества пользователей:
Этот счётчик — один из самых популярных ключей, и при использовании обычного подхода все запросы к нему будут идти на один сервер (поскольку это всего один ключ, а не множество однотипных), поведение которого может измениться и замедлить работу с другими ключами, хранящимися там же.
Чтобы решить эту проблему, нужно писать данные не в один кэширующий сервер, а сразу в несколько. В этом случае мы кратно снизим количество чтений этого ключа, но усложним его обновления и код выбора сервера — ведь нам нужно будет использовать отдельный механизм.
Мы в Badoo решаем эту проблему тем, что пишем данные во все кэширующие серверы сразу. Благодаря этому при чтении мы можем использовать общий механизм выбора сервера — в коде можно использовать обычный механизм шардирования по User ID, и при чтении не нужно ничего знать про специфику этого «горячего» ключа. В нашем случае это работает, поскольку у нас сравнительно немного серверов (примерно десять на площадку).
Если бы кэширующих серверов было намного больше, то этот способ мог бы быть не самым удобным — просто нет смысла дублировать сотни раз одни и те же данные. В таком случае можно было бы дублировать ключ не на все серверы, а только на их часть, но такой вариант требует чуть больше усилий.
Если вы используете определение сервера по ключу кэша, то можно добавить к нему ограниченное количество псевдослучайных значений (сделав из total_users_count что-то вроде t otal_users_count_1 , total_users_count_2 и т. д.). Подобный подход используется, например, в Etsy.
Если вы используете явные указания параметра шардирования, то просто передавайте туда разные псевдослучайные значения.
Главная проблема с обоими способами — убедиться, что разные значения действительно попадают на разные кэширующие серверы.
8. Проверьте ваше оборудование
Если вы недавно установили какое-либо новое оборудование, обязательно удалите или замените его. Вновь установленное оборудование может быть несовместимо с вашей материнской платой, что может быть причиной ошибки CACHE_MANAGER.
Если вы не устанавливали какое-либо новое оборудование в последнее время, мы рекомендуем вам проверить вашу оперативную память, так как она является наиболее частой причиной ошибок BSoD.
Чтобы проверить свою оперативную память, вам нужно использовать такие инструменты, как MemTest86 +. Просто поместите инструмент на USB-накопитель и загрузите с него компьютер. Позвольте MemTest86 + работать в течение нескольких часов.
Если у вас установлено более одного модуля ОЗУ, вы можете проверить их один за другим, пока не найдете неисправный.
Помимо неисправного ОЗУ, ваш жесткий диск может также вызвать ошибку BSoD CACHE_MANAGER, поэтому убедитесь, что жесткий диск подключен правильно.
В худшем случае вам может понадобиться заменить жесткий диск или попробовать, если ваш жесткий диск работает на другом компьютере. Если и ОЗУ, и жесткие диски работают правильно, обязательно проверьте, правильно ли работает другое оборудование.
- Что вызывает синий экран ошибок смерти?
Нет четкой причины, по которой возникает синий экран ошибок смерти. Они могут быть вызваны фатальными системными ошибками или отказом оборудования. Единственная разница между ними – это ярлык, которым они обычно сопровождаются.
- Как узнать, почему я получаю синий экран ошибок смерти?
Синий экран ошибок смерти всегда оставляет файлы журнала, которые вы можете просмотреть позже. Имея немного знаний, вы даже можете точно определить, почему в вашем случае произошла конкретная ошибка.
- Как мне навсегда избавиться от ошибок Blue Screen of Death?
Исключая проблемы с оборудованием, единственный способ избавиться от ошибок Blue Screen of Death на 100% состоит в том, чтобы сделать полное Windows 10 перезагрузка.
От редактора Note: Этот пост был первоначально опубликован в октябре 2018 года и с тех пор был обновлен и обновлен в апреле 2020 года для обеспечения свежести, точности и полноты.
Очень часто у пользователей появляются странные ошибки: у одного пользователя программа работает правильно, у другого, рядом, на другом компьютере, совершенно иначе. Зачастую после долгих разбирательств оказывается, что причина таких «глюков» в 1С 8 — кэш.
Ниже расскажу, что такое кэш 1С и как его почистить.
«Холодный» старт и «прогревание» кэша
Нужно отметить, что проблема массового обновления данных из-за их отсутствия в кэше может быть вызвана не только большим количеством обновлений одного и того же ключа, но и большим количеством одновременных обновлений разных ключей. Например, такое может произойти, когда вы выкатываете новый «популярный» функционал с применением кэширования и фиксированным сроком жизни кэша.
В этом случае сразу после выкатки данные начнут загружаться (первое проявление проблемы), после чего попадут в кэш — и какое-то время всё будет хорошо, а после истечения срока жизни кэша все данные снова начнут загружаться и создавать повышенную нагрузку на базу данных.
От такой проблемы нельзя полностью избавиться, но можно «размазать» загрузки данных по времени, исключив тем самым резкое количество параллельных запросов к базе. Добиться этого можно несколькими способами:
- плавным включением нового функционала. Для этого необходим механизм, который позволит это сделать. Простейший вариант реализации — выкатывать новый функционал включённым на небольшую часть пользователей и постепенно её увеличивать. При таком сценарии не должно быть сразу большого вала обновлений, так как сначала функционал будет доступен только части пользователей, а по мере её увеличения кэш уже будет «прогрет».
- разным временем жизни разных элементов набора данных. Данный механизм можно использовать, только если система в состоянии выдержать пик, который наступит при выкатке всего функционала. Его особенность заключается в том, что при записи данных в кэш у каждого элемента будет своё время жизни, и благодаря этому вал обновлений сгладится гораздо быстрее за счёт распределения последующих обновления во времени. Простейший способ реализовать такой механизм — умножить время жизни кэша на какой-то случайный множитель:
Если по какой-то причине не хочется использовать случайное число, можно заменить его псевдослучайным значением, полученным с помощью хеш-функции на базе каких-нибудь данных (например, User ID).
Пример
Я написал небольшой скрипт, который эмулирует ситуацию «непрогретого» кэша.
В нём я воспроизвожу ситуацию, при которой пользователь при запросе загружает данные о себе (если их нет в кэше). Конечно, пример синтетический, но даже на нём можно увидеть разницу в поведении системы.
Вот как выглядит график количества hit miss-ов в ситуации с фиксированным (fixed_cache_misses_count) и различным (random_cache_misses_count) сроками жизни кэша:
Видно, что в начале работы в обоих случаях пики нагрузки очень заметны, но при использовании псевдослучайного времени жизни они сглаживаются гораздо быстрее.
Параллельные запросы на обновление данных
Посмотрите на такой простой кусочек кода:
Что произойдёт при отсутствии запрашиваемых данных в кэше? Судя по коду, должен запуститься механизм, который достанет эти данные. Если код выполняется только в один поток, то всё будет хорошо: данные будут загружены, помещены в кэш и при следующем запросе взяты уже оттуда. А вот при работе в несколько параллельных потоков всё будет иначе: загрузка данных будет происходить не один раз, а несколько.
Выглядеть это будет примерно так:
На момент начала обработки запроса в процессе №2 данных в кэше ещё нет, но они уже читаются из базы данных в процессе №1. В этом примере проблема не такая существенная, ведь запроса всего два, но их может быть гораздо больше.
Количество параллельных загрузок зависит от количества параллельных пользователей и времени, которое требуется на загрузку необходимых данных.
Предположим, у вас есть какой-то функционал, использующий кэш с нагрузкой 200 запросов в секунду. Если на на загрузку данных нужно 50 мс, то за это время вы получите 50 / (1000 / 200) = 10 запросов.
То есть при отсутствии кэша один процесс начнёт загружать данные, и за время загрузки придут ещё девять запросов, которые не увидят данные в кэше и тоже станут их загружать.
Эта проблема называется cache stampede (русского аналога этого термина я не нашёл, дословно это можно перевести как «паническое бегство кэша», и картинка в начале статьи показывает пример этого действия в дикой природе), hit miss storm («шторм непопаданий в кэш») или dog-pile effect («эффект собачьей стаи»). Есть несколько способов её решения:
Блокировка перед началом выполнения операции пересчёта/ загрузки данных
Суть этого метода состоит в том, что при отсутствии данных в кэше процесс, который хочет их загрузить, должен захватить лок, который не даст сделать то же самое другим параллельно выполняющимся процессам. В случае memcached простейший способ блокировки — добавление ключа в тот же кэширующий сервер, в котором должны храниться сами закэшированные данные.
При этом варианте данные обновляются только в одном процессе, но нужно решить, что делать с процессами, которые попали в ситуацию с отсутствующим кэшем, но не смогли получить блокировку. Они могут отдавать ошибку или какое-то значение по умолчанию, ждать какое-то время, после чего пытаться получить данные ещё раз.
Кроме того, нужно тщательно выбирать время самой блокировки — его гарантированно должно хватить на то, чтобы загрузить данные из источника и положить в кэш. Если не хватит, то повторную загрузку данных может начать другой параллельный процесс. С другой стороны, если этот временной промежуток будет слишком большим и процесс, получивший блокировку, умрёт, не записав данные в кэш и не освободив блокировку, то другие процессы также не смогут получить эти данные до окончания времени блокировки.
Вынос обновлений в фон
Основная идея этого способа — разделение по разным процессам чтения данных из кэша и записи в него. В онлайн-процессах происходит только чтение данных из кэша, но не их загрузка, которая идёт только в отдельном фоновом процессе. Данный вариант делает невозможными параллельные обновления данных.
Этот способ требует дополнительных «расходов» на создание и мониторинг отдельного скрипта, пишущего данные в кэш, и синхронизации времени жизни записанного кэша и времени следующего запуска обновляющего его скрипта.
Этот вариант мы в Badoo используем, например, для счётчика общего количества пользователей, про который ещё пойдёт речь дальше.
Вероятностные методы обновления
Суть этих методов заключается в том, что данные в кэше обновляются не только при отсутствии, но и с какой-то вероятностью при их наличии. Это позволит обновлять их до того, как закэшированные данные «протухнут» и потребуются сразу всем процессам.
Для корректной работы такого механизма нужно, чтобы в начале срока жизни закэшированных данных вероятность пересчёта была небольшой, но постепенно увеличивалась. Добиться этого можно с помощью алгоритма XFetch, который использует экспоненциальное распределение. Его реализация выглядит примерно так:
В данном примере $ttl — это время жизни значения в кэше, $delta — время, которое потребовалось для генерации кэшируемого значения, $expiry — время, до которого значение в кэше будет валидным, $beta — параметр настройки алгоритма, изменяя который, можно влиять на вероятность пересчёта (чем он больше, тем более вероятен пересчёт при каждом запросе). Подробное описание этого алгоритма можно прочитать в white paper «Optimal Probabilistic Cache Stampede Prevention», ссылку на который вы найдёте в конце этого раздела.
Нужно понимать, что при использовании подобных вероятностных механизмов вы не исключаете параллельные обновления, а только снижаете их вероятность. Чтобы исключить их, можно «скрестить» несколько способов сразу (например, добавив блокировку перед обновлением).
1. Обновление Windows 10 регулярно
Microsoft всегда работает над Windows 10 и запустить новые функции через Windows Обновить. В дополнение к новым функциям выпущено множество исправлений и ошибок безопасности, и многие из этих обновлений исправляют различные проблемы совместимости.
Поскольку CACHE_MANAGER BSoD может быть вызван устаревшим или несовместимым оборудованием, всегда полезно сохранить Windows 10 дней с последними обновлениями.
При загрузке Windows Регулярное обновление уменьшит вероятность возникновения проблем несовместимости и ошибок BSoD, поэтому мы настоятельно рекомендуем вам обновить Windows 10 так часто, как вы можете.
Первый способ — почистить кэша 1С вручную
Для решения проблем и «глюков» 1С обычно помогает очистка кеша платформы 1C 8.3.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получите понятные самоучители по 1С бесплатно:
Делается это следующим образом:
шаг 1
Найти каталог, где хранятся временные файлы 1С, их можно увидеть в меню настройки в списке ИБ:
2 шаг
Мы получили адрес вроде
C:\Documents and Settings\username\Application Data\1C\1Cv82\tmplts\1c
Папки с кэшем расположены по адресу
C:\Documents and Settings\username\Application Data\1C\1Cv82\
*где username — имя пользователя системы, а папка 1Cv82 может отличаться в зависимости от версии платформы 1С
Зайдя туда, мы находим множество (количество папок равно количеству конфигураций) интересных папок:
Все выделенные каталоги являются кешем БД 1С, их можно смело удалять. Перед удалением обязательно необходимо выйти из ИБ.
Если Вам не хочется искать, где расположены файлы, Вы можете воспользоваться специальной программой (бат-файл), которая очищает папки с временными файлами — скачать ОчисткаКеша.bat. Не забывайте, что Вы пользуетесь ими на свой страх и риск. Они содержат следующую команду:
rmdir «%AppData%\1C\1Cv8» /S /Q
rmdir «%LOCALAPPDATA%\1C\1Cv8» /S /Q
Исправление структуры базы данных
На данном этапе в первую очередь мы должны испробовать штатные механизмы тестирования и исправления базы. Это относится как к запуску соответствующего пункта в конфигураторе, так и запуску файла chdbfl.exe.
Но практика показывает, что эти механизмы не всегда помогают.
Получите понятные самоучители по 1С бесплатно:
Тогда поступаем следующим образом. Разворачиваем чистую информационную базу. Цель – получить файл конфигурации (с расширением cf).
Затем снимаем неработающую конфигурацию с поддержки и делаем объединение с сохраненным файлом cf. Если требуется, объединяем с восстановлением поддержки. Не забудьте перед этим действием сделать резервную копию!
Важно! При объединении с чистой типовой конфигурацией внесенные ранее изменения в Вашей конфигурации могут пропасть. Нужно будет добавить их вновь. Будьте внимательны!
5. Запустите DISM
5.1 Стандартная форма
- Щелкните правой кнопкой мыши Пуск и откройте командную строку (администратор).
- Вставьте следующую команду и нажмите Enter:
- DISM / Online / Очистка изображения / RestoreHealth
- Подождите, пока сканирование не завершится.
- Перезагрузите компьютер и попробуйте обновить снова.
5.2 С Windows установочный носитель
- Вставьте свой Windows установочный носитель
- Щелкните правой кнопкой мыши меню «Пуск» и выберите в меню командную строку (администратор).
- В командной строке введите следующие команды и нажмите Enter после каждого:
- dism / online / cleanup-image / scanhealth
- dism / online / cleanup-image / restorehealth
- Теперь введите следующую команду и нажмите Enter:
- DISM / Online / Cleanup-Image / RestoreHealth /source:WIM:X:SourcesInstall.wim:1 / Ограниченный доступ
- Обязательно поменяйте X значение с буквой диска, установленной с Windows 10 установка.
- После завершения процедуры перезагрузите компьютер.
И последний инструмент для устранения неполадок, который мы собираемся протестировать, это DISM. Это, пожалуй, самый мощный инструмент устранения неполадок, поскольку он снова отображает образ системы.
Перенос данных в чистую, не «битую» информационную базу
Создаем чистую информационную базу того же релиза, что и «битая», и с помощью обработки «Выгрузка Загрузка данных XML«, которую можно найти на диске ИТС, переносим данные в наверняка целостную базу. Здесь опять же повторюсь, что структуры баз должны совпадать, и если в Вашей базе есть структурные изменения, их сначала нужно добавить в чистую.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
При запуске выпадает ошибка "compile shader material cache,this may take several minutes. press button to start" после установки патча 1.75(на 74 не было)
Перевод "сейчас произведется компиляция шейдерных материалов, что займет несколько минут. Нажмите на кнопку для старта" Ждал минут 10-15 может больше толку 0.
Видео карта GTS 450 на ней есть поддержка 3.0
В общем в чем дело. _
kmoj
Ждешь распродажи в стиме, покупаешь все части игры за 56 рублей, устанавливашь и будет тебе счастье.
То что пиратки зло видимо не в этом случае)
Такая же проблема случилась на лицензии, нашёл следующий совет(текст был на английском это автоперевод):
Андрей Беликов: Вот решение. Это помогает мне.
Запустите игру в оконном режиме:
1. Перейдите в \ Ini \
2. Откройте ge3.ini.
3. Измените Fullscreen = true на Fullscreen = false.
4. Сохраните ваши изменения.
После этого вы увидите окно «Компилировать кеш шейдерного материала». Подтвердите «ОК» и подождите около 5 минут. Вы можете пойти на чашку кофе :) После этого появятся видео, и вы сможете переключаться в меню игры.
Выйдите из игры и отмените изменения, чтобы вернуться в полноэкранный режим.
Меня зовут Виктор Пряжников, я работаю в SRV-команде Badoo. Наша команда занимается разработкой и поддержкой внутреннего API для наших клиентов со стороны сервера, и кэширование данных — это то, с чем мы сталкиваемся каждый день.
Существует мнение, что в программировании есть только две по-настоящему сложные задачи: придумывание названий и инвалидация кэша. Я не буду спорить с тем, что инвалидация — это сложно, но мне кажется, что кэширование — довольно хитрая вещь даже без учёта инвалидации. Есть много вещей, о которых следует подумать, прежде чем начинать использовать кэш. В этой статье я попробую сформулировать некоторые проблемы, с которыми можно столкнуться при работе с кэшем в большой системе.
Я расскажу о проблемах разделения кэшируемых данных между серверами, параллельных обновлениях данных, «холодном старте» и работе системы со сбоями. Также я опишу возможные способы решения этих проблем и приведу ссылки на материалы, где эти темы освещены более подробно. Я не буду рассказывать, что такое кэш в принципе и касаться деталей реализации конкретных систем.
При работе я исхожу из того, что рассматриваемая система состоит из приложения, базы данных и кэша для данных. Вместо базы данных может использоваться любой другой источник (например, какой-то микросервис или внешний API).
7. Запустите chkdsk
- пресс Windows Key + X открыть расширенное пользовательское меню.
- выбрать Командная строка (администратор),
- После запуска командной строки введите chkdsk / f / r C: и нажмите Enter, чтобы запустить его.
- Мы должны отметить, что вам придется выполнять это сканирование для каждого раздела на жестком диске, поэтому обязательно замените C соответствующей буквой на вашем жестком диске.
- Мы должны отметить, что вам придется выполнять это сканирование для каждого раздела на жестком диске, поэтому обязательно замените C соответствующей буквой на вашем жестком диске.
CACHE_MANAGER Ошибка BSoD может быть вызвана вашим жестким диском, поэтому рекомендуется выполнить сканирование chkdsk.
Количество пользователей сообщило, что они даже не могут получить доступ Windows 10 из-за ошибки CACHE_MANAGER, и в этом случае вы можете выполнить сканирование chkdsk, выполнив следующие действия:
- Перезагрузите компьютер, пока Windows 10 сапог Вам нужно будет повторить этот шаг несколько раз, прежде чем начнется автоматическое восстановление.
- выбирать Устранение неполадок> Дополнительные параметры> Командная строка,
- После запуска командной строки введите chkdsk / f / r C: и дождитесь завершения сканирования. Не забудьте проверить все остальные разделы, изменив букву C на соответствующую букву.
Очистка кеша 1С
Порой достаточно удалить строку с наименованием информационной базы из списка, а затем снова добавить. При этом создастся новая, чистая папка для кеша. Часто таким способом пользоваться не рекомендую, так как папка со старым кешем остается и засоряет диск.
Читайте также: