Здесь показаны различия между двумя версиями данной страницы.
чистка_кэша_беркли [13/06/2014 10:12] 46.44.11.239 [Чистка кэша Беркли] |
чистка_кэша_беркли [16/05/2023 23:01] (текущий) radioxoma wiki syntax |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
[[главная|Главная страница]] | [[главная|Главная страница]] | ||
- | ====== Чистка кэша Беркли ====== | + | ====== Чистка/оптимизация кэша Беркли ====== |
- | Добавляя файлы в кэш Беркли путём скачивания или формирования, мы увеличиваем размеры файлов базы данных. Удаляя файлы из базы данных путём "стирания" лишних тайлов, уменьшения размеров файлов БД не добиться, так как ранее занятое файлами место так и остаётся занятым. Со временем накапливается весьма приличное количество таких удалённых тайлов, которые зря занимают место на диске. | + | > Описываемая процедура предназначена для очистки кэша от уже удалённых тайлов, а не самого их удаления, которое должно выполняться из программы SAS.Planet. |
- | Используя набор утилит для кэша Беркли, можно очистить кэш от удалённых файлов. Самый надёжный метод - использовать утилиту **sdb_util.exe**. В списке действий, которые данная утилита выполняет, есть **Restore broken files from *.bad**. То есть восстановление повреждённых файлов из файла *.bad. | + | Сохранение тайлов в кэш Беркли, приводит к увеличению размеров файлов базы данных *.sdb или *.sdbv (далее - файлов БД). Удаление же тайлов из кэша Беркли (если вы вдруг таким занимались через операции с выделенной областью), не приводит к уменьшению размера файлов БД. Это связано с тем, что физически данные в БД не стираются, а лишь помечаются как удалённые, на место которых могут быть записаны новые данные. При этом, до определённого момента, увеличения размеров файлов БД не происходит. Такое поведение типично для сколь-нибудь сложных БД, и Беркли тому не исключение. Естественно, существуют и способы по уменьшению размеров файлов БД (чистка от удалённых данных), о которых и будет рассказано ниже. |
- | Файлы *.bad появляются путём добавления "второго" расширения bad к названиям файлов базы данных (*.sdb или *.sdbv) в результате верификации (проверки) кэша утилитой db_verify.exe или действия **Verify cache (find broken files)** утилиты sdb_util.exe. | + | Внимание: |
+ | * при всех операциях над кэшем Беркли "извне" SAS.Планета должна быть закрыта | ||
+ | * перед всеми процедурами делайте бэкапы файлов БД, которые вы планируете оптимизировать | ||
- | Файлы БД, содержащие удалённые тайлы, не считаются повреждёнными, поэтому их проверка утилитами не приведёт к добавлению расширения bad. **Но никто не мешает нам добавить это расширение вручную**. | + | ===== Чистка кэша с использованием sdb_util ===== |
- | Выбрав из списка действий утилиты sdb_util.exe **Restore broken files from *.bad** и указав папку, содержащую файлы *.bad, можно восстановить из повреждённого файла БД его неповреждённую часть, получив нормальный файл БД. | + | Используя набор утилит для кэша Беркли, можно очистить кэш от удалённых тайлов. Очень удобно пользоваться утилитой **sdb_util.exe**, объединяющей в себе возможности почти всех отдельных утилит. В списке действий, которые данная утилита выполняет, есть **Restore broken files from *.bad** - восстановление повреждённых файлов из файлов *.bad. |
- | //Автоматически// делаются следующие процедуры - 1) делается дамп (составляется список неповреждённых файлов). 2) из полученного дампа создаются новые файлы БД, содержащие только неповреждённые данные. 3) файлы БД проверяются на наличие повреждённых данных, если всё нормально, файл дампа и файлы *.bad удаляются, остаётся нормальный файл БД. Если в указанной папке имеется несколько файлов *.bad, они все окажутся удалёнными. | + | |
- | **План действий**:\\ | + | Действие **Restore broken files from *.bad** утилиты **sdb_util.exe** состоит из трёх этапов: |
- | 1) Определяем масштаб желаемого сокращения кэша, например "удалить зумы с 12 по 13"\\ | + | - Создание дампа отдельно взятого файла БД. При этом происходит копирование во временный файл (*.dump) неповреждённых тайлов и тайлов, не помеченных в БД как удалённые. |
- | 2) Открываем папку /cache_db (обычный кеш Беркли) или /cache_dbv (версионный кеш Бекли)\\ | + | - Создание из полученного дампа нового файла БД, содержащего только полноценные данные. |
- | 3) В удаляемых зумах переименовываем все *.sdb в *.sdb.bad (для версионного кеша - *.sdbv в *.sdbv.bad )\\ | + | - Верификация нового файла БД, если всё хорошо, файл дампа и файл *.bad удаляются, остаётся нормальный файл БД. |
- | //Подсказка//: переименовать нужные файлы sdb(v) в требуемых папках можно быстрее, если запустить поиск на "sdb(v)" и отсортировать результаты по столбцу пути.\\ | + | |
- | 4) Запускаем утилиту sdb_util.exe из корня директории SAS.Planet\\ | + | |
- | 5) Выбираем папку с кешем (можно выбрать всю папку /cache_db(v))\\ | + | |
- | 6) Выбираем действие //Restore broken files from *.bad// и нажимаем Run\\ | + | |
- | 7) По окончании работы утилиты все *.bad файлы станут иметь размер около 4кБ\\ | + | |
- | Если нужно почистить не весь кэш, а лишь определённую местность, то из всех имеющихся файлов БД следует выбрать только те, которые содержат тайлы этой местности. Для этого в SASПланете устанавливаем масштаб, равный масштабу, который нужно почистить, минус 8. Должно быть включено отображение границ тайлов. Смотрим на обозначения тайлов, попадающих на нужную местность. Цифры, указанные в виде x=XXX, y=YYY, будут входить в названия нужных нам файлов БД. Например, если мы хотим почистить карту Черногории на z15, находим Черногорию и устанавливаем масштаб 15-8=7. Карта попадает в тайл с x=35 и y=23. Значит, файл БД, содержащий эту карту, должен называться 35.23.sdb (ну, или 35.23.sdbv, если кэш версионный). Поиском находим этот файл и обрабатываем его. | + | Откуда берутся файлы *.bad? При проверке файлов БД утилитой **db_verify.exe** (или действием **Verify cache (find broken files)** утилиты **sdb_util.exe**) отыскиваются повреждённые тайлы, то есть тайлы, которые числятся в БД, но не могут быть прочитаны вследствие ошибок в структуре БД или из-за физического повреждения файлов БД. Тогда файл БД получает "второе" расширение *.bad. На удалённые из кэша тайлы утилита **db_verify.exe** не реагирует, поэтому, если с файлом БД нет никаких проблем и повреждений, верификация пройдёт успешно, и к имени файла БД не будет добавлено расширение .bad. **Но никто не мешает нам добавить это расширение вручную**. |
+ | |||
+ | Утилита **sdb_util.exe** обрабатывает все файлы *.bad, находящиеся внутри указанной папки (и во всех вложенных папках тоже). | ||
+ | |||
+ | Для переименования файлов БД удобно пользоваться Total Commander'ом. | ||
+ | |||
+ | Чем больше размеры файлов БД и их количество, тем больше времени занимает процедура очистки. Файлы *.bad не могут быть использованы SAS.Планетой ни для отображения, ни для скачивания, поэтому, пока идёт процедура очистки, SAS.Планетой пользоваться не получится. Отсюда рекомендация: не замахиваться на глобальную очистку, переименовывая сразу все файлы БД в кэше. | ||
+ | |||
+ | Если нужно почистить не весь кэш, а лишь определённую местность, то из всех имеющихся файлов БД следует выбрать только те, которые содержат тайлы этой местности. Для этого в SAS.Планете устанавливаем масштаб, равный масштабу, который нужно почистить, минус 8. Должно быть включено отображение границ тайлов. Смотрим на обозначения тайлов, попадающих на нужную местность. Цифры, указанные в виде x=XXX, y=YYY, будут входить в названия нужных нам файлов БД. Например, если мы хотим почистить карту Черногории на z15, находим Черногорию и устанавливаем масштаб 15-8=7. Карта попадает в тайл с x=35 и y=23. Значит, файл БД, содержащий эту карту, должен называться 35.23.sdb (ну, или 35.23.sdbv, если кэш версионный). Поиском находим этот файл и обрабатываем его. | ||
{{:sdb.jpg|}} | {{:sdb.jpg|}} | ||
+ | ===== Чистка кэша сторонними средствами ===== | ||
+ | |||
+ | Следует отметить, что существует ещё один //теоретический// способ оптимизации кэша Беркли (на практике пока что для этого способа нет готовых утилит). В API BerkeleyDB предусмотрен специальный метод [[http://docs.oracle.com/cd/E17076_02/html/api_reference/C/dbcompact.html|DB->compact()]] - это метод "щадящей" оптимизации (без пересоздания файла БД), поддерживает множество опций, но консольной утилиты для этой операции они почему-то не сделали. Возможно из-за того, что при обычных операциях записи в БД, там такая оптимизация проводится по-умолчанию, но не для всей БД, а только для тех страниц, которые используются для поиска/записи текущего ключа (key). Т. е. структура БД самооптимизирующаяся. | ||
+ | |||
+ | |||
+ | ====== Восстановление повреждённого кэша BerkeleyDB ====== | ||
+ | |||
+ | Для восстановления повреждённого кэша BerkeleyDB: | ||
+ | - Скачать файл http://sasgis.org/forum/download/file.php?id=3150 | ||
+ | - Распаковать в директорию САС.Планеты | ||
+ | - Исправить пути к утилитам из архива | ||
+ | - Если кэш какой-то карты заглючил, надо скопировать оба bat-файла в директорию с этим кэшем. Запустить ''verify.bat''. Если какие-то файлы sdb и tne покорраптились, они будут переименованы в *.BAD (соответствующий кусок кэша будет потерян!). Если проблема не в файлах sdb и tne, а в логах (они находятся в директории env), надо удалить директорию env и запустить ''load.bat''. | ||
+ | Когда он отработает, можно запускать SAS.Planet, она откроет кэш и создаст новый env. В этом случае ничего не потеряется. | ||