datastore edb что это
Что такое DataStore.edb и почему он замедляет работу моего компьютера?
Если вы боретесь с этой конкретной проблемой, есть несколько исправлений, которые, по мнению пользователей, помогли решить эту проблему. Ниже представлен набор решений, которые позволили пользователям решить проблему. Пожалуйста, следуйте каждому методу по порядку, пока не найдете исправление, которое работает в вашей ситуации.
Примечание. Если вы используете Vista, начните сразу с метода 2.
Метод 1. Установите Центр обновления Windows KB3050265 (только для Windows 7)
Имейте в виду, что обновление не является обязательным и не будет применено, если вы не установите его самостоятельно. Если вы столкнулись с этой проблемой в Windows 7, следуйте приведенному ниже руководству, чтобы установить Центр обновления Windows KB3050265. Если это не работает, удалите обновление и перейдите к другим методам ниже:
Центр обновления Windows KB3050265 (32-разрядная версия)
Центр обновления Windows KB3050265 (64-разрядная версия)
Метод 2: использование esentutl.exe для дефрагментации datastore.edb
Прежде чем мы рассмотрим более подробные решения, давайте посмотрим, решит ли проблему дефрагментация файла datastore.edb. По-видимому, это только временное исправление, поскольку проблема появится снова со временем, когда в файлах datastore.edb накопится достаточно новой информации.
Метод 3: Использование Windows Repair (All-in-One)
Если официальные исправления не работают или неприменимы, есть еще одно популярное исправление, которое решит проблему, если она связана с повреждением системных файлов.
Сбросить разрешения службы
Восстановить WMI
Зарегистрировать системные файлы
Удалить политики, установленные заражением
Восстановить обновления Windows
Восстановить MSI (установщик Windows)
Метод 4: повторная инициализация папки SoftwareDistribution
Вот краткое руководство по очистке папки SoftwareDistribution через командную строку:
чистая остановка wuauserv
чистые стоповые биты
ren C: \ Windows \ SoftwareDistribution SoftwareDistribution.old
Примечание. Эта команда переименовала папку SoftwareDistribution. Расширение .old заставит Windows воссоздать новую папку SoftwareDistribution.
чистый старт wuauserv
чистые стартовые биты
Если вы по-прежнему испытываете высокую загрузку диска, перейдите к способу ниже.
Метод 5: исключить datastore.edb из антивирусной проверки
Как оказалось, эта проблема также может быть вызвана чрезмерно усердной антивирусной программой. Домашним пользователям, у которых наблюдается медленный запуск, удалось решить эту проблему, включив файл datastore.edb в список исключений Microsoft Security Essentials / Windows Defender.
Вот краткое руководство по исключению datastore.edb и других файлов, используемых им, из вашего антивируса:
c: \ windows \ softwaredistribution \ хранилище данных \ журналы \
Метод 6: отключение WU (обновления Windows)
Однако последствия огромны, поскольку вы избавитесь от автоматического получения обновлений безопасности и других исправлений стабильности. В идеале вы должны не забывать регулярно включать службу WU после выполнения этого метода, чтобы ваша система постоянно обновлялась.
Если обмен потенциального заражения вредоносным ПО на повышение скорости реакции системы кажется приемлемым, выполните следующие действия, чтобы отключить обновления Windows:
Примечание. Не забывайте регулярно возвращаться к экрану « Службы» и повторно включать службу Центра обновления Windows, чтобы обеспечить наличие последних обновлений безопасности. Оставьте службу включенной до тех пор, пока не будут применены все обновления, выполните описанные выше действия, чтобы снова отключить WU.
«Неуловимый» список установленных обновлений Windows
Вы когда-нибудь задумывались, с помощью чего формируется список установленных обновлений Windows? А через какое API его достать? Ответы на эти и другие возникающие вопросы я постараюсь дать в своём небольшом исследовании.
Предыстория или с чего всё началось.
В нашей компании каждый год проходит конференция молодых специалистов, где каждый участник может решить проблему какого-либо отдела (список тем заранее предлагается).
Раньше на каждое «ТО» с помощью WSUS подтягивались все выпущенные обновления и распространялись на все машины. Также периодически выходили ТСБ (технические сервисные бюллетени), в которых указывалось, что требуется установить необходимые обновления в виде изолированных пакетов. В итоге у нас накапливаются обновления, которые в WSUS отследить нельзя, а можно было увидеть только через панель управления в разделе «Установленные обновления».
Бывают ситуации, когда АРМ или сервер «падает» и приходится его восстанавливать из образа, созданного некоторое время назад. При восстановлении из образа есть вероятность того, что мы можем потерять нужные нам обновления (которые пришли в виде изолированных пакетов), которые устанавливались до падения машины. Объяснил максимально подробно насколько мог, потому что уточнения будут уже коммерческой тайной.
Вот поэтому и возникла идея создать программу, которая бы могла извлечь этот список обновлений (желательно удаленно по локальной сети), записать в файл/базу, сравнить текущий перечень с неким шаблоном и выдать сообщение на SCADA систему через один из протоколов — SNMP, OPC.
Как вы могли догадаться из названия статьи, уже на выборе метода получения списка у меня возникла непростая задача. Я, как обычно, решил поискать нужное в поисковике, задал вопросы на профильных ресурсах (раз, два, на английском stackoverflow почему-то не понравился мой вопрос и его пришлось удалить), но все ответы не давали нужного результата. Поэтому пришлось разбираться самому, о чем и пойдет речь далее.
Консольные команды
Начнем с простого и воспользуемся тем, что предлагает нам Windows без использования сторонних средств. Это можно сделать с помощью следующих команд:
Вывод консольной команды можно перенаправить в файл и дальше начать его парсить, но это неправильно, плюс вызов программы (по правилам СБ не пройдет) и об удаленном получении списка речь не идёт. Поэтому предлагаю вам просто вызвать команды, сравнить количество обновлений в каждом списке, со списком через Панель управления и продолжить наше расследование дальше.
Формально все методы получения списка обновлений можно разделить на две группы: локальные и сетевые.
Все методы проверялись на чистых образах систем (Windows 7, 8, Server 2012 R2) с интегрированными обновлениями, после каждого обновления через Центр обновления с официальных серверов Microsoft проводилась дополнительная проверка. Остановимся на каждом из них подробнее.
Примечание: далее для своего удобства все результаты я буду вставлять в List. Это, возможно, не рационально, но тогда мне это казалось хорошей идеей.
Есть и вторая вариация этого метода: Update Session — получение информации с помощью подключения к сессии обновления Windows Update Agent (в данном случае работаем не напрямую с библиотекой).
Microsoft подсказывает об удаленном использовании API.
Главный минусы этих двух методов — не позволяют найти исправления KB, которые не распространяются через Центр обновления Windows. Можно увидеть только то, что прошло через сам агент обновления, то есть данный вариант нас не устраивает.
Система обслуживания образов развертывания и управления ими (Deployment Image Servicing and Management) — это средство командной строки, которое может использоваться для обслуживания образа Windows или для подготовки образа среды предустановки Windows (Windows PE). Является заменой диспетчера пакетов (Pkgmgr.exe), PEimg и Intlcfg.
Данная утилита используется для интеграции обновлений, сервис паков в образ системы. Обновления Windows представляют собой отдельные модули, которые могут быть представлены в нескольких вариантах:
Количество обновлений совпадало с количеством из списка Панели управления до первого апдейта через центр управления — после него количество обновлений стало меньше (было 214, стало 209), хотя по логике они должны были увеличиться. Примеры вывода До обновления, После обновления.
С чем это связано я могу только предполагать — возможно, какие-то обновления замещали предыдущие, следовательно, и количество стало меньше.
Чуть позже я наткнулся на утилиту от китайцев DISM++, которая основана не на DISM API или DISM Core API, но имеющиеся в ней библиотеки не имеют нужных мне открытых методов, поэтому я забросил эту идею и продолжил поиски дальше.
Windows Server Update Services (WSUS) — сервер обновлений операционных систем и продуктов Microsoft. Сервер обновлений синхронизируется с сайтом Microsoft, скачивая обновления, которые могут быть распространены внутри корпоративной локальной сети. Опять же специальный инструмент, предназначенный для работы с обновлениями.
Распространяется только на серверных редакциях ОС Windows, поэтому был развернут следующий стенд:
Чтобы не выделять раздел жесткого диска для новой системы я пользуюсь WinNTSetup и устанавливаю систему в VHD диски — загрузчик, начиная с Windows 7 (редакций Professional/Ultimate), прекрасно справляется с загрузкой с образа диска. Полученные таким образом диски можно спокойно использовать и в Hyper-V — убиваете сразу двоих зайцев. Не забудьте только сделать заранее копию хранилища BCD через команду bcdedit /export e:\bcd_backup.bcd.
Настраивать AD для рассылки обновлений я не захотел, поэтому просто прописал в групповых политиках путь к WSUS серверу:
Обязательно уделите внимание на порт, я из-за опечатки (8350 вместо 8530) не мог получить обновления на клиентских машинах, хотя сделано было всё верно. Так же названия пунктов в групповых политиках на Windows 7 и Windows 8 различаются.
Для получения отчета средствами WSUS необходимо дополнительно установить пакет — система уведомит вас об этом.
Так как интернета нет, то ситуация с обновлениями выходит как на скриншоте ниже:
Поведение похоже на WUApi — если обновления не прошли через них, то они не знают об этом. Поэтому данный метод снова не подходит.
Windows Management Instrumentation (WMI) в дословном переводе — инструментарий управления Windows.
WMI — реализованный корпорацией Майкрософт стандарт управления предприятием через Интернет для централизованного администрирования и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows. WMI является открытой унифицированной системой интерфейсов доступа к любым параметрам операционной системы, устройствам и приложениям, которые функционируют в ней.
Данный метод позволяет получить данные как с локальной машины, так и удаленно в пределах локальной сети. Для обращения к объектам WMI используется специфический язык запросов WMI Query Language (WQL), который является одной из разновидностей SQL. Получать список мы будем через WMI класс win32_quickfixengineering.
Количественно всё совпадает (даже после обновлений), поэтому было решено использовать этот метод. Для программного создания WMI запросов советую использовать следующую утилиту — WMI Delphi Code Creator. Благодаря ей я немного по другому взглянул на свой код и решил использовать заготовку из этой программы.
Полученные данные методом WMI меня не остановили, и я решился на „поверхностный реверс-инжиниринг“. Воспользуемся утилитой Process Monitor из сборника программ Sysinternals Suite для выявления файлов и ветвей реестра, которые используются при вызове выше перечисленных консольных команд и обращению к пункту „Установленные обновления“ через Панель управления.
Моё внимание привлек файл wuindex.xml, расположенный в папке C:\Windows\servicing\Packages\. Для его анализа была написана следующая программа:
К сожалению, данный файл встречается не на всех системах и принцип его генерирования и обновления остался для меня загадкой. Поэтому снова данный метод нам не подходит.
Вот мы подошли к тому, с чем связаны все эти методы. Продолжая анализ логов Process Monitor я выявил следующие папки и файлы.
Файл DataStore.edb, расположенный в папке C:\Windows\SoftwareDistribution\DataStore. Это база данных, в которой содержится история всех обновлений установленной версии Windows, включая те обновления, которые только стоят в очереди.
Для анализа файла DataStore.edb использовалась программа ESEDatabaseView. В БД существует таблица tbUpdates, содержимое которой трудно интерпретировать.
После мое внимание привлек процесс TiWorker.exe, который вызывался каждый раз при открытии пункта в Панели управления. Он „ходил“ по многим папкам, одна из которых вывела меня на верный путь.
C:\Windows\SoftwareDistribution — это папка, используемая службой обновления Windows для загрузки обновлений на компьютер с последующей их установкой, а также хранит сведения обо всех ранее установленных обновлениях.
Папка WinSxS, расположенная по адресу C:\Windows\winsxs. Это служебная папка операционной системы Windows служащая для хранения ранее установленных версий системных компонентов. Благодаря ее наличию существует возможность отката к более старой версии обновления в случае необходимости.
C:\Windows\servicing — основная составляющая всей системы, имя которой Component-Based Servicing (CBS).
CBS — обслуживание на основе компонентов, составляющая Windows, интегрированная с службой Windows Update. В противоположность обслуживанию на основе файлов File-Based Servicing (FBS) (для ОС, предшествующих Windows Vista), в котором файлы обновлялись прямо в системных директориях, в CBS появилась целая иерархия директорий и целое семейство (стек) модулей/библиотек обслуживания.
CbsApi.dll — основная библиотека поддержки технологии CBS. Не имеет открытых методов, поэтому напрямую использовать её я не смог. Microsoft использует TrustedInstaller.exe и TiWorker.exe для доступа к методам данной библиотеки и уже через эти процессы выводит нужные нам данные. Записи ведутся в C:\Windows\Logs\CBS\CBS.log.
На момент создания прототипа программы (на скриншотах можете увидеть май 2019) русскоязычной информации о CBS не было, но в конце августа нашлась очень хорошая статья в блоге — http://datadump.ru/component-based-servicing. Очень интересная статья, которая подтвердила мой опыт и собрала в себе нужную информацию. И ещё по теме: http://www.outsidethebox.ms/17988/
Вывод
Microsoft слишком усложнила тривиальную задачу по получению списка обновлений и сделала этот процесс не совсем явным. Всё это сделано для безопасности, но не для простоты использования. Соглашусь с автором статьи — в получении обновлений стали отсутствовать предсказуемость и прозрачность.
В результате исследования была написана следующая программа, демонстрацию работы которой можно увидеть в данном видео:
Оптимизация системной базы Datastore.edb
Datastore.edb — база данных, содержащая обновления текущей версии Windows и историю закачек, инсталляций патчей для неё. Она связана с системным приложением Third Party Application. Полностью удалять из системы этот файл и директорию, в которой он расположен, нельзя. Чтобы уменьшить его размеры, применяется специальная оптимизация (выборочная очистка и обновление элементов). А в случае возникновения системных ошибок, связанных с Datastore.edb, проводятся работы по восстановлению её целостности и работоспособности.
Очистка базы
1. Во избежание программных конфликтов отключите модуль обновлений ОС:
Также запуск апдейта ОС можно отключить в командной строке. Чтобы воспользоваться этим методом, выполните следующее:
2. Нажмите комбинацию клавиш — «Win» + «R».
3. Вставьте в строчку «Открыть» этот путь:
4. Удалите в открывшейся папке всё содержимое:
5. Таким же образом (пункты №3 и №4 текущей инструкции) очистите директорию:
6. По завершении процедуры удаления при необходимости можно снова включить модуль обновления:
Через «Пуск»: Панель управления → Администрирование → Службы → Центр обновления Windows → в «Тип запуска» установить «Автоматически» → кнопка «Запустить»;
В консоли «CMD»: введите директиву — net start wuauserv; нажмите «Enter».
7. Из Панели управления перейдите в раздел «Система и безопасность» → «Центр обновления Windows» → «Поиск обновлений».
8. Загрузите и установите найденные патчи в операционную систему (следуйте инструкциям модуля).
Восстановление работоспобности базы
Если в ходе эксплуатации системы на дисплее появляются ошибки, в которых фигурирует имя базы («…» в сообщениях — Datastore.edb):
Попробуйте задействовать одну из нижепредставленных инструкций по устранению неполадок базы.
Очистка Windows
1. Откройте окно «Выполнить».
2. Введите команду — cleanmgr.
4. После анализа директорий выберите в дополнительной панели — «Диск C» (системный раздел).
5. В окне «Очистка диска» щелчком левой кнопки поставьте флажки напротив элементов, нуждающихся в очистке (обновления, отчёты, архивы, временные файлы и т.д.).
6. Клацните «OK», чтобы запустить нейтрализацию бесполезных элементов в системе.
7. Перезагрузите ПК
Обновление драйверов
Проверьте работоспособность драйверов подключенных устройств; установите, насколько актуальны их версии и при необходимости обновите посредством специальных утилит (задействуйте одно из представленных решений):
Snappy Driver Installer
(https://sdi-tool.org/)
Огромная база драйверов с удобным графическим интерфейсом. Выполняет инсталляцию программной поддержки без интернет-соединения. Может запускаться с флешки. Распространяется бесплатно, без рекламных модулей и шпионского ПО. Совместима со всеми версиями ОС семейства Windows («семёрка», «восьмёрка», «десятка»).
DriverDoc
(http://www.driverdoc.com/index.html)
Утилита-база. Содержит свыше 16 млн. драйверов, программно поддерживающих как стандартное, так и специфическое оборудование. Автоматически определяет аппаратную конфигурацию компьютера и грамотно подбирает драйвера ко всем имеющимся девайсам. Выполняет чистую установку и апдейты на уже имеющиеся оболочки.
Примечание. Рассмотренные решения не являются единственными. В глобальной Сети можно найти другие, не уступающие по качеству инсталляторы драйверов. Например, DriverPack Solution.
Откат системы
2. Напечатайте в поле «Найти программы» — восстановление системы. Нажмите «Enter».
3. В новом окне щелчком установите настройку «Выбрать другую точку… ». Кликните «Далее».
4. Выберите в списке точку восстановления. Обращайте внимание на описание резервной копии настроек и даты создания. После отката Windows вернётся к настройкам, сохранённым в точке.
6. Чтобы запустить восстановление, клацните «Готово».
7. Перезапустите систему.
Проверка системных файлов
1. Откройте консоль командной строки (см. «Очистка базы», пункт №1).
2. Введите команду — sfc /scannow.
3. По окончании проверки следуйте подсказам, отображённым в консоли, чтобы устранить повреждения файлов.
Проверка Windows антивирусом
Причиной появления ошибок в работе Datastore.edb может являться деятельность зловредов — троян, червей, шпионских программ. Если вам не удаётся избавиться от неполадок базы штатными средствами и спецутилитами, проверьте ПК на вирусы альтернативным антивирусным сканером. Например, Dr.Web CureIt!, AdwCleaner, Malwarebytes Anti-Malware и др.
Благополучной настройки Windows!
Обзор DataStore Library. Прощаемся с SharedPreference?
Привет, меня зовут Сергей, я работаю в команде Мобильного Банка Тинькофф. Недавно Google представила очередной инструмент для хранения данных. На этот раз это библиотека DataStore. В официальном блоге Google пишут, что она должна заменить SharedPreference.
В отличие от SharedPreference, DataStore работает асинхронно. Вся работа с библиотекой выполняется с помощью Kotlin Coroutines и Flow. DataStore позволяет нам хранить данные двумя способами:
По принципу «ключ — значение», аналогично SharedPreference.
Хранить типизированные объекты, основанные на protocol buffers.
Интерфейс очень прост. Все, что мы можем сделать с ним, это получить объект Flow для чтения данных и вызвать метод updateData() для их записи.
Типы DataStore
Preferences DataStore — хранит данные по принципу «ключ — значение» и не предоставляет нам никакой типобезопасности.
Proto DataStore — хранит данные в объектах. Это дает нам типобезопасноть, но описывать схему нужно с помощью protocol buffers.
Поговорим о каждом из них.
Preferences DataStore
Для подключения библиотеки необходимо добавить зависимость в build.gradle нашего проекта:
Как получить экземпляр Preferences DataStore
Для этого нам предоставляется extension-функция, которую можно вызвать из объекта Context :
Здесь есть четыре параметра. Давайте рассмотрим каждый из них.
name — обязательный параметр. Это название нашего DataStore. Под капотом будет создан файл, путь которого формируется на основании параметра name.
corruptionHandler — этот параметр необязательный. CorruptionHandler вызывается, если DataStore бросает CorruptionException при попытке чтения данных. Если CorruptionHandler успешно подменит данные, то исключение будет поглощено. Если в процессе подмены данных мы получим еще одно исключение, то оно будет добавлено к оригинальному исключению, после чего нам будет выброшено оригинальное исключение.
migrations — необязательный параметр, который позволяет легко мигрировать из SharedPreference. Сюда принимается список объектов DataMigration
В отличие от обычных Shared Preference, в качестве ключа здесь не строка, но об этом мы поговорим чуть позже.
scope — тоже необязательный параметр. Здесь можно указать, в каком Coroutine Scope мы хотим выполнять операции с DataStore. По умолчанию там Dispatchers.IO.
Создание ключей
Каждый ключ указывает на тип хранимых в нем данных и строковый ключ, по которому эти данные будут читаться. Поскольку при создании ключа мы указываем тип хранимых данных — мы получаем проверку на корректность передаваемого типа данных в compile time.
Также мы можем хранить Set :
Скорее всего, количество типов будет расширяться, так как сейчас методы prefrencesKey() и prefrencesSetKey() на вход принимают дженерик и ограничение по типам сделано руками.
Запись данных
Для записи данных DataStore предоставляет нам два метода для изменения данных:
DataStore.updateData
DataStore.edit
Чтение данных
DataStore предоставляет сохраненные данные в объекте Preferences. Все действия производятся на определенном нами при создании Dispatcher:
DataStore возвращает объект Flow, который будет возвращать нам либо значение, либо исключение, в случае ошибки чтения с диска.
Proto DataStore
Для подключения добавляем зависимость:
Перед работой с Proto DataStore нужно выполнить несколько действий:
В build.gradle добавить плагин:
Подключить зависимость в build.gradle:
Создать модель данных, используя protocol buffers.
Здесь есть подробное руководство по работе с proto buffer файлами.
Это будет наша схема хранения данных. Система сгенерирует модель, которую мы можем сохранять в наш DataStore.
Как получить экземпляр Proto DataStore
Для этого у нас тоже есть extension-функция:
Здесь все почти то же самое, как и с Preference DataStore. Но есть два отличия:
Первое — это путь, по которому будет сохраняться файл префов: File(context.filesDir, «datastore/$fileName»).
В остальном тут все так же, как в Preference DataStore.
Запись данных
Чтение данных
Есть два способа для чтения данных из Proto DataStore:
SharedPreference vs DataStore
DataStore предоставляет асинхронный API для записи и чтения данных, в отличие от Shared Preference, который предоставляет асинхронный API только при чтении данных.
DataStore безопасен для работы на UI-потоке, так как есть возможность указать подходящий для нас Dispatcher.
DataStore защищает от ошибок в рантайме, в то время как Shared Preference может бросить ошибку парсинга в рантайме.
Proto DataStore предоставляет лучшую типобезопасность из коробки.
Тут стоит отдельно поговорить о транзакционности.
В androidx этот же код будет выглядеть вот так:
DataStore создает транзакцию всякий раз при вызове методов DataStore.updateData() или DataStore.edit() и делает запись после выполнения всех операций внутри этих функций.
DataStore vs Room
Если вам нужны частичные обновления, ссылочная целостность или поддержка больших/сложных наборов данных, подумайте об использовании Room вместо DataStore.
DataStore идеально подходит для небольших простых наборов данных и не поддерживает частичные обновления или ссылочную целостность.
Rx Java
В данный момент поддержки RX Java в DataStore нет. Поэтому, если мы хотим в проект на RX затащить DataStore, придется писать свои обертки. Как вариант, можно использовать тулы для совместимости вроде этой.
Вывод
У SharedPreferences есть несколько недостатков:
Синхронный API, который может показаться безопасным для вызова на UI-потоке, но фактически он выполняет операции дискового ввода-вывода.
Отсутствует механизм сигнализации об ошибках, транзакционный API и многое другое.
DataStore — это замена SharedPreferences, которая устраняет большинство этих недостатков. DataStore включает в себя полностью асинхронный API, использующий Kotlin Coroutines и Flow. Дает нам очень простой и удобный инструмент для миграции данных. Гарантирует согласованность данных и обработку поврежденных данных.
В данный момент библиотека находится в альфе, но вы всегда можете проверить последнюю версию в документации.