貴社のSitecore XPソリューションがFast Query APIを使用する場合、目標となるデータベースのDescendantsテーブルをメンテナンスする必要があります。しかし、パブリッシュ処理のパフォーマンスを向上させるため、Publishing ServiceはDescendantsテーブルをデフォルトでは更新・再構築しないようになっています。一方で、必要に応じてPublishing ServiceがDescendantsテーブルをメンテナンスするよう設定することができます。
以下のアプローチは、パフォーマンスに影響する可能性があるため、限られた状況下においてのみ使用するようにしてください。このアプローチは、必ずパフォーマンスのテストを先行して実施してから適用するようにしてください。
パブリッシュ後にDescendantsテーブルが更新されるようにするには、以下の手順の実施を検討してください。
<Settings>
<Sitecore>
<Publishing>
<Services>
<PromotionCoordinator>
<Options>
<RebuildDescendantsTable>true</RebuildDescendantsTable>
</Options>
</PromotionCoordinator>
</Services>
</Publishing>
</Sitecore>
</Settings>
[Error] "Item Descendants Promote" from "Master" to "Internet" failed. - Error: "Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding."その場合、CommandTimeoutを「120」秒から「600」秒に増加し、再度パブリッシュを試します。
System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, String endMethod, Boolean isInternal)
at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
<sql-backend-default>
<Type>Sitecore.Framework.Publishing.Data.AdoNet.ConnectionRetryBehaviour, Sitecore.Framework.Publishing.Data</Type>
<Options>
<Name>Default Backend No Retry behaviour</Name>
<CommandTimeout>600</CommandTimeout>
<Retryer>NoRetryer</Retryer>
</Options>
</sql-backend-default>