This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new e9cb3584fb7 Add ShardingSphereStatisticsFactory (#34319)
e9cb3584fb7 is described below

commit e9cb3584fb7583bde59d020a16f0e6d0ecb37855
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Jan 12 13:12:52 2025 +0800

    Add ShardingSphereStatisticsFactory (#34319)
    
    * Add ShardingSphereStatisticsFactory
    
    * Add ShardingSphereStatisticsFactory
---
 .../impl/proxy/ProxyMetaDataInfoExporterTest.java  |  6 +-
 .../impl/proxy/ProxyStateExporterTest.java         |  6 +-
 .../PrometheusPluginLifecycleServiceTest.java      |  6 +-
 .../mode/metadata/MetaDataContextManager.java      |  4 +-
 .../mode/metadata/MetaDataContextsFactory.java     | 72 ++---------------
 .../metadata/ShardingSphereStatisticsFactory.java  | 94 ++++++++++++++++++++++
 .../manager/GlobalConfigurationManager.java        |  6 +-
 .../metadata/manager/SchemaMetaDataManager.java    |  6 +-
 .../mode/metadata/MetaDataContextsTest.java        |  2 +-
 .../data/ShardingSphereDataPersistServiceTest.java |  4 +-
 .../connector/DatabaseConnectorFactoryTest.java    |  6 +-
 .../ProxyDatabaseConnectionManagerTest.java        |  6 +-
 .../backend/connector/ProxySQLExecutorTest.java    |  4 +-
 .../connector/StandardDatabaseConnectorTest.java   |  8 +-
 .../jdbc/datasource/JDBCBackendDataSourceTest.java |  6 +-
 .../context/BackendExecutorContextTest.java        |  6 +-
 .../proxy/backend/context/ProxyContextTest.java    | 10 +--
 .../DatabaseAdminQueryBackendHandlerTest.java      |  4 +-
 .../DefaultDatabaseMetaDataExecutorTest.java       |  6 +-
 .../impl/UnicastDatabaseBackendHandlerTest.java    |  4 +-
 .../DatabaseOperateBackendHandlerFactoryTest.java  |  8 +-
 .../distsql/DistSQLQueryBackendHandlerTest.java    |  6 +-
 .../ral/queryable/ExportMetaDataExecutorTest.java  |  8 +-
 .../queryable/ExportStorageNodesExecutorTest.java  |  8 +-
 .../ral/updatable/ImportMetaDataExecutorTest.java  |  6 +-
 .../ral/updatable/SetDistVariableExecutorTest.java |  4 +-
 .../admin/MySQLAdminExecutorCreatorTest.java       |  6 +-
 .../executor/ShowCreateDatabaseExecutorTest.java   |  8 +-
 .../executor/ShowCurrentUserExecutorTest.java      |  6 +-
 .../admin/executor/ShowDatabasesExecutorTest.java  |  6 +-
 .../executor/ShowFunctionStatusExecutorTest.java   |  6 +-
 .../executor/ShowProcedureStatusExecutorTest.java  |  6 +-
 .../admin/executor/ShowTablesExecutorTest.java     |  8 +-
 .../admin/executor/UseDatabaseExecutorTest.java    |  6 +-
 .../SelectInformationSchemataExecutorTest.java     |  8 +-
 .../FrontDatabaseProtocolTypeFactoryTest.java      |  8 +-
 .../frontend/state/impl/OKProxyStateTest.java      |  4 +-
 .../MySQLAuthenticationEngineTest.java             |  6 +-
 .../OpenGaussAuthenticationEngineTest.java         |  6 +-
 .../PostgreSQLAuthenticationEngineTest.java        |  6 +-
 .../PostgreSQLCommandExecuteEngineTest.java        |  6 +-
 .../pipeline/core/util/PipelineContextUtils.java   |  6 +-
 42 files changed, 220 insertions(+), 188 deletions(-)

diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
index 77c19ce3908..24183ca7aa8 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyMetaDataInfoExporterTest.java
@@ -28,10 +28,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -82,7 +82,7 @@ class ProxyMetaDataInfoExporterTest {
         
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
         
when(metaData.getAllDatabases()).thenReturn(Collections.singleton(database));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
index 2678912d82f..b672d9c43c4 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/proxy/ProxyStateExporterTest.java
@@ -24,10 +24,10 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfigur
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.state.instance.InstanceStateContext;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -74,7 +74,7 @@ class ProxyStateExporterTest {
     
     private ContextManager mockContextManager() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
 
b/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
index a3df69305fe..42c90335bb8 100644
--- 
a/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
+++ 
b/agent/plugins/metrics/type/prometheus/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/prometheus/PrometheusPluginLifecycleServiceTest.java
@@ -25,11 +25,11 @@ import 
org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.workerid.StandaloneWorkerIdGenerator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -71,7 +71,7 @@ class PrometheusPluginLifecycleServiceTest {
     
     private ContextManager mockContextManager() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ComputeNodeInstanceContext computeNodeInstanceContext = new 
ComputeNodeInstanceContext(
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
ModeConfiguration("Standalone", null), new EventBusContext());
         computeNodeInstanceContext.init(new StandaloneWorkerIdGenerator(), 
mock(LockContext.class));
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 87a05f0bdf5..145b4d232db 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -27,7 +27,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import 
org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import 
org.apache.shardingsphere.mode.metadata.manager.DatabaseRuleConfigurationManager;
@@ -159,8 +158,7 @@ public class MetaDataContextManager {
                 
ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()),
 metaDataContexts.get().getMetaData().getAllDatabases(), props));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 metaDataContexts.get().getMetaData().getAllDatabases(), 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props);
-        ShardingSphereStatistics statistics = 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData);
-        MetaDataContexts result = new MetaDataContexts(metaData, statistics);
+        MetaDataContexts result = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         switchingResource.closeStaleDataSources();
         return result;
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 9e2caac70d0..ee36039a020 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -24,10 +24,6 @@ import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceGeneratedD
 import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.datasource.pool.config.DataSourceConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
@@ -41,19 +37,15 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.factory.ExternalMetaDataFactory;
-import org.apache.shardingsphere.mode.metadata.factory.InternalMetaDataFactory;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import 
org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
+import org.apache.shardingsphere.mode.metadata.factory.ExternalMetaDataFactory;
+import org.apache.shardingsphere.mode.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.RuleConfigurationPersistDecorator;
 
 import javax.sql.DataSource;
@@ -63,7 +55,6 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -127,7 +118,7 @@ public final class MetaDataContextsFactory {
         ResourceMetaData globalResourceMetaData = new 
ResourceMetaData(param.getGlobalDataSources());
         RuleMetaData globalRuleMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, 
databases.values(), props));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases.values(), globalResourceMetaData, 
globalRuleMetaData, props);
-        return new MetaDataContexts(metaData, createStatistics(persistService, 
metaData));
+        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(persistService, metaData));
     }
     
     private static Collection<String> getDatabaseNames(final 
ComputeNodeInstanceContext instanceContext,
@@ -156,57 +147,6 @@ public final class MetaDataContextsFactory {
         }
     }
     
-    /**
-     * Create statistics.
-     *
-     * @param persistService meta data persist service
-     * @param metaData meta data
-     * @return created statistics
-     */
-    public static ShardingSphereStatistics createStatistics(final 
MetaDataPersistService persistService, final ShardingSphereMetaData metaData) {
-        if (metaData.getAllDatabases().isEmpty()) {
-            return new ShardingSphereStatistics();
-        }
-        Optional<ShardingSphereStatisticsBuilder> statisticsBuilder = 
DatabaseTypedSPILoader.findService(ShardingSphereStatisticsBuilder.class, 
getDatabaseType(metaData));
-        if (!statisticsBuilder.isPresent()) {
-            return new ShardingSphereStatistics();
-        }
-        ShardingSphereStatistics result = 
statisticsBuilder.get().build(metaData);
-        
persistService.getShardingSphereDataPersistService().load(metaData).ifPresent(optional
 -> useLoadedToReplaceInit(result, optional));
-        return result;
-    }
-    
-    private static DatabaseType getDatabaseType(final ShardingSphereMetaData 
metaData) {
-        DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
-        DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
-        // TODO can `protocolType instanceof SchemaSupportedDatabaseType ? 
"PostgreSQL" : protocolType.getType()` replace to trunk database type?
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
-    }
-    
-    private static void useLoadedToReplaceInit(final ShardingSphereStatistics 
initStatistics, final ShardingSphereStatistics loadedStatistics) {
-        for (Entry<String, ShardingSphereDatabaseData> entry : 
initStatistics.getDatabaseData().entrySet()) {
-            if 
(loadedStatistics.getDatabaseData().containsKey(entry.getKey())) {
-                useLoadedToReplaceInitByDatabaseData(entry.getValue(), 
loadedStatistics.getDatabaseData().get(entry.getKey()));
-            }
-        }
-    }
-    
-    private static void useLoadedToReplaceInitByDatabaseData(final 
ShardingSphereDatabaseData initDatabaseData, final ShardingSphereDatabaseData 
loadedDatabaseData) {
-        for (Entry<String, ShardingSphereSchemaData> entry : 
initDatabaseData.getSchemaData().entrySet()) {
-            if 
(loadedDatabaseData.getSchemaData().containsKey(entry.getKey())) {
-                useLoadedToReplaceInitBySchemaData(entry.getValue(), 
loadedDatabaseData.getSchemaData().get(entry.getKey()));
-            }
-        }
-    }
-    
-    private static void useLoadedToReplaceInitBySchemaData(final 
ShardingSphereSchemaData initSchemaData, final ShardingSphereSchemaData 
loadedSchemaData) {
-        for (Entry<String, ShardingSphereTableData> entry : 
initSchemaData.getTableData().entrySet()) {
-            if (loadedSchemaData.getTableData().containsKey(entry.getKey())) {
-                
entry.setValue(loadedSchemaData.getTableData().get(entry.getKey()));
-            }
-        }
-    }
-    
     @SuppressWarnings({"unchecked", "rawtypes"})
     private static void restoreRules(final MetaDataContexts metaDataContexts, 
final ComputeNodeInstanceContext instanceContext) {
         if (!instanceContext.getModeConfiguration().isCluster()) {
@@ -273,7 +213,7 @@ public final class MetaDataContextsFactory {
                 
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 clonedMetaData.getAllDatabases(), props));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 clonedMetaData.getAllDatabases(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props);
-        return new MetaDataContexts(metaData, createStatistics(persistService, 
metaData));
+        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(persistService, metaData));
     }
     
     /**
@@ -299,7 +239,7 @@ public final class MetaDataContextsFactory {
                 
GlobalRulesBuilder.buildRules(originalMetaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(),
 clonedMetaData.getAllDatabases(), props));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 clonedMetaData.getAllDatabases(), 
originalMetaDataContexts.getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props);
-        return new MetaDataContexts(metaData, createStatistics(persistService, 
metaData));
+        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(persistService, metaData));
     }
     
     private static ShardingSphereMetaData cloneMetaData(final 
ShardingSphereMetaData originalMetaData, final ShardingSphereDatabase 
changedDatabase) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
new file mode 100644
index 00000000000..d399f8088e8
--- /dev/null
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.metadata;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
+import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+
+import java.util.Map.Entry;
+import java.util.Optional;
+
+/**
+ * ShardingSphere statistics factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingSphereStatisticsFactory {
+    
+    /**
+     * Create statistics.
+     *
+     * @param persistService meta data persist service
+     * @param metaData meta data
+     * @return created statistics
+     */
+    public static ShardingSphereStatistics create(final MetaDataPersistService 
persistService, final ShardingSphereMetaData metaData) {
+        if (metaData.getAllDatabases().isEmpty()) {
+            return new ShardingSphereStatistics();
+        }
+        Optional<ShardingSphereStatisticsBuilder> statisticsBuilder = 
DatabaseTypedSPILoader.findService(ShardingSphereStatisticsBuilder.class, 
getDatabaseType(metaData));
+        if (!statisticsBuilder.isPresent()) {
+            return new ShardingSphereStatistics();
+        }
+        ShardingSphereStatistics result = 
statisticsBuilder.get().build(metaData);
+        
persistService.getShardingSphereDataPersistService().load(metaData).ifPresent(optional
 -> useLoadedToReplaceInit(result, optional));
+        return result;
+    }
+    
+    private static DatabaseType getDatabaseType(final ShardingSphereMetaData 
metaData) {
+        DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
+        DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
+        // TODO can `protocolType instanceof SchemaSupportedDatabaseType ? 
"PostgreSQL" : protocolType.getType()` replace to trunk database type?
+        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
+    }
+    
+    private static void useLoadedToReplaceInit(final ShardingSphereStatistics 
initStatistics, final ShardingSphereStatistics loadedStatistics) {
+        for (Entry<String, ShardingSphereDatabaseData> entry : 
initStatistics.getDatabaseData().entrySet()) {
+            if 
(loadedStatistics.getDatabaseData().containsKey(entry.getKey())) {
+                useLoadedToReplaceInitByDatabaseData(entry.getValue(), 
loadedStatistics.getDatabaseData().get(entry.getKey()));
+            }
+        }
+    }
+    
+    private static void useLoadedToReplaceInitByDatabaseData(final 
ShardingSphereDatabaseData initDatabaseData, final ShardingSphereDatabaseData 
loadedDatabaseData) {
+        for (Entry<String, ShardingSphereSchemaData> entry : 
initDatabaseData.getSchemaData().entrySet()) {
+            if 
(loadedDatabaseData.getSchemaData().containsKey(entry.getKey())) {
+                useLoadedToReplaceInitBySchemaData(entry.getValue(), 
loadedDatabaseData.getSchemaData().get(entry.getKey()));
+            }
+        }
+    }
+    
+    private static void useLoadedToReplaceInitBySchemaData(final 
ShardingSphereSchemaData initSchemaData, final ShardingSphereSchemaData 
loadedSchemaData) {
+        for (Entry<String, ShardingSphereTableData> entry : 
initSchemaData.getTableData().entrySet()) {
+            if (loadedSchemaData.getTableData().containsKey(entry.getKey())) {
+                
entry.setValue(loadedSchemaData.getTableData().get(entry.getKey()));
+            }
+        }
+    }
+}
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
index d8ecdf1aa7b..ea83df6fd85 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
@@ -26,9 +26,9 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -96,6 +96,6 @@ public final class GlobalConfigurationManager {
     }
     
     private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData 
metaData) {
-        return new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
index f2f01401483..7665604cc6c 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
@@ -25,12 +25,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.refresher.util.TableRefreshUtils;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
@@ -65,8 +64,7 @@ public final class SchemaMetaDataManager {
         DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), 
metaDataContexts.get().getMetaData().getProps());
         metaDataContexts.get().getMetaData().addDatabase(databaseName, 
protocolType, metaDataContexts.get().getMetaData().getProps());
         ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
-        ShardingSphereStatistics statistics = 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData);
-        metaDataContexts.set(new MetaDataContexts(metaData, statistics));
+        metaDataContexts.set(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData)));
     }
     
     /**
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsTest.java
index 4b1bf467d31..cd03e7b7488 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsTest.java
@@ -38,6 +38,6 @@ class MetaDataContextsTest {
     void assertGetDefaultMetaData() {
         ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), mock(), mock(), 
Collections.emptyList());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        assertThat(new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)).getMetaData().getDatabase("foo_db"), is(database));
+        assertThat(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)).getMetaData().getDatabase("foo_db"), is(database));
     }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistServiceTest.java
index cd371998d6f..b1433f9ffe9 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistServiceTest.java
@@ -76,11 +76,13 @@ class ShardingSphereDataPersistServiceTest {
     private ShardingSphereMetaData mockMetaData() {
         ShardingSphereMetaData result = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
         when(result.containsDatabase("foo_db")).thenReturn(true);
+        when(result.getDatabase("foo_db").getName()).thenReturn("foo_db");
         
when(result.getDatabase("foo_db").containsSchema("foo_schema")).thenReturn(true);
+        
when(result.getDatabase("foo_db").getSchema("foo_schema").getName()).thenReturn("foo_schema");
         
when(result.getDatabase("foo_db").getSchema("foo_schema").containsTable("foo_tbl")).thenReturn(true);
         
when(result.getDatabase("foo_db").getSchema("foo_schema").getTable("foo_tbl").getAllColumns()).thenReturn(Collections.emptyList());
         when(result.containsDatabase("bar_db")).thenReturn(true);
-        
when(result.getDatabase("bar_db")).thenReturn(mock(ShardingSphereDatabase.class));
+        when(result.getDatabase("bar_db").getName()).thenReturn("bar_db");
         return result;
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java
index 2f3642c1311..0697b3e8bfb 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java
@@ -28,10 +28,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
@@ -97,7 +97,7 @@ class DatabaseConnectorFactoryTest {
     private ContextManager mockContextManager(final ShardingSphereDatabase 
database) {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.singleton(database), mock(ResourceMetaData.class), 
mock(RuleMetaData.class), new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         when(result.getDatabase("foo_db")).thenReturn(database);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index b4da038c531..4dbf078dcbf 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -28,10 +28,10 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ConnectionPostProcessor;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
@@ -128,7 +128,7 @@ class ProxyDatabaseConnectionManagerTest {
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
         return new ContextManager(
-                new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock(PersistRepository.class));
+                new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock(PersistRepository.class));
     }
     
     @AfterEach
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 258ddcf9912..f7f00e06d63 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -42,7 +42,7 @@ import 
org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -110,7 +110,7 @@ class ProxySQLExecutorTest {
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
         ContextManager contextManager = new ContextManager(
-                new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock(PersistRepository.class));
+                new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock(PersistRepository.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnectorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnectorTest.java
index 9f7e26c26c3..2e6db872182 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnectorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnectorTest.java
@@ -41,11 +41,11 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.fixture.QueryHeaderBuilderFixture;
@@ -125,7 +125,7 @@ class StandardDatabaseConnectorTest {
         
when(metaDataPersistService.getShardingSphereDataPersistService()).thenReturn(shardingSphereDataPersistService);
         ShardingSphereDatabase database = mockDatabase();
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), 
mock(ResourceMetaData.class), globalRuleMetaData, new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         when(result.getDatabase("foo_db")).thenReturn(database);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
index f45cc1131a1..d8a777e163f 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -27,10 +27,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.fixture.CallTimeRecordDataSource;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -86,7 +86,7 @@ class JDBCBackendDataSourceTest {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(mockDatabase()),
                 mock(ResourceMetaData.class), new 
RuleMetaData(Collections.singleton(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS))), new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
index 9017e96e72b..8b526691739 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
@@ -18,10 +18,10 @@
 package org.apache.shardingsphere.proxy.backend.context;
 
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
 import org.junit.jupiter.api.Test;
@@ -46,7 +46,7 @@ class BackendExecutorContextTest {
     
     private ContextManager mockContextManager() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
index 2efcba8cb45..9e91b612b63 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
@@ -25,10 +25,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.state.ClusterState;
 import org.junit.jupiter.api.AfterEach;
@@ -71,7 +71,7 @@ class ProxyContextTest {
     @Test
     void assertInit() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ProxyContext.init(new ContextManager(metaDataContexts, 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS), 
mock(PersistRepository.class)));
         
assertThat(ProxyContext.getInstance().getContextManager().getStateContext(), 
is(ProxyContext.getInstance().getContextManager().getStateContext()));
         
assertThat(ProxyContext.getInstance().getContextManager().getStateContext().getState(),
 is(ClusterState.OK));
@@ -85,7 +85,7 @@ class ProxyContextTest {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.singleton(mockDatabase()), 
mock(ResourceMetaData.class), mock(RuleMetaData.class), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         ProxyContext.init(contextManager);
         assertTrue(ProxyContext.getInstance().databaseExists("db"));
@@ -97,7 +97,7 @@ class ProxyContextTest {
         Collection<ShardingSphereDatabase> databases = createDatabases();
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(), mock(), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         ProxyContext.init(contextManager);
         assertThat(new 
HashSet<>(ProxyContext.getInstance().getAllDatabaseNames()), 
is(databases.stream().map(ShardingSphereDatabase::getName).collect(Collectors.toSet())));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
index d6071d4ef9a..e22aef245cc 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
@@ -112,6 +112,6 @@ class DatabaseAdminQueryBackendHandlerTest {
         
when(ProxyContext.getInstance().getContextManager().getDatabase("foo_db")).thenReturn(database);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS);
-        return new ContextManager(new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock());
+        return new ContextManager(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock());
     }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
index 06da3379eee..57511c2ffc9 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
@@ -28,10 +28,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.util.SystemSchemaUtils;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -152,7 +152,7 @@ class DefaultDatabaseMetaDataExecutorTest {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.singleton(database), mock(ResourceMetaData.class), 
new RuleMetaData(Collections.singleton(authorityRule)), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         when(result.getDatabase("auth_db")).thenReturn(database);
         
when(ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("auth_db"));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
index 2b54260429f..84ff4aaa258 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector;
 import 
org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory;
@@ -134,7 +134,7 @@ class UnicastDatabaseBackendHandlerTest {
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), mock(), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
index 1e5fe9e8f86..0691b4bc681 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
@@ -26,10 +26,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -81,7 +81,7 @@ class DatabaseOperateBackendHandlerFactoryTest {
         
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.singleton(mockDatabase()), 
mock(ResourceMetaData.class), mock(RuleMetaData.class), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
@@ -157,7 +157,7 @@ class DatabaseOperateBackendHandlerFactoryTest {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
         MetaDataContexts metaDataContexts = isGovernance
                 ? mockMetaDataContexts()
-                : new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+                : new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
index 98ca8effd5f..4748d1153b2 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
@@ -33,10 +33,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -71,7 +71,7 @@ class DistSQLQueryBackendHandlerTest {
     @Test
     void assertExecuteWithUnknownDatabase() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ConnectionSession connectionSession = mock(ConnectionSession.class, 
RETURNS_DEEP_STUBS);
         when(connectionSession.getUsedDatabaseName()).thenReturn("unknown");
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
index b1a794e7a45..dd339d317da 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
@@ -44,11 +44,11 @@ import 
org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.util.json.JsonUtils;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.workerid.StandaloneWorkerIdGenerator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceConfiguration;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDatabaseConfiguration;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyServerConfiguration;
@@ -107,7 +107,7 @@ class ExportMetaDataExecutorTest {
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database),
                 new ResourceMetaData(Collections.emptyMap()), new 
RuleMetaData(Collections.singleton(new GlobalClockRule(new 
DefaultGlobalClockRuleConfigurationBuilder().build()))),
                 new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
@@ -138,7 +138,7 @@ class ExportMetaDataExecutorTest {
                 new RuleMetaData(Arrays.asList(new AuthorityRule(new 
DefaultAuthorityRuleConfigurationBuilder().build()),
                         new GlobalClockRule(new 
DefaultGlobalClockRuleConfigurationBuilder().build()))),
                 new ConfigurationProperties(PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.SQL_SHOW.getKey(), "true"))));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ComputeNodeInstanceContext computeNodeInstanceContext = new 
ComputeNodeInstanceContext(
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
ModeConfiguration("Standalone", null), new EventBusContext());
         computeNodeInstanceContext.init(new StandaloneWorkerIdGenerator(), 
mock(LockContext.class));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
index fd67ec83af0..91518ea6024 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
@@ -32,10 +32,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
@@ -114,7 +114,7 @@ class ExportStorageNodesExecutorTest {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.emptyList(), new 
ResourceMetaData(Collections.emptyMap()), new 
RuleMetaData(Collections.emptyList()), new ConfigurationProperties(new 
Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
@@ -153,7 +153,7 @@ class ExportStorageNodesExecutorTest {
                 new ResourceMetaData(Collections.emptyMap()),
                 new RuleMetaData(Collections.singleton(new AuthorityRule(new 
DefaultAuthorityRuleConfigurationBuilder().build()))),
                 new ConfigurationProperties(PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.SQL_SHOW.getKey(), "true"))));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java
index 441febaf206..f3b2113e045 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java
@@ -41,11 +41,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.workerid.StandaloneWorkerIdGenerator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -118,7 +118,7 @@ class ImportMetaDataExecutorTest {
                 new RuleMetaData(Arrays.asList(new AuthorityRule(new 
DefaultAuthorityRuleConfigurationBuilder().build()),
                         new GlobalClockRule(new 
DefaultGlobalClockRuleConfigurationBuilder().build()))),
                 new ConfigurationProperties(PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.SQL_SHOW.getKey(), "true"))));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ComputeNodeInstanceContext computeNodeInstanceContext = new 
ComputeNodeInstanceContext(
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
ModeConfiguration("Standalone", null), new EventBusContext());
         computeNodeInstanceContext.init(new StandaloneWorkerIdGenerator(), 
mock(LockContext.class));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
index 8779e031062..283062dae33 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
@@ -32,7 +32,7 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.service.config.global.PropertiesPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -112,6 +112,6 @@ class SetDistVariableExecutorTest {
                 new ComputeNodeInstance(mock(InstanceMetaData.class)), new 
ModeConfiguration("Standalone", null), new EventBusContext());
         computeNodeInstanceContext.init(mock(WorkerIdGenerator.class), 
mock(LockContext.class));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        return new ContextManager(new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData)), 
computeNodeInstanceContext, mock());
+        return new ContextManager(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData)), 
computeNodeInstanceContext, mock());
     }
 }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreatorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreatorTest.java
index 69bea75fea3..8bf5c19856e 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreatorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreatorTest.java
@@ -25,10 +25,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
@@ -352,7 +352,7 @@ class MySQLAdminExecutorCreatorTest {
     private void initProxyContext(final Collection<ShardingSphereDatabase> 
databases) {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(ResourceMetaData.class), 
mock(RuleMetaData.class), new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
     }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
index d00e3cf325d..b8ed7a71804 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
@@ -21,11 +21,11 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowCreateDatabaseStatement;
@@ -79,7 +79,7 @@ class ShowCreateDatabaseExecutorTest {
         
when(shardingSphereDataPersistService.load(any())).thenReturn(Optional.empty());
         
when(metaDataPersistService.getShardingSphereDataPersistService()).thenReturn(shardingSphereDataPersistService);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), mock(), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
index c9804d35138..0230aee23a9 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
@@ -24,10 +24,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -67,7 +67,7 @@ class ShowCurrentUserExecutorTest {
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.emptyList(), mock(ResourceMetaData.class), 
mockRuleMetaData(), new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
index c9453074ab6..0264470a4d2 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
@@ -26,10 +26,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowFilterSegment;
@@ -185,7 +185,7 @@ class ShowDatabasesExecutorTest {
         MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getShardingSphereDataPersistService().load(any())).thenReturn(Optional.empty());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), globalRuleMetaData, mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
index 09f252913af..3b83d4c87dc 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
@@ -21,10 +21,10 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowFunctionStatusStatement;
@@ -68,7 +68,7 @@ class ShowFunctionStatusExecutorTest {
         MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getShardingSphereDataPersistService().load(any())).thenReturn(Optional.empty());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), mock(), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
index df162898605..d84ad71460b 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
@@ -21,10 +21,10 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLShowProcedureStatusStatement;
@@ -68,7 +68,7 @@ class ShowProcedureStatusExecutorTest {
         MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getShardingSphereDataPersistService().load(any())).thenReturn(Optional.empty());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), mock(), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
index 1a26fc1fbcb..93bcc6c551e 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
@@ -29,11 +29,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
@@ -199,7 +199,7 @@ class ShowTablesExecutorTest {
         
when(metaDataPersistService.getShardingSphereDataPersistService()).thenReturn(shardingSphereDataPersistService);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 databases, mock(ResourceMetaData.class), new 
RuleMetaData(Collections.singleton(mock(AuthorityRule.class))), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(result.getDatabase("db_0")).thenReturn(databases.iterator().next());
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
index aac4205ad23..412f755762e 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
@@ -22,10 +22,10 @@ import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.databa
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLUseStatement;
@@ -85,7 +85,7 @@ class UseDatabaseExecutorTest {
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(createDatabases(), mock(), mock(), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index 537311bdc71..38c83fa239c 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -29,11 +29,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -168,7 +168,7 @@ class SelectInformationSchemataExecutorTest {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Arrays.stream(databases).collect(Collectors.toList()), 
mock(ResourceMetaData.class), new 
RuleMetaData(Collections.singleton(authorityRule)),
                 new ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         for (ShardingSphereDatabase each : databases) {
             when(result.getDatabase(each.getName())).thenReturn(each);
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index d207edd96aa..0e48ba9e1d6 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -25,11 +25,11 @@ import 
org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.mode.metadata.persist.data.ShardingSphereDataPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -97,7 +97,7 @@ class FrontDatabaseProtocolTypeFactoryTest {
         
when(shardingSphereDataPersistService.load(any())).thenReturn(Optional.empty());
         
when(metaDataPersistService.getShardingSphereDataPersistService()).thenReturn(shardingSphereDataPersistService);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(), mock(), new 
ConfigurationProperties(props));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
         return new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index 3410b90aa45..f04bb090a2d 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -30,7 +30,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -96,7 +96,7 @@ class OKProxyStateTest {
         when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(transactionRule)));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
-        return new ContextManager(new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock());
+        return new ContextManager(new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)), computeNodeInstanceContext, mock());
     }
     
     @SuppressWarnings({"unchecked", "SameParameterValue"})
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
index 6c7df8ebc62..8c6d3477699 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
@@ -48,10 +48,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.ssl.MySQLSSLRequestHandler;
 import org.apache.shardingsphere.proxy.frontend.ssl.ProxySSLContext;
@@ -287,7 +287,7 @@ class MySQLAuthenticationEngineTest {
         
when(metaDataPersistService.getShardingSphereDataPersistService().load(any())).thenReturn(Optional.empty());
         ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", 
TypedSPILoader.getService(DatabaseType.class, "MySQL"), mock(), mock(), 
Collections.emptyList());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), new 
RuleMetaData(Collections.singleton(rule)), mock());
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(metaDataPersistService, metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
     }
diff --git 
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
 
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
index 5d5af9dcbf5..5358129a45f 100644
--- 
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
+++ 
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
@@ -40,10 +40,10 @@ import 
org.apache.shardingsphere.infra.exception.postgresql.exception.protocol.P
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.frontend.ssl.ProxySSLContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -134,7 +134,7 @@ class OpenGaussAuthenticationEngineTest {
     private ContextManager mockContextManager() {
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.emptyList(), mock(ResourceMetaData.class),
                 buildGlobalRuleMetaData(new UserConfiguration("root", 
"sharding", "", null, false)), mock(ConfigurationProperties.class));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
         return result;
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
index 946d583c09c..869d59b068c 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
@@ -43,10 +43,10 @@ import 
org.apache.shardingsphere.infra.exception.postgresql.exception.protocol.P
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.authenticator.impl.PostgreSQLMD5PasswordAuthenticator;
 import org.apache.shardingsphere.proxy.frontend.ssl.ProxySSLContext;
@@ -201,7 +201,7 @@ class PostgreSQLAuthenticationEngineTest {
     private MetaDataContexts getMetaDataContexts(final UserConfiguration 
userConfig) {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.emptyList(), mock(ResourceMetaData.class), 
buildGlobalRuleMetaData(userConfig), new ConfigurationProperties(new 
Properties()));
-        return new MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData));
+        return new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData));
     }
     
     private RuleMetaData buildGlobalRuleMetaData(final UserConfiguration 
userConfig) {
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index b878690ab9d..f94c78d3725 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -25,10 +25,10 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQ
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import 
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ConnectionResourceLock;
@@ -125,7 +125,7 @@ class PostgreSQLCommandExecuteEngineTest {
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        ContextManager contextManager = new ContextManager(new 
MetaDataContexts(metaData, 
MetaDataContextsFactory.createStatistics(mock(MetaDataPersistService.class), 
metaData)),
+        ContextManager contextManager = new ContextManager(new 
MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(mock(MetaDataPersistService.class), 
metaData)),
                 computeNodeInstanceContext, mock(PersistRepository.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         commandExecuteEngine.writeQueryData(channelHandlerContext, 
databaseConnectionManager, queryCommandExecutor, 0);
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
index 59f1b671e84..b3040118409 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
@@ -61,10 +61,10 @@ import 
org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlModeConfigurationSwapper;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
 import 
org.apache.shardingsphere.test.it.data.pipeline.core.fixture.EmbedTestingServer;
@@ -145,7 +145,7 @@ public final class PipelineContextUtils {
                 new ShardingSphereColumn("status", Types.VARCHAR, false, 
false, false, true, false, false)),
                 Collections.emptyList(), Collections.emptyList()));
         tables.forEach(each -> 
old.getMetaData().getDatabase("logic_db").getSchema("logic_db").putTable(each));
-        return new MetaDataContexts(old.getMetaData(), 
MetaDataContextsFactory.createStatistics(persistService, old.getMetaData()));
+        return new MetaDataContexts(old.getMetaData(), 
ShardingSphereStatisticsFactory.create(persistService, old.getMetaData()));
     }
     
     /**

Reply via email to