2017-08-10 43 views
0

我们一直试图在我们的系统中使用MarkLogic数据库设置灵活的复制。 我们遵循https://docs.marklogic.com/8.0/guide/flexrep/quick_start的指示,并且能够在两台MarkLogic服务器之间建立灵活的复制。我们已验证在主文件中创建的新文档被复制到副本。但是,在我们配置复制之前,主数据库目前拥有超过4700万条记录。一旦复制过程被触发,我们观察到文档正在被非常缓慢地复制到副本。大约20,000份文件在前两个小时内复制。速度非常缓慢,旧的记录需要几个月才能完全复制。Marklogic - 灵活的复制

我们的问题是:

  1. ,我们也在考虑增加两个服务器的硬件规格,但除了会有人有任何意见或文件为我们如何能够加快复制?我找不到有关此的任何现有文档?

  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:in /apply.xqy [1.0-ml] 2017-08-03 18:45:04。379注意:TaskServer:XDMP-EXTIME:try {let $ raw-module-name:= module-path($ action-to-execute/p:module)let $ module-kind:= module-kind($ raw -module-name)let $ module-name:= if ($ module-kind =“xquery”or $ module-kind =“javascript”)then $ raw-module-name else $ cpfi:xslt-action return if ($ module-name =“”) then fn:error((),“CPF-ACTIONNOTFOUND”,“Default success”)否则如果 ($ module-kind =“javascript”)则(xdmp:trace(“CPF动作调用“, fn:string-join(($ caller,xdmp:get-current-user(),$ uri, $ state-or-status,$ raw-module-name),”“)),xdmp :$ uri,$ uri, fn:QName(“”,“”):invoke($ module-name, (fn:QName过渡“),$ selected-transiti (xdmp:trace(“CPF Action Invoke”,fn:string-join(($ caller, )xdmp:trace)( options-var-js($ action-to-execute)),$ invoke-options))else get-current-user(),$ uri,$ state-or-status,$ raw-module-name),“ ”)),xdmp:invoke($ module-name,($ vars,xs:QName(“ if($ module-kind =“xslt”)then(xs:QName(“cpf:stylesheet-uri”)), $ selected-transition,options-var($ action-to-execute) ,$ raw-module-name)else()),$ invoke-options))} catch($ e){let $ trace:= let $ context:= fn:concat($ caller,“”,$ uri, (cff:log(fn:string-join(($ context,$ e/err:format-string),“”) “error”),cpf:log(($ context, $ e),“罚款”))让$ failure-action:= ($ pipeline/p:failure-actio n)[1] let $ raw-failure-module:= module-path($ failure-action/p:module)let $ failure-kind:= module-kind($ raw-failure-module)let $ failure -module:= if ($ failure-kind =“xquery”or $ failure-kind =“javascript”)then $ raw-failure-module else $ cpfi:xslt-action return if($ failure-module =“ “)然后fn:error((),”CPF-ACTIONNOTFOUND“,”Default failure action“)其他xdmp:invoke($失败模块,($ vars, xs:QName(”cpf:transition“),$ selected (xs:QName(“cpf:stylesheet), ($ failure-kind =”xslt“)then(xs:QName(”cpf:stylesheet) ), 超出2017-08-03 18:45:04.379注意:T askServer: /MarkLogic/cpf/triggers/internal-cpf.xqy,at 213:4,2017-08-03 18:45:04.379注意: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”),.. (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 :pipeline, ...), fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline/p:state-transition [3]/p:default-action,fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline/p:状态转变[3]) [1.0-ml] 2 017-08-03 18:45:04.379注意:TaskServer:$ caller = “on-state-enter”2017-08-03 18:45:04.379注意:TaskServer:
$ state-or-status =“http://marklogic.com/states/initial “2017-08-03 18:45:04.379注意:TaskServer:$ uri =”/_smslogs/5849823.xml“ 2017-08-03 18:45:04.379注意:TaskServer:$ vars = (xs:QName (“trgr:uri”),“/_smslogs/5849823.xml”, xs:QName(“trgr:trigger”),...)2017-08-03 18:45:04.379注意: TaskServer:$ invoke -options =不同的交易... 2017-08-03 18:45:04。379注意:TaskServer:$ pipeline = (fn:doc(“http://marklogic.com/cpf/pipelines/12349495875628658916.xml”)/ p:pipeline, fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline, fn:doc(“http://marklogic.com/cpf/pipelines/13179541037342910978.xml”)/ p:pipeline , ...)2017-08-03 18:45:04.379注意:TaskServer:$ action-to-execute = fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline/p:state-transition [3]/p:default-action 2017-08-03 18:45:04.379注意:TaskServer:$ chosen-transition = fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline/p:状态转换[3] 2017-08 -03 18:45:04.379注意:TaskServer:$ e = XDMP-NEWSTAMP 2017-08-03 18:45:04.379注意:TaskServer: /MarkLogic/cpf/triggers/internal-cpf.xqy,在342:6 ,2017-08-03 18:45:04.379注意:TaskServer:在(xs:QName(“trgr:uri”),“/_smslogs/5849823.xml”, (151) (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:pipeline, ...), (fn:doc(“http://marklogic.com/cpf/pipelines/12349495875628658916.xml”)/ p:pipeline/p:state-transition [2], fn:doc(“http://marklogic.com/cpf/pipelines/3358424510998587926.xml”)/ p:pipeline/p:state-transition [3], fn:doc(“http://marklogic.com/cpf/pipelines/13179541037342910978.xml”)/ p:pipeline/p:state-transition [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 =( )2017-08-03 18:45:04.379注意:TaskServer:$ uri =(xs:QName(“trgr:uri”), “/_smslogs/5849823.xml”,xs:QName(“trgr:trigger” ),...)2017-08-03 18:45:04.379注意:TaskServer:在 /MarkLogic/cpf/triggers/internal-cpf.xqy,在358:3,2017-08-03 18:45 :04.379注意:TaskServer: int:执行状态转换(“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 67241994447650)[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 =()2017-08-03 18:45:04.379 注意:TaskServer:$ uri =(xs:QName(“trgr:uri”), “/_smslogs/5849823.xml”,xs:QName(“trgr:触发“),...)2017-08-03 18:45:04.379注意:TaskServer: /MarkLogic/cpf/triggers/on-state-enter.xqy,41:6 [1.0-ml] 2017-08-03 18:45:04.379注意:TaskServer:$ state = cpf:state(“http://marklogic.com/states/initial”)2017-08-03 18:45:04.379注意:TaskServer:$ trace =()2017-08- 03 18:45:04.379 注意:TaskServer:$ vars =(xs:QName(“trgr:uri”), “/_smslogs/5849823.xml”,xs:QName(“trgr:trigger”),...)2017-08-03 18:45:04.379注意:TaskServer:XDMP-NEWSTAMP:时间戳太新 forest exp -rest-content-001-1(15017569242290900)2017-08-03 18:45:04.379注意:exp-rest-content-flexrep:XDMP-NEWSTAMP: 森林的时间戳太新了exp-rest-content-001- 1 (15017569242290900)2017年8月3日18:45:04.379注意: EXP-其余内容-flexrep:在/apply.xqy [1.0毫升]

回答

2

基于你引用,它的说明看起来您正在使用即时复制,它将复制数据库中的任何新/更新记录,但不会复制现有记录。

要启用数据库中现有文档的复制(0天文档),您需要将复制设置从即时推送更改为灵活复制目标配置页面中的计划任务(数据库> [数据库名称]>灵活复制>域> [域名]> [目标名称]:总结

在页面的底部,在那里你会看到直接推选项,这是真正的通过默认。如果将其设置为false,则复制将由push-local-forest进程处理,并且它将开始拾取0天文档。

至于提高文档从源复制到目标的速度,主要设置为文档每批。我听到的指导是在增加价值的同时观看push-local-forest.xqy进程的执行时间(Configure> Groups> [group name]> Task Server:Status并点击显示更多按钮;或http://servername:8002/dashboard查询执行选项卡)。

通常,推本地森林进程运行的每一分钟,所以你要确保你的批量大小进行了优化,能够在该分钟内完成,否则你会遇到的情况在哪里下推-local-forest进程将在第一个完成之前启动,并且他们有可能开始堆叠和死锁。

提高吞吐量的其他技巧是减少目标上的索引数量(如果可能的话),和/或使用具有巨型帧的VLAN进行集群间通信。

+0

立即推送确实设置为true,但我很困惑。我观察到的是,在设置灵活复制之后,如果我将新文档插入到主文件中,则新文档已成功复制到副本,但之后它开始慢慢复制现有(0天)文档。这是预期的行为还是不应该发生? 我将尝试调整每批文档。谢谢! –

+0

我的理解是,当立即推送设置为true时,它不应该复制0天的文档。可能还有其他一些“接触”较旧文档的过程,这些过程会将它们标记为复制,但除此之外,我不确定为什么会看到这种行为。 –

+0

嗯,我明白了。对不起,我知道这已经超出了原始问题的范围,但您是否知道一种方法来了解其他进程如何处理0天文档?或者失败了,是否有可以运行的查询来确定push-local-forest函数将哪些文档视为待复制?非常感谢你的帮助! –