Статистика базы данных используется оптимизатором системы управления базами данных для выбора оптимального плана для запросов. Для поддержания производительности запросов, вы должны обновлять статистику после существенного изменения содержания таблицы; например, после загрузки в нее большого количество записей или выполнения в таблице значительной правки.
Статистика может обновляться для следующих типов таблиц и индексов:
- Таблица, которую вы выбираете для анализа, и связанные с ней индексы
- Дельта-таблицы версионных таблиц и классов объектов и индексы дельта-таблиц
- Исторические архивные таблицы наборов данных, которые разрешены для архивирования, и индексы архивных таблиц
- Системные таблицы базы геоданных
- Если анализировать класс объектов, который использует хранение геометрии sdebinary, то статистика также обновляется для таблицы объектов и таблицы пространственного индекса, и для индексов этих таблиц.
Обновить статистику в ArcGIS можно несколькими способами. Они описаны в следующих разделах:
Использование команды Analyze
Команду Анализировать можно использовать в ArcMap для обновления статистики отдельных наборов данных, которые вы выбираете напрямую в дереве Каталога. Для обновления статистики вы должны быть владельцем набора данных.
- Запустите ArcMap или ArcCatalog.
-
В разделе Подключения к базам данных дерева Каталога подключитесь к базе данных или многопользовательской базе геоданных, содержащей набор данных, для которого вы хотите обновить статистику.
Необходимо подключаться в качестве владельца набора данных.
- Щелкните правой кнопкой мыши на наборе данных в дереве Каталога.
Это может быть набор классов объектов, класс пространственных объектов, таблица, каталог растров, набор растровых данных или набор данных мозаики.
- Выберите пункт Управление и щелкните Анализ.
Для таблиц и индексов этого набора данных будет обновлена статистика, как описано в начале этого раздела.
Использование инструмента Анализировать наборы данных
Вы можете использовать инструмент геообработки Анализировать наборы данных (расположенный в группе Администрирование базы геоданных набора инструментов Управление данными) для обновления статистики. Используйте этот инструмент вместо команды Анализировать в ArcMap, если вы хотите обновить статистику для нескольких наборов данных одновременно, если вы хотите выбрать определенные таблицы для анализа (например, если вы хотите обновить статистику только для дельта-таблиц), или если вы хотите обновить статистику для системных таблиц базы геоданных.
Вы должны запустить инструмент в качестве владельца таблиц, которые вы хотите проанализировать. В случае системных таблиц базы геоданных, необходимо запустить инструмент от имени администратора базы геоданных. Необходимо обновить статистику для системных таблиц базы геоданных после добавления в базу геоданных множества новых таблиц или классов пространственных объектов.
- Запустите клиент ArcGIS for Desktop и подключитесь к базе геоданных, содержащей таблицы, для которых необходимо обновить статистику.
Подключитесь как владелец таблиц.
- Откройте инструмент геообработки Анализировать наборы данных.
Вы можете ввести имя инструмента в поле Поиск в клиенте ArcGIS for Desktop, чтобы найти и запустить инструмент, либо перейти к нему в группе инструментов Администрирование базы геоданных набора инструментов Управление данными.
- Используйте файл подключения, созданный вами на шаге 1, в качестве входной рабочей области.
- Отметьте те таблицы, которые вы хотите проанализировать:
- Если вы хотите обновить статистику для выбранных базовых таблиц, оставьте отмеченной опцию Анализировать базовые таблицы выбранных наборов данных.
- Отметьте Анализировать дельта-таблицы выбранных наборов данных, чтобы обновить статистику добавлений и удалить таблицы версионных наборов данных.
- Отметьте Анализировать архивные таблицы выбранных наборов данных для обновления статистики для исторических архивных таблиц наборов данных, которые разрешены для архивирования.
- Отметьте Включить системные таблицы для обновления статистики по системным таблицам базы геоданных.
- Щелкните OK, чтобы запустить инструмент.
Статистика обновляется для выбранных вами таблиц и их индексов.
Запуск скрипта Python
Вы можете вызвать функцию AnalyzeDatasets_management в скрипте Python для обновления статистики по базовым таблицам, дельта-таблицам, архивным таблицам и/или системным таблицам базы геоданных. Так же, как с инструментом Анализировать наборы данных, вы должны запустить AnalyzeDatasets_management в качестве владельца анализируемых вами таблиц.
Когда вы запустите следующий скрипт Python, укажите файл подключения к базе данных (.sde). Скрипт обновляет статистику для всех таблиц, принадлежащих пользователю, указанному в подключении.
Например, для запуска данного скрипта в Linux с использованием файла подключения к базе данных entgdb.sde, расположенного в /usr/connections, введите следующее:
./ AnalyzeDatasets.py /usr/connections/entgdb.sde
Для запуска данного скрипта для обновления статистики в системных таблицах, укажите файл подключения, который выполняет подключение, как администратор базы геоданных.
# Name: AnalyzeDatasets.py
# Description: analyzes all datasets in an enterprise geodatabase
# for a given user.
# Import system modules
import arcpy, os
# set workspace
# the user in this workspace must be the owner of the data to analyze.
workspace = arcpy.GetParameterAsText(0)
# set the workspace environment
arcpy.env.workspace = workspace
# NOTE: Analyze Datasets can accept a Python list of datasets.
# Get a list of all the datasets the user has access to.
# First, get all the stand alone tables, feature classes and rasters.
dataList = arcpy.ListTables() + arcpy.ListFeatureClasses() + arcpy.ListRasters()
# Next, for feature datasets get all of the datasets and featureclasses
# from the list and add them to the master list.
for dataset in arcpy.ListDatasets("", "Feature"):
arcpy.env.workspace = os.path.join(workspace,dataset)
dataList += arcpy.ListFeatureClasses() + arcpy.ListDatasets()
# reset the workspace
arcpy.env.workspace = workspace
# Get the user name for the workspace
userName = arcpy.Describe(workspace).connectionProperties.user.lower()
# remove any datasets that are not owned by the connected user.
userDataList = [ds for ds in dataList if ds.lower().find(".%s." % userName) > -1]
# Execute analyze datasets
# Note: to use the "SYSTEM" option the workspace user must be an administrator.
arcpy.AnalyzeDatasets_management(workspace, "NO_SYSTEM", userDataList, "ANALYZE_BASE","ANALYZE_DELTA","ANALYZE_ARCHIVE")
print "Analyze Complete"