Publishing Serviceを使用する際のファスト クエリのサポート


解説

貴社のSitecore XPソリューションがFast Query APIを使用する場合、目標となるデータベースのDescendantsテーブルをメンテナンスする必要があります。しかし、パブリッシュ処理のパフォーマンスを向上させるため、Publishing ServiceはDescendantsテーブルをデフォルトでは更新・再構築しないようになっています。一方で、必要に応じてPublishing ServiceがDescendantsテーブルをメンテナンスするよう設定することができます。

以下のアプローチは、パフォーマンスに影響する可能性があるため、限られた状況下においてのみ使用するようにしてください。このアプローチは、必ずパフォーマンスのテストを先行して実施してから適用するようにしてください。

解決策

パブリッシュ後にDescendantsテーブルが更新されるようにするには、以下の手順の実施を検討してください。

  1. 以下の設定パッチを、Publishing Serviceのホスト構成に適用します。
    <Settings>
      <Sitecore>
        <Publishing>
          <Services>
            <PromotionCoordinator>
              <Options>
                <RebuildDescendantsTable>true</RebuildDescendantsTable>
              </Options>
            </PromotionCoordinator>
          </Services>
        </Publishing>
      </Sitecore>
    </Settings>
  2. 前述の設定パッチをPublishing Serviceのホスト構成に適用した後で、以下のタイムアウト エラーが発生する場合があります。
    [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."
    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)
    その場合、CommandTimeoutを「120」秒から「600」秒に増加し、再度パブリッシュを試します。
    <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>

 

脚注