Статистика базы данных используется оптимизатором системы управления базами данных для выбора оптимального варианта запуска запроса. Для поддержания производительности запросов, вы должны обновлять статистику после существенного изменения содержания таблицы; например, после загрузки в нее большого количество записей или выполнения в таблице значительной правки.
Статистика может обновляться для следующих типов таблиц и индексов:
- Таблица, которую вы выбираете для анализа, и связанные с ней индексы
- Дельта-таблицы версионных таблиц и классов объектов и индексы дельта-таблиц
- Исторические архивные таблицы наборов данных, которые разрешены для архивирования, и индексы архивных таблиц
- Системные таблицы базы геоданных
- Если анализировать класс объектов, который использует хранение геометрии sdebinary, то статистика также обновляются для таблицы объектов и таблицы пространственного индекса, и для индексов этих таблиц.
Обновить статистику в ArcGIS можно несколькими способами. Они описаны в следующих разделах:
Использование команды Analyze
Команду Анализировать можно использовать для обновления статистики отдельных наборов данных, которые вы выбираете напрямую в дереве Каталога. Для обновления статистики вы должны быть владельцем набора данных.
- Запустите ArcMap или ArcCatalog.
-
В разделе Подключения баз данных дерева окна Каталог подключитесь к базе данных или многопользовательской базе геоданных, содержащей набор данных, для которого вы хотите обновить статистику.
Необходимо подключаться в качестве владельца набора данных.
- Щелкните правой кнопкой мыши на наборе данных в дереве Каталога.
Это может быть набор классов объектов, класс пространственных объектов, таблица, каталог растров, набор растровых данных или набор данных мозаики.
- Выберите пункт Управление (Manage) и щелкните Анализ.
Для таблиц и индексов этого набора данных будет обновлена статистика, как описано в начале этого раздела.
Использование инструмента Анализировать наборы данных
Вы можете использовать инструмент геообработки Анализировать наборы данных (расположенный в группе Администрирование базы геоданных набора инструментов Управление данными для обновления статистики. Используйте этот инструмент вместо команды Analyze (Анализировать), если вы хотите обновить статистику для нескольких наборов данных сразу, если вы хотите выбрать конкретные таблицы для анализа (например, если вы хотите обновить статистику только для дельта-таблиц) или если вы хотите обновить статистику для системных таблиц базы геоданных.
Вы должны запустить инструмент в качестве владельца таблиц, которые вы хотите проанализировать. В случае системных таблиц базы геоданных, необходимо запустить инструмент от имени администратора базы геоданных. Вам нужно обновить статистику для системных таблиц базы геоданных после добавления многих новых таблиц или классов пространственных объектов в базу геоданных, после осуществления большого количества версионной правки, а также в случае сжатия базы геоданных.
- Запустите ArcMap или ArcCatalog и подключитесь к базе геоданных, содержащей таблицы, для которых необходимо обновить статистику.
Подключитесь как владелец таблиц.
- Откройте инструмент геообработки Анализировать наборы данных.
Используйте окно Поиск, чтобы найти и запустить инструмент, либо перейдите к нему в группе Администрирование базы геоданных набора инструментов Управление данными.
- Используйте файл подключения, созданный вами на шаге 1, в качестве входной рабочей области.
- Проверьте, какие таблицы вы хотите проанализировать:
- Если вы хотите обновить статистику для выбранных базовых таблиц, оставьте включенным.
- Отметьте для обновления статистики для дельта-таблиц версионных наборов данных.
- Отметьте для обновления статистики для исторических архивных таблиц наборов данных, которые разрешены для архивирования.
- Отметьте Включить системные таблицы (Include System Tables) для обновления статистики по системным таблицам базы геоданных.
- Щелкните 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"