2017-08-10 10 views
0

MarkLogicデータベースを使用するシステムでは柔軟なレプリケーションを設定しようとしています。 https://docs.marklogic.com/8.0/guide/flexrep/quick_startの指示に従い、2台のMarkLogicサーバー間で柔軟なレプリケーションをセットアップできました。マスターで作成された新しい文書がレプリカにコピーされることを確認しました。ただし、マスターデータベースには現在、レプリケーションを構成する前に4,700万件を超えるレコードが存在します。レプリケーションプロセスがトリガーされると、ドキュメントが非常にゆっくりとレプリカにレプリケートされていることがわかりました。最初の2時間以内に約2万の文書が複製されました。レートは非常に遅いです。古いレコードが完全に複製されるには数カ月かかるでしょう。Marklogic - フレキシブルレプリケーション

私たちの質問は以下のとおりです。

  1. 我々は2台のサーバーのハードウェアスペックを増やすに探しているが、それはさておき、誰でも我々は、レプリケーションを高速化できるかについてどのようなアドバイスやドキュメントを持っているでしょうか?私はこれに関する既存の文書を見つけることができませんでしたか?

  2. 初期データセットを複製する必要なく柔軟なレプリケーションを設定することは可能でしょうか?参考までに、マスターデータベースを複製し、その複製を複製として使用しようとしました。しかし、この場合、レプリカサーバーでXDMP-NEWSTAMPとXDMP-EXTIMEのエラーが発生したため、この方法をあきらめました。レプリカで発生したエラーのサンプルは以下の通りです:

