Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сведения о статистике базы данных
Статистика для оптимизации запросов — это объекты, содержащие статистическую информацию о распределении значений в одном или нескольких столбцах таблицы или индексированного представления. Оптимизатор запросов использует эти статистические данные для оценки кратности или количества строк в результатах запроса. Эти оценки кратности позволяют оптимизатору запросов создать план запросов высокого качества.
Например, оптимизатор запросов может повысить производительность запросов, используя оценки кратности для выбора оператора поиска индекса вместо более ресурсоемкого оператора сканирования индекса. В противном случае устаревшая статистика может снизить производительность запросов за счет использования неэффективных планов запросов.
Крупные корпоративные развертывания SharePoint должны иметь планы обслуживания баз данных для обновления статистики баз данных по базам данных контента, которые находятся в Microsoft SQL Server. Клиенты не должны полагаться только на задания обслуживания базы данных на основе SharePoint для выполнения этих задач. Дополнительные сведения см. в статье Рекомендации по использованию SQL Server в ферме SharePoint Server.
Симптомы
Когда статистика базы данных устаревает, при установке SharePoint Server может возникнуть один или несколько из следующих симптомов:
Медленное время загрузки и снижение производительности, что может привести к ошибке HTTP 500 при открытии страницы сайта
Снижение производительности, что приводит к возникновению сообщений об ошибках, таких как в следующем примере:
Service unavailable Unknown SQL Exception 53 Server Error in '/' Application Runtime Error
Выполнение обхода поиска приводит к непредвиденным SQL Server производительности, блокировке базы данных и блокировке.
Длительные задания таймера, такие как "Обработка данных об использовании Microsoft SharePoint Foundation", которые выполняются постепенно дольше во время каждой итерации.
Невозможность открыть сайт SharePoint и сообщение об ошибке, похожее на следующее:
Unexpected System.Web.HttpException: Request timed out
Время ожидания отрисовки сайта при загрузке навигации и следующее сообщение об ошибке:
PortalSiteMapProvider was unable to fetch children for node
Высокая загрузка ЦП на сервере, на котором выполняется SQL Server при обработке запросов SharePoint
Причина
Эти проблемы могут быть вызваны устаревшей статистикой базы данных. SharePoint ежедневно выполняет задание таймера для обновления статистики базы данных с помощью процедуры SQL proc_updatestatistics. Однако по различным причинам это задание таймера может быть не завершено или не может обновлять все таблицы последовательно. Например, если резервное копирование выполняется в базе данных контента из SQL Server одновременно с заданием таймера SharePoint, задание не будет продолжено.
После завершения задания таймера SharePoint, обновляющего статистику, в журналы ULS могут быть записаны следующие события:
- e9bf "Произошла ошибка при обновлении статистики в базе данных {0}"
- cm1y "Обновление статистики в базе данных {0}"
- dbl2 "Пропуск обновления статистики базы данных{0}, так как ее состояние "{1}
- cm1x "Обновление статистики во всех базах данных в {0}"
Если эти условия не отслеживаются внимательно и не выполняются корректирующие действия, статистика базы данных устаревает, и в конечном итоге возникают проблемы с производительностью SharePoint.
Разрешение
Чтобы предотвратить эти симптомы и потенциальные сбои службы, следует реализовать SQL Server планов обслуживания, чтобы обновлять статистику базы данных контента SharePoint с помощью параметра FULLSCAN. Дополнительные сведения см. в разделе Статистика индексов.
При реализации плана обслуживания SQL Server для обновления статистики в базах данных SharePoint не требуется отключать задание из SharePoint. Тем не менее, поскольку эти задачи обслуживания выполняют аналогичные функции из обоих расположений, допустимо отключить правило "Базы данных, используемые SharePoint, имеют устаревшую статистику индексов" из фермы SharePoint, если базами данных управляет SQL. Дополнительные сведения об управлении заданием обновления индекса из SharePoint Server см. в статье Базы данных, используемые SharePoint, имеют устаревшую статистику индексов (SharePoint 2013).
Дополнительные сведения
Рекомендуется ежедневно обновлять статистику баз данных контента SharePoint с помощью параметра FULLSCAN с SQL Server. Дополнительные сведения см. в разделах Рекомендации по SQL Server в ферме SharePoint Server и обслуживание базы данных для SharePoint Foundation 2010.
Однако если в вашей ферме SharePoint в настоящее время возникают проблемы с производительностью из-за устаревшей статистики, следующие сведения можно использовать в качестве одноразового шага по устранению этой проблемы.
Чтобы отобразить статистику базы данных из определенной базы данных, выполните следующий запрос:
-- Checking the DB Stats
select a.id as 'ObjectID', isnull(a.name,'Heap') as 'IndexName', b.name as 'TableName',
stats_date (id,indid) as stats_last_updated_time
from sys.sysindexes as a
inner join sys.objects as b
on a.id = b.object_id
where b.type = 'U'
Дополнительные сведения о проверке статистики базы данных см. в разделе DBCC SHOW_STATISTICS.
Чтобы обновить статистику базы данных в отдельной базе данных, которая использует параметр FULLSCAN, выполните следующий запрос:
-- Update DB Stats
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'
Важно! Параметр "sp_MSforeachtable" является незарегистрированной процедурой, которая предоставляется "как есть" и должна использоваться только для устранения немедленной проблемы. Мы не рекомендуем использовать эту процедуру в рамках регулярного плана обслуживания. Вместо этого ознакомьтесь с документацией UPDATE STATISTICS (Transact-SQL) о том, как реализовать план UPDATE STATISTICS с помощью параметра FULLSCAN.
В зависимости от того, насколько устарела статистика базы данных, может потребоваться очистить кэш планов запросов, выполнив команду DBCC FREEPROCCACHE после обновления статистики базы данных. Синтаксис и аргументы для этой процедуры можно найти в инструкции DBCC FREEPROCCACHE (Transact-SQL). Это гарантирует, что новые запросы используют оптимальный план выполнения после обновления статистики базы данных. Например, см. следующий запрос:
-- Remove all elements from the plan cache
DBCC FREEPROCCACHE
Важно!
Выполнение команды DBCC FREEPROCCACHE очищает кэш для всех планов запросов в экземпляре SQL. Эта команда должна быть хорошо понятна, прежде чем выполнять ее в рабочее время.
Если команда DBCC FREEPROCCACHE не была выполнена после обновления устаревшей статистики базы данных, запросы с неэффективными планами выполнения могут по-прежнему находиться в кэше и использоваться. В этом случае принудительно выполните повторную компиляцию указанной хранимой процедуры с помощью хранимой процедуры (см. sp_recompile (Transact-SQL)). Например, см. следующий запрос:
USE SP2013_Content_DB
GO
sp_recompile proc_getwebnavstruct
Выполнение команды sp_recompile вместе с параметрами процедуры, функции или таблицы предназначено для удаления одного элемента кэша, не затрагивая экземпляр.
Требуется дополнительная помощь? Посетите сайт сообщества SharePoint.