Сбор статистики с помощью PROUTIL
Для сбора и анализа статистики по секционированным таблицам и индексам применяется утилита PROUTIL с одним из следующих классификаторов:
- PROUTIL TABANALYS
- PROUTIL IDXANALYS
- PROUTIL DBANALYS
Поскольку DBANALYS формирует единый отчёт, с информацией по таблицам и индексам, то на этом уроке мы не будем рассматривать этот классификатор отдельно. Вместо этого, мы изучим, как использовать классификаторы TABANALYS и IDXANALYS.
Использование PROUTIL TABANALYS
Для сбора статистика по таблицам в области хранения с помощью PROUTIL TABANALYS, используйте следующий синтаксис:
proutil db-name -C tabanalys [area area-name] [> outfile]
Пример. В базе данных sportsco все секции таблицы Order размещены в области хранения OrderData1. Следующая команда PROUTIL TABANALYS сформирует статистику по этим секциям и сохранит результат в текстовый файл OrderTable.txt:
proutil sportsco -C tabanalys area orderdata1 > ordertable.txt
Анализируем отчёт TABANALYS
После запуска утилиты PROUTIL TABANALYS для области хранения, которая содержит одну или несколько секций таблицы, отчёт будет содержать сводные данные по этим секциям. Отчёт показывает имена секций таблицы, используя следующий формат для имени: owner-name.table-name.partition-name.
Для каждой секции отчёт показывает общее количество записей, размер секции в килобайтах, минимальный, максимальный и средний размер записи в килобайтах, количество фрагментов записей, коэффициент фрагментации записей, расстояние между блоками базы данных в секции.
RECORD BLOCK SUMMARY FOR AREA "OrderData1": 400 ------------------------------------------------------- RECORD BLOCK SUMMARY FOR SHARED TABLES -------------------------------------------- -Record Size (B)- ---Fragments--- Scatter Table Records Size Min Max Mean Count Factor Factor PUB.Order.Order-1 388 38.2K 87 121 100 388 1.0 1.0 PUB.Order.Order-11 246 22.4K 76 116 93 246 1.0 1.0 PUB.Order.Order-12 228 22.1K 83 122 99 228 1.0 1.0 PUB.Order.Order-2 458 46.5K 85 124 104 458 1.0 1.0 PUB.Order.Order-3 385 41.0K 94 170 108 385 1.0 1.0 PUB.Order.Order-5 393 37.1K 82 116 96 393 1.0 1.0 PUB.Order.Order-6 427 42.5K 83 122 101 427 1.0 1.0 PUB.Order.Order-8 243 24.0K 84 123 101 243 1.0 1.0 PUB.Order.Order-9 220 22.6K 93 126 105 220 1.0 1.0 PUB.Order.Order_2005 207 20.1K 80 124 99 207 1.0 1.0 PUB.Order.Order_2009 229 21.9K 80 122 98 229 1.0 1.0 ----------------------------------------------------------------------------- Subtotals: 3424 338.4K 76 170 101 3424 1.0 1.0
Во время анализа секций таблицы обратите внимание на следующие поля:
Поле |
Описание |
Records | Количество записей в каждой секции. Важный показатель для определения влияния фрагментации. Например, если секция содержит 10 или меньше записей, вы можете игнорировать фрагментацию. Но, если в секции 100 000 и более записей, то пренебрегать наличием фрагментации не стоит. |
Fragments Count | Общее количество фрагментов записей в секции. В идеале, должно быть равно количеству записей в секции. |
Fragments Factor | Коэффициент фрагментации записей в каждой секции. Идеальное значение 1.0. Если коэффициент фрагментации равен или больше 2.0, то необходимо выполнить dump&load, чтобы улучшить использование дискового пространства и производительность базы данных. |
Scatter Factor | Индикатор расстояния между блоками базы данных в секции. Оптимальное значение может меняться от секции к секции.
Если несколько секций должны быть размещены в одной области хранения, загрузите их данными по очереди, сформируйте TABANALYS, и вы получите оптимальное значение Scatter Factor. Когда секция имеет собственную область хранения, загрузите в неё данные и сформируйте TABANALYS, вы также получите оптимальное значение. |
Использование PROUTIL IDXANALYS
Для сбора информации по локальным индексам соответствующих секций таблицы в области хранения применяется PROUTIL IDXANALYS:
proutil db-name -C idxanalys [area area-name] [> outfile]
Пример. Локальные индексы секций таблицы Order размещены в области хранения OrderIndex1. Следующая команда PROUTIL IDXANALYS сформирует отчёт по индексам, и сохранит его в текстовый файл OrderIndexes.txt:
proutil sportsco -C idxanalys area orderindex1 > orderindexes.txt
Анализируем отчёт IDXANALYS
После запуска утилиты PROUTIL IDXANALYS для области хранения, содержащей одну или несколько индексных секций, отчёт будет содержать сводные данные по всем индексам в области. Отчёт содержит имя локального индекса, его порядковый номер, количество столбцов в индексе, а ниже описания самого индекса приводится информация о его секциях. Индексные секции именуются следующим образом: table-partition-name:n. Здесь, table-partition-name – имя секции с данными, а n –номер индексной секции.
Для каждой индексной секции отчёт показывает количество уровней индекса, количество блоков в индексе, размер индекса, процент утилизации и статус состояния индекса.
INDEX BLOCK SUMMARY FOR AREA "OrderIndex1": 401 ------------------------------------------------------- INDEX BLOCK SUMMARY FOR SHARED OBJECTS: -------------------------------------------- Table Index Fields Levels Blocks Size % Util Factor PUB.Order Order _Partition-Internal-Value -1558 2 1 1 385.0B 9.5 1.0 CarrierOrderDateLocalIdx 68 2 Order-1:7 1 1 3.4K 85.5 1.0 Order-11:2 1 1 2.2K 54.5 1.0 Order-12:1 1 1 2.0K 51.2 1.0 Order-2:8 2 3 4.0K 33.9 2.3 Order-3:9 1 1 3.3K 84.2 1.0 Order-5:11 1 1 3.4K 86.5 1.0 Order-6:12 1 1 3.7K 92.5 1.0 Order-8:5 1 1 2.2K 54.7 1.0 Order-9:4 1 1 2.0K 49.3 1.0 Order_2005:16 1 1 1.8K 45.4 1.0 Order_2009:15 1 1 2.0K 49.4 1.0 ------------------------------------------------------------------ Subtotals: 14 30.4K 54.6 1.2
Во время анализа индексных секций таблицы обратите внимание на следующие поля:
Поле |
Описание |
Levels | Показывает количество уровней в B-дереве индекса.
Если количество уровней 4 или более, выполните уплотнение индекса, чтобы сократить количество уровней и улучшить производительность запросов. |
% Util | Показывает процент утилизации индекса.
Если приложение ориентированно на интенсивную запись и %Util меньше 50%, то выполните уплотнение индекса до 80% или перестройте его. Если приложение ориентировано на интенсивное чтение или индекс имеет более 100 индексных блоков и при этом %Util меньше 85%, то выполните уплотнение индекса до 100% или перестройте его. |
Factor | Показывает статус каждого индекса.
Если Factor имеет значение меньше 2, то индекс в отличном состоянии. Если Factor имеет значение между 2 и 2.5, то индекс утилизирован на меньше чем 50% или разбалансирован. Рассмотрите возможность перестройки индекса. Если Factor имеет значение между 2.5 и 3, то индекс утилизирован менее чем на 25% или очень сильно разбалансирован. Выполните перестройку индекса. |
Создание файлов для дальнейшего анализа
Начиная с OpenEdge 11.4, появилась возможность создавать файлы TABANALYS и IDXANALYS в машиночитаемом виде, что полезно при загрузке результата в MS Excel или в базу данных.
Для генерации таких файлов для команд TABANALYS и IDXANALYS был расширен список параметров:
proutil db-name –C tabanalys | idxanalys [area area-name] [-csoutput [-fieldsep sep-value] [-csfilePrefix file-name-prefix] [-verbose]]
Параметр |
Назначение |
-csoutput | Анализ данных будет выводиться как на экран, так и в текстовые файлы. Параметр обязателен к использованию, чтобы остальные параметры вступили в силу. |
-fieldsep sep-value | Указывает разделитель столбцов. По умолчанию используется пробел. Возможные значения:
Укажите tab – для использования символа табуляции (<\t> или ASCII символ 0x09). Любой ASCII символ между 0x21 и 0x7E. |
-csfilePrefix file-name-prefix | Указывает префикс для имени файлов. По умолчанию используется имя базы данных.
Вы можете указать вместе с префиксом путь, где будут сохранены файлы. По умолчанию, файлы сохраняются в текущем рабочем каталоге. |
-verbose | Указывает, что первая строка в отчёте содержит названия столбцов. |
Набор итоговых файлов, которые будут созданы, зависит от используемого инструмента PROUTIL.
Если используется… | … то будут созданы файлы … |
TABANALYS | db-name.tab.txt – анализ таблиц
db-name.block.txt – анализ блоков |
IDXANALYS | db-name.ix.txt – анализ индексов
db-name.block.txt – анализ блоков |
Примечание. Если в команде была указана область хранения, то в имя файлов будет добавлен номер этой области. Например, предположим, что область хранения OrderData1 имеет номер 400. В этом случае имена файлов будут выглядеть как sportsco.tab_400.txt и sportsco.block_400.txt.
Пример. Предположим, что текущий рабочий каталог это C:\OpenEdge\WRK\tablepartitioning. Следующий пример команды PROUTIL TABANALYS создаст дополнительные файлы, в которых разделителем будет табуляция, первая строка будет содержать имена столбцов, префикс имени файлов будет mydb, и размещены эти файлы будут в каталоге C:\OpenEdge\WRK\tablepartitioning\dbanalys.
proutil sportsco –C tabanalys -csoutput -fieldsep tab -csfilePrefix C:\OpenEdge\WRK\tablepartitioning\dbanalys\mydb -verbose
Результат: в каталоге C:\OpenEdge\WRK\tablepartitioning\dbanalys будет создано два файла, mydb.tab.txt и mydb.block.txt.
Пример содержимого файла mydb.block.txt:
"Time Stamp" "DBUID" "DB name" "Area" "Area #" "Block Type" "Num Blocks" 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Free" 25 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Record" 24 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Index" 8 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Empty" 7 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Object" 15 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Cluster-list" 15 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Object-list" 1 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Cluster-map" 15 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "HWM" 119 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Employee" 7 "Total" 126 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Free" 77 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Record" 684 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Index" 40 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Empty" 7 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Object" 25 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Cluster-list" 25 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Object-list" 1 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Cluster-map" 25 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "HWM" 903 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "Inventory" 8 "Total" 910
Пример содержимого файла mydb.tab.txt:
"Time Stamp" "DBUID" "DB name" "Area" "Area #" "Partition Type" "Tenancy" "Tenancy #" "Partition Policy" "Partition" "Partition #" "Owner" "Table" "Table #" "Records" "Size" "Min" "Max" "Mean" "Frag Count" "Frag Factor" "Scatter Factor" 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-4" 4 "PUB" "Customer" 4 5 863 143 202 172 5 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-5" 5 "PUB" "Customer" 4 1 176 176 176 176 1 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-6" 6 "PUB" "Customer" 4 1 132 132 132 132 1 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-7" 7 "PUB" "Customer" 4 1 130 130 130 130 1 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-8" 8 "PUB" "Customer" 4 1 133 133 133 133 1 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "CustomerData1" 300 "P" "-" 0 "Customer" "Customer-9" 9 "PUB" "Customer" 4 3 415 136 140 138 3 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-1" 7 "PUB" "Order" 13 388 39083 87 121 100 388 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-11" 2 "PUB" "Order" 13 246 22929 76 116 93 246 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-12" 1 "PUB" "Order" 13 228 22586 83 122 99 228 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-2" 8 "PUB" "Order" 13 458 47666 85 124 104 458 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-3" 9 "PUB" "Order" 13 385 41964 94 170 108 385 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-5" 11 "PUB" "Order" 13 393 38024 82 116 96 393 1.0 1.0 2019-05-29T16:05:06.000+3:00 "" "..\sportsco" "OrderData1" 400 "P" "-" 0 "Order" "Order-6" 12 "PUB" "Order" 13 427 43506 83 122 101 427 1.0 1.0