Таймаут при загрузке изображений

В настоящее время я тестирую Tridion 2011 и у меня возникают проблемы с созданием мультимедийных компонентов с загруженным контентом (в отличие от внешнего).

Я заполняю название, схему, тип мультимедиа, выбираю файл из своей системы и затем нажимаю save. Я получаю информационное сообщение Saving item..., а затем примерно через 30 секунд я получу сообщение The wait operation timed out.

В каталоге C:\Program Files (x86)\Tridion\log отсутствуют сообщения об ошибках. Посмотрев на просмотр событий, я вижу следующую информацию, относящуюся к действию сохранения

Unable to save Component (tcm:4-738361).
The wait operation timed out

Error Code:
0x8004033F (-2147220673)

Call stack:
System.Data.SqlClient.SqlConnection.OnError(SqlException,Boolean,Action`1)
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException,Boolean,Action`1)
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject,Boolean,Boolean)
System.Data.SqlClient.TdsParser.TryRun(RunBehavior,SqlCommand,SqlDataReader,BulkCopySimpleResultSet,TdsParserStateObject,Boolean&)
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader,RunBehavior,String)
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior,RunBehavior,Boolean,Boolean,Int32,Task&,Boolean)
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior,RunBehavior,Boolean,String,TaskCompletionSource`1,Int32,Task&,Boolean)
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1,String,Boolean,Int32,Boolean)
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
Tridion.ContentManager.Data.AdoNet.Sql.SqlDatabaseUtilities.SetBinaryContent(Int32,Stream)
Tridion.ContentManager.Data.AdoNet.ContentManagement.ItemDataMapper.Tridion.ContentManager.Data.ContentManagement.IItemDataMapper.SetBinaryContent(Stream,TcmUri)
Tridion.ContentManager.ContentManagement.RepositoryLocalObject.SetBinaryContent(BinaryContent)
Tridion.ContentManager.ContentManagement.Component.OnSaved(SaveEventArgs)
Tridion.ContentManager.IdentifiableObject.Save(SaveEventArgs)
Tridion.ContentManager.ContentManagement.VersionedItem.Save(Boolean)
Tridion.ContentManager.ContentManagement.VersionedItem.Save()
Tridion.ContentManager.BLFacade.ContentManagement.VersionedItemFacade.UpdateAndCheckIn(UserContext,String,Boolean,Boolean)
XMLState.Save
Component.Save

У меня уже установлены параметры таймаута в оснастке Content Manager Snap-In с высокими значениями (более 10 минут) из-за еще одной проблемы.

Таблица BINARIES в базе данных управления контентом составляет 25 ГБ, если это помогает.

Любые идеи? Спасибо.

Изменить 1

Следуя рекомендациям Барта Коопмана, мой DBA восстановил индексы, но не считает, что журнал транзакций имеет какое-то влияние на производительность. Проблема сохраняется.

Изменить 2

Я только что нашел более подробную информацию об ошибке

Unable to save Component (tcm:0-0-0).
Timeout expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
A database error occurred while executing Stored Procedure "EDA_ITEMS_UPDATEBINARYCONTENT".EDA_ITEMS_UPDATEBINARYCONTENT

После просмотра этой процедуры выглядит следующим образом:

SELECT 1 FROM BINARIES WHERE ID = @iBINARY_ID AND CONTENT IS NULL

Я выполняю его вручную с @iBINARY_ID как -1, и через 2 минуты он все еще не завершен. Я предполагаю, что когда я вставляю новый мультимедийный компонент, запрос будет чем-то подобным (т.е. Идентификатор не будет присутствовать в таблице).

В таблице BINARIES имеется NON-CLUSTERED Основной ключ. Может быть, решение было бы изменить это на CLUSTERED Основной ключ? Тем не менее, я предполагаю, что это НЕКОЛАСНО по какой-то причине.

Ответ 1

Только что получил ответ от поддержки клиентов SDL. По-видимому, это известная проблема, связанная с статистикой и выбранным планом запроса.

Выполнение следующей инструкции вручную из SQL Server Management Studio устраняет проблему (ее даже не нужно было заполнять)

SELECT 1 FROM BINARIES WHERE ID = -1 AND CONTENT IS NULL

Надеюсь, это поможет кому-то еще!

Ответ 2

Тайм-ауты операций с базой данных обычно являются индикацией неправильной конфигурации или отсутствия обслуживания. Увеличивая время ожидания, вы просто работаете над проблемой, а не решаете ее.

С большой таблицей бинарных файлов вы захотите убедиться, что у вас есть правильная настройка базы данных с файлами данных, которые отделены от ваших файлов журналов (разделены на разных физических разделах/дисках) и, возможно, даже с несколькими файлами данных на нескольких физических разделах используйте преимущества производительности.

Рядом с этим вы хотите убедиться, что стандартное обслуживание базы данных выполняется ежедневно/ежечасно. Такие вещи, как резервное копирование и усечение журнала транзакций каждый час, значительно улучшат производительность вашей базы данных (на MS SQL Server журнал транзакций более 1 ГБ замедляет базу данных вниз, вы всегда должны стараться держать ее ниже этого размера с помощью своевременного резервного копирования/перехвата). Обновление статистики и восстановление индексов также не следует забывать на регулярной основе.