Утилита index-reader.sh#
В комплект поставки DataGrid входит утилита index-reader.sh, которая позволяет проводить проверки дерева данных кеша в файлах партиций и его согласованность с индексами. Утилита работает с файлами напрямую и не требует запуска кластера. Утилита index-reader.sh находится в папке /bin/ дистрибутива.
Важно
Перед запуском утилиты убедитесь, что кластер остановлен, либо проверьте, что файлы кластера предварительно сохранены.
Чтобы получить подсказки по синтаксису, запустите утилиту без параметров.
Синтаксис:
index-reader.sh --dir [--part-cnt] [--page-size] [--page-store-ver] [--indexes] [--check-parts]
где:
--dir— путь, по которому расположены файлindex.binи (необязательно) файлы разделов;--part-cnt— полное количество партиций в группе кеша. Значение по умолчанию — 0;--page-size— размер страницы. Значение по умолчанию — 4096;--page-store-ver— версия хранилища страниц. Значение по умолчанию — 2;--indexes— имена деревьев индексов (через запятую без пробелов), которые будут обрабатываться;--dest-file— имя файла для вывода результата работы утилиты. Чтобы вывести отчет на консоль, а не в файл, укажите--dest-file null;--check-parts— включение проверки дерева данных кеша в файлах партиций и его соответствия индексам.
Поиск и вывод индексов#
Утилита может анализировать файл index.bin, а при необходимости — файлы партиций, если присутствует параметр --part-cnt со значением больше нуля. Анализ осуществляется по индексу из index.bin двумя способами:
рекурсивный (<RECURSIVE>) — обход индекса от корня к листьям;
поуровневый (<HORIZONTAL>) — обход индекса по каждому уровню.
Чтобы обнаружить orphan-страницы (те, на которые нет ссылок из индексных деревьев и списков повторного использования), сканируются все страницы файла, в том числе списки повторного использования страниц (reuse list).
Вывод утилиты состоит из четырех основных разделов:
информация о рекурсивном обходе (с префиксом <RECURSIVE>);
информация о горизонтальном обходе (с префиксом <HORIZONTAL>);
информация со списками повторного использования страниц (с префиксом <PAGE_LIST>);
последовательное сканирование всех страниц.
Имена индексных деревьев в выводе не совпадают с именами индексов и представлены в формате cacheId_typeId_indexName##H2Tree%segmentNumber, например, 2652_885397586_T0_F0_F1_IDX##H2Tree%0. Имена можно увидеть в поле вывода утилиты и в разделах информации об обходе (<RECURSIVE> и <HORIZONTAL>).
С помощью параметра --check-parts можно получить информацию о том, как CacheDataTree соответствует индексам SQL.
Пример вывода с сообщениями об отсутствии ошибок:
Partitions check detected no errors.
Partition check finished, total errors: 0, total problem partitions: 0
Пример вывода с сообщениями об ошибках, в случае, когда запись была найдена в CacheDataTree, но не обнаружена в индексах SQL:
<ERROR> Errors detected in partition, partId=1023
<ERROR> Entry is missing in index: I [idxName=2652_885397586_T0_F0_F1_IDX##H2Tree%0, pageId=0002ffff0000000d], cacheId=2652, partId=1023, pageIndex=8, itemId=0, link=285868728254472
<ERROR> Entry is missing in index: I [idxName=2652_885397586_T0_F2_IDX##H2Tree%0, pageId=0002ffff0000000b], cacheId=2652, partId=1023, pageIndex=8, itemId=0, link=285868728254472
All errors in the output have prefix <ERROR>.
Примеры использования утилиты#
Используйте следующие команды для анализа:
всего содержимого
/opt/ignite/ssd/pds/cache:./index-reader.sh --dir "/opt/ignite/ssd/pds/cache" --part-cnt 1024 --page-size 4096 --page-store-ver 2 --dest-file "report.txt"SQL-индексов в
/opt/ignite/ssd/pds/cache:./index-reader.sh --dir "/opt/ignite/ssd/pds/cache" --dest-file "report.txt"SQL-индексов, которые находятся и в CacheDataTree, и в
/opt/ignite/ssd/pds/cache:./index-reader.sh --dir "/opt/ignite/ssd/pds/cache" --part-cnt 1024 --check-parts --dest-file "rep"Пример вывода:
<RECURSIVE> Index tree: I [idxName=2654_-1177891018__key_PK##H2Tree%0, pageId=0202ffff00000066] <RECURSIVE> -- Page stat: <RECURSIVE> H2ExtrasLeafIO: 2 <RECURSIVE> H2ExtrasInnerIO: 1 <RECURSIVE> BPlusMetaIO: 1 <RECURSIVE> -- Count of items found in leaf pages: 200 <RECURSIVE> No errors occurred while traversing. ... <RECURSIVE> Total trees: 19 <RECURSIVE> Total pages found in trees: 49 <RECURSIVE> Total errors during trees traversal: 2
Вывод информации о списках страниц#
Раздел списков страниц содержит данные о сегменте списка повторного использования и информацию о последовательном сканировании:
метаданные списка;
номер сегмента;
начальные страницы списков, найденных в сегменте;
статистику типов страниц.
Пример вывода:
<PAGE_LIST> Page lists info.
<PAGE_LIST> ---Printing buckets data:
<PAGE_LIST> List meta id=844420635164675, bucket number=0, lists=[844420635164687]
<PAGE_LIST> -- Page stat:
<PAGE_LIST> H2ExtrasLeafIO: 32
<PAGE_LIST> H2ExtrasInnerIO: 1
<PAGE_LIST> BPlusMetaIO: 1
<PAGE_LIST> ---No errors.
Пример вывода:
---These pages types were encountered during sequential scan:
H2ExtrasLeafIO: 165
H2ExtrasInnerIO: 19
PagesListNodeIO: 1
PagesListMetaIO: 1
MetaStoreLeafIO: 5
BPlusMetaIO: 20
PageMetaIO: 1
MetaStoreInnerIO: 1
TrackingPageIO: 1
---
Total pages encountered during sequential scan: 214
Total errors occurred during sequential scan: 0
Утилита сравнивает результаты обходов и размеры индексов одних и тех же кешей.
Пример сообщения об ошибке, связанной с несоответствием размера индекса:
<ERROR> Index size inconsistency: cacheId=2652, typeId=885397586
<ERROR> Index name: I [idxName=2652_885397586_T0_F0_F1_IDX##H2Tree%0, pageId=0002ffff0000000d], size=1700
<ERROR> Index name: I [idxName=2652_885397586__key_PK##H2Tree%0, pageId=0002ffff00000005], size=0
<ERROR> Index name: I [idxName=2652_885397586_T0_F1_IDX##H2Tree%0, pageId=0002ffff00000009], size=1700
<ERROR> Index name: I [idxName=2652_885397586_T0_F0_IDX##H2Tree%0, pageId=0002ffff00000007], size=1700
<ERROR> Index name: I [idxName=2652_885397586_T0_F2_IDX##H2Tree%0, pageId=0002ffff0000000b]