2017年8月3日18:45:04.376お知らせ:EXP-安静コンテンツflexrep: XDMP-NEWSTAMP:のためのタイムスタンプが新しすぎます森林exp-rest-content-001-1 (15017569242290900)2017-08-03 18:45:04.376通知: exp-rest-content-flexrep:/apply.xqy [1.0-ml] 2017-08-03 18:45:04379 Notice:TaskServer:XDMP-EXTIME:try {let $ raw-module-name:= module-path($ action-to-execute/p:module) $ module-kind:= module-kind($ raw $ module-type = "xquery"または$ module-kind = "javascript") $ raw-module-name else $ cpfi:xslt-actionもしあれば、$ module-name:=を($ module-kind = "xquery"または$ module-kind = "javascript" ($ module-kind = "javascript")then(xdmp:trace( "CPF-ACTIONNOTFOUND"、 "default success" ( "$ caller、xdmp:get-current-user()、$ uri、 $ state-or-status、$ raw-module-name)、" "))、xdmp $ uri、$ uri、$ uri、$ uri、 fn:QName( ""、 ""、 "トランジション ")、$ selected-transiti ($ caller、 xdmp:string)(xdmp:trace( "CPF Action Invoke"、fn:string-join($呼び出し元、 オプション-var-js($ action-to-execute))、$ invoke-options))else xdmp:invoke($ module-name、($ vars、xs:QName( "get-current-user()、$ uri、$ state-or-status、$ raw-module-name)"、 " "= "xslt")then(xs:QName( "cpf:stylesheet-uri"))、選択されたトランジション、オプション-var($ action-to-execute)、 ($ caller、 ""、$ uri、$ url、$ url、$ url、$ url、$ url、 cpf:log(($ context、$ e/err:format-string)、 "")、 "エラー")、cpf:log(($ context、$ e/$ e)、 "fine"))$ let-failure-action:= ($ pipeline/p:failure-actio module-path($ failure-action/p:module)は、$ failure-kind:= module-kind($ raw-failure-module)$失敗を許可します。 ($ failure-kind = "xquery"または$ failure-kind = "javascript")then $ raw-failure-module else $ cpfi:xslt-action if($ failure-module = " ")fn:error(()、" CPF-ACTIONNOTFOUND "、"デフォルトの失敗アクション ")else xdmp:invoke($ failure-module、($ vars、 xs:QName(" cpf:transition ")、$ selected($ failure-kind = "xslt")ならば、xs:QName( "cpf:stylesheet")、 オプション-var($ failure-action)、xs:QName( "cpf:exception" -uri ")、 $ raw-failure-module)else())、$ invoke-options)} - 制限時間 を超過2017-08-03 18:45:04.379通知:T askServer: /MarkLogic/cpf/triggers/internal-cpf.xqy、213:4、2017-08-03 18:45:04.379 Notice:TaskServer:execute-action( "on-state-enter" "http://marklogic.com/states/initial"、 "/_smslogs/5849823.xml"、 (xs:QName( "trgr:uri")、/_smslogs/5849823.xml、 xs:QName( "trgr:trigger")、.. 。)、異なる-transactiont ...、 (FN:DOC( "http://marklogic.com/cpf/pipelines/12349495875628658916.xml ")/ P:パイプライン、 FN:DOC(" http://marklogic.com/cpf/pipelines/3358424510998587926.xml ")/ P:パイプライン、 FN:DOC(" http://marklogic.com/cpf/pipelines/13179541037342910978.xml")/ Pパイプライン/ p:状態遷移[3]/p:デフォルトアクション、fn:doc( "http://marklogic.com/cpf/pipelines/3358424510998587926.xml")/パイプライン:パイプライン、 ...)、 fn:doc( "http://marklogic.com/cpf/pipelines/3358424510998587926.xml"/p:状態遷移[3]) [1.0-ml] 2 017-08-03 18:45:04.379通知:TaskServer:$ caller = "オン状態入力" 2017-08-03 18:45:04.379通知:TaskServer:
$ state-or-status = "http://marklogic.com/states/initial "2017-08-03 18:45:04.379 Notice:TaskServer:$ uri =" /_smslogs/5849823.xml " 2017-08-03 18:45:04.379 Notice:TaskServer:$ vars = (xs:QName) ( "trgr:uri")、 "/_smslogs/5849823.xml"、 xs:QName( "trgr:trigger")、...)2017-08-03 18:45:04.379通知: TaskServer:$ invoke -options = different-transactiont ... 2017-08-03 18:45:04。379お知らせ:TaskServer:$パイプライン= (FN:DOC( "http://marklogic.com/cpf/pipelines/12349495875628658916.xml ")/ P:パイプライン、 FN:DOC(" http://marklogic.com/cpf/pipelines/3358424510998587926.xml ")/ P:パイプライン、 FN:DOC(" http://marklogic.com/cpf/pipelines/13179541037342910978.xml")/ P:パイプライン、 ...)2017-08-03 18:45:04.379 Notice:TaskServer:$アクションの実行 = fn:doc( "http://marklogic.com/cpf/pipelines/3358424510998587926.xml")/ p:パイプライン/ p:状態遷移[3]/p:default-action 2017-08-03 18:45:04.379 Notice:TaskServer:$ chosen-transition = fn:doc( "http://marklogic.com/cpf/pipelines/3358424510998587926.xml")/ p:パイプライン/ p:状態遷移[3] 2017-08 -03 18:45:04.379 Notice:TaskServer:$ e = XDMP-NEWSTAMP 2017-08-03 18:45:04.379 Notice:TaskServer: /MarkLogic/cpf/triggers/internal-cpf.xqy、342:6 、2017-08-03 18:45:04.379 Notice:TaskServer:( "trgr:uri")、 "/_smslogs/5849823.xml"、 (実行時遷移)パイプライン、 fn:doc(x:QName: "trgr:trigger")、...)、 f:doc( "http://marklogic.com/cpf/pipelines/13179541037342910978.xml")/ p:pipeline、 ...)、 (fn:doc( "http://marklogic.com/cpf/pipelines/12349495875628658916.xml")/ p:パイプライン/ p:状態遷移[2]、 fn:doc ["http://marklogic.com/cpf/pipelines/3358424510998587926.xml")/ p:パイプライン/ p:状態遷移[1]、 ...)、http://marklogic.com/states/initial) [1.0-ml] ] 2017-08-03 18:45:04.379通知:TaskServer:$ caller = cpf:state( "http://marklogic.com/states/initial")2017-08-03 18:45:04.379注意:TaskServer:$ state-or-status =( ( "trgr:uri")、 "/_smslogs/5849823.xml"、xs:QName( "trgr:trigger")2017-08-03 18:45:04.379注意:TaskServer:$ uri = )、...)2017-08-03 18:45:04.379 Notice:TaskServer: /MarkLogic/cpf/triggers/internal-cpf.xqy、at 358:3、2017-08-03 18:45 :のint:execute-state-transition( "on-state-enter"、 cpf:state( "http://marklogic.com/states/initial")、 "/_smslogs/5849823.xml"、(xs:QName( " trgr:uri ")、 " /_smslogs/5849823.xml "、xs:QName(" trgr:trigger ")、...)、65513タスクサーバー:$ caller = cpf:state( "http://marklogic.com/states/initial")2017-08-03 18:45:04.379 Notice:TaskServer:$ stateタスクサーバー:$ uri =(xs:QName( "trgr:uri")、 "/_smslogs/5849823.xml"、xs:QName( "trgr:トリガー)...)、...)2017-08-03 18:45:04.379 Notice:TaskServer: /MarkLogic/cpf/triggers/on-state-enter.xqy、41:6 [012-M] 2017-08-03 18:45:04.379 Notice:TaskServer:$ trace =()2017-08-03 18:45:04.379 Notice:TaskServer:$ trace =()2017-08-03 18:45:43 03 18:45:04.379 Notice:TaskServer:$ vars =(xs:QName( "trgr:uri")、 "/_smslogs/5849823.xml"、xs:QName( "trgr:trigger")、...)2017-08-03 18:45:04.379 Notice:TaskServer:XDMP-NEWSTAMP:タイムスタンプが forest exp -rest-content-001-1(15017569242290900)2017-08-03 18:45:04.379注意:exp-rest-content-flexrep:XDMP-NEWSTAMP: タイムスタンプがフォレストにも新しく追加されました。 1 (15017569242290900)2017年8月3日18:45:04.379お知らせ: EXP-安静コンテンツflexrep:/apply.xqyであなたは、それを参照する指示に基づいて、[1.0-mlの]

答えて

2

即時レプリケーションを使用しているように見えます。これは、データベース内の新しい/更新されたレコードをレプリケートしますが、既存のレコードはレプリケートしません。

データベース(0日目のドキュメント)の既存のドキュメントのレプリケーションを有効にするには、フレキシブルレプリケーションターゲット構成ページ(データベース> [データベース名]> Flexibleのレプリケーション設定を即時プッシュからスケジュールされたタスクに変更する必要があります。レプリケーション>ドメイン> [ドメイン名]> [ターゲット名]:概要

がページの下部に、あなたは、デフォルトではある即時プッシュオプションを、表示されます。 を偽に設定すると、レプリケーションはプッシュローカルフォレストプロセスによって処理され、0日ドキュメントの取得が開始されます。

ドキュメントがソースからターゲットに複製される割合を増やす場合、プライマリ設定はDocuments Per Batchです。ここで私が聞いた指針は、push-local-forest.xqyプロセス(の設定>グループ> [グループ名]>タスクサーバ:ステータス)の実行時間を見ながら値を増やし、ボタンを表示するか、またはhttp://servername:8002/dashboardクエリ実行タブ)に表示します。

通常プッシュローカルフォレストプロセスは毎分を実行しますので、あなたがあなたのバッチサイズがその分以内に完了することができるように最適化されたことを確認するには、そうでなければ、次のプッシュ状況に実行することができます-local-forestプロセスは、最初のプロセスが終了する前に開始され、スタックアップとデッドロックの可能性があります。

スループットを向上させるその他のヒントは、ターゲット上のインデックスの数を減らしたり、クラスタ間通信にジャンボフレームを使用するVLANを使用することです。

+0

即時プッシュは本当にtrueに設定されていましたが、私は混乱しています。私が見てきたことは、フレキシブルレプリケーションを設定した後、新しいドキュメントをマスターに挿入すると、新しいドキュメントがレプリカに正常にレプリケートされた後、既存の(0日)ドキュメントをゆっくりと複製し始めます。これは予想された動作ですか、起こってはいけませんか? バッチごとのドキュメントを調整しようとしています。ありがとう! –

+0

私は、即時プッシュがtrueに設定されている場合、0日のドキュメントを複製してはならないことを理解しています。古い文書に「触れる」プロセスがいくつか存在する可能性がありますが、それらはレプリケーションのためにマークされますが、その外ではなぜその動作が見えるのか分かりません。 –

+0

ええ、そうです。申し訳ありませんが、これは既に元の質問の範囲外であることはわかっていますが、他のプロセスが0日のドキュメントにどのように触れているかを知る方法を知っていますか?それとも、失敗したのですか?プッシュローカルフォレスト機能がレプリケーションの保留中と見なすドキュメントを判断するために実行できるクエリはありますか?あなたの助けをありがとう! –