Таймаут при загрузке изображений
В настоящее время я тестирую 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 ГБ замедляет базу данных вниз, вы всегда должны стараться держать ее ниже этого размера с помощью своевременного резервного копирования/перехвата). Обновление статистики и восстановление индексов также не следует забывать на регулярной основе.