Мы используем Pivotal Gemfire в качестве кэша для наших данных.Недавно мы перешли с gemfire 8.2.1 на 9.5.1 с точно такими же регионами, данными и индексами.Но создание индексов, особенно в одном регионе, отнимает слишком много времени с входным счетом 7284500. Мы использовали Spring data gemfire v2.4.1.RELEASE для определения сервера кеша.Ниже приведена конфигурация проблемного региона:
<gfe:replicated-region id="someRegion"
shortcut="REPLICATE_PERSISTENT" concurrency-level=100
persistent="true" disk-synchronous="true" statistics="true">
<gfe:eviction action="OVERFLOW_TO_DISK" type="ENTRY_COUNT"
threshold=1000></gfe:eviction>
</gfe:replicated-region>
Ниже приведены определения индекса:
<gfe:index id="someRegion_idx1" expression="o1.var1" from="/someRegion o1" />
<gfe:index id="someRegion_idx2" expression="o2.var2" from="/someRegion o2"/>
<gfe:index id="someRegion_idx3" expression="o3.var3" from="/someRegion o3"/>
<gfe:index id="someRegion_idx4" expression="o4.var4" from="/someRegion o4"/>
<gfe:index id="someRegion_idx5" expression="o5.var5" from="/someRegion o5"/>
<gfe:index id="someRegion_idx6" expression="o6.var6" from="/someRegion o6"/>
<gfe:index id="someRegion_idx7" expression="o7.var7" from="/someRegion o7"/>
<gfe:index id="someRegion_idx8" expression="o8.var8" from="/someRegion o8"/>
Ниже приведено определение кэша:
<gfe:cache
properties-ref="gemfireProperties"
close="true"
critical-heap-percentage=85
eviction-heap-percentage=75
pdx-serializer-ref="pdxSerializer"
pdx-persistent="true"
pdx-read-serialized="true"
pdx-ignore-unread-fields="false" />
Ниже приведеныпараметры Java:
java -Xms50G -Xmx80G -XX:+UseConcMarkSweepGC
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark
-XX:+UseParNewGC -XX:+UseLargePages
-XX:+DisableExplicitGC
-Ddw.appname=$APPNAME \
-Dgemfire.Query.VERBOSE=true \
-Dgemfire.QueryService.allowUntrustedMethodInvocation=true \
-DDistributionManager.MAX_THREADS=20 \
-DDistributionManager.MAX_FE_THREADS=10 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=11809 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dconfig=/config/location/ \
com.my.package.cacheServer
При запуске без XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC
мы использовали для получения следующей ошибки при применении индексов:
org.apache.geode.ForcedDisconnectException: участник не отвечает на запросы сердцебиения. Основная опора gemfire
Мы попытались увеличить свойство member-timeout
с 5000 до 300000, но та же проблема осталась.
После добавления вышеуказанных параметров java, связанных с GC, каждому индексу требуется около 24 минут для применения, но на этот раз без ошибок .Это приводит к тому, что серверу требуется слишком много времени, чтобы подойти вместе с 15 другими регионами.Нет такой проблемы, с которой сталкиваются другие регионы (в рассматриваемом регионе наибольшее количество данных. В других регионах количество записей от 500K до 3M)