OceanBase logo

OceanBase

A unified distributed database ready for your transactional, analytical, and AI workloads.

Product Overview
DEPLOY YOUR WAY

OceanBase Cloud

The best way to deploy and scale OceanBase

OceanBase Enterprise

Run and manage OceanBase on your infra

TRY OPEN SOURCE

OceanBase Community Edition

The free, open-source distributed database

OceanBase seekdb

Open source AI native search database

Customer Stories

Real-world success stories from enterprises across diverse industries.

View All
BY USE CASES

Mission-Critical Transactions

Global & Multicloud Application

Elastic Scaling for Peak Traffic

Real-time Analytics

Active Geo-redundancy

Database Consolidation

Resources

Comprehensive knowledge hub for OceanBase.

Blog

Live Demos

Training & Certification

Documentation

Official technical guides, tutorials, API references, and manuals for all OceanBase products.

View All
PRODUCTS

OceanBase Cloud

OceanBase Database

Tools

Connectors and Middleware

QUICK START

OceanBase Cloud

OceanBase Database

BEST PRACTICES

Practical guides for utilizing OceanBase more effectively and conveniently

Company

Learn more about OceanBase – our company, partnerships, and trust and security initiatives.

About OceanBase

Partner

Trust Center

Contact Us

International - English
中国站 - 简体中文
日本 - 日本語
Sign In
Start on Cloud

OceanBase

A unified distributed database ready for your transactional, analytical, and AI workloads.

Product Overview
DEPLOY YOUR WAY

OceanBase Cloud

The best way to deploy and scale OceanBase

OceanBase Enterprise

Run and manage OceanBase on your infra

TRY OPEN SOURCE

OceanBase Community Edition

The free, open-source distributed database

OceanBase seekdb

Open source AI native search database

Customer Stories

Real-world success stories from enterprises across diverse industries.

View All
BY USE CASES

Mission-Critical Transactions

Global & Multicloud Application

Elastic Scaling for Peak Traffic

Real-time Analytics

Active Geo-redundancy

Database Consolidation

Comprehensive knowledge hub for OceanBase.

Blog

Live Demos

Training & Certification

Documentation

Official technical guides, tutorials, API references, and manuals for all OceanBase products.

View All
PRODUCTS
OceanBase CloudOceanBase Database
ToolsConnectors and Middleware
QUICK START
OceanBase CloudOceanBase Database
BEST PRACTICES

Practical guides for utilizing OceanBase more effectively and conveniently

Learn more about OceanBase – our company, partnerships, and trust and security initiatives.

About OceanBase

Partner

Trust Center

Contact Us

Start on Cloud
编组
All Products
    • Databases
    • iconOceanBase Database
    • iconOceanBase Cloud
    • iconOceanBase Tugraph
    • iconInteractive Tutorials
    • iconOceanBase Best Practices
    • Tools
    • iconOceanBase Cloud Platform
    • iconOceanBase Migration Service
    • iconOceanBase Developer Center
    • iconOceanBase Migration Assessment
    • iconOceanBase Admin Tool
    • iconOceanBase Loader and Dumper
    • iconOceanBase Deployer
    • iconKubernetes operator for OceanBase
    • iconOceanBase Diagnostic Tool
    • iconOceanBase Binlog Service
    • Connectors and Middleware
    • iconOceanBase Database Proxy
    • iconEmbedded SQL in C for OceanBase
    • iconOceanBase Call Interface
    • iconOceanBase Connector/C
    • iconOceanBase Connector/J
    • iconOceanBase Connector/ODBC
    • iconOceanBase Connector/NET
icon

OceanBase Database

SQL - V4.4.2

    Download PDF

    OceanBase logo

    The Unified Distributed Database for the AI Era.

    Follow Us
    Products
    OceanBase CloudOceanBase EnterpriseOceanBase Community EditionOceanBase seekdb
    Resources
    DocsBlogLive DemosTraining & CertificationTicket
    Company
    About OceanBaseTrust CenterLegalPartnerContact Us
    Follow Us

    © OceanBase 2026. All rights reserved

    Cloud Service AgreementPrivacy PolicySecurity
    Contact Us
    Document Feedback
    1. Documentation Center
    2. OceanBase Database
    3. SQL
    4. V4.4.2
    iconOceanBase Database
    SQL - V 4.4.2
    SQL
    KV
    • V 4.6.0
    • V 4.4.2
    • V 4.3.5
    • V 4.3.3
    • V 4.3.1
    • V 4.3.0
    • V 4.2.5
    • V 4.2.2
    • V 4.2.1
    • V 4.2.0
    • V 4.1.0
    • V 4.0.0
    • V 3.1.4 and earlier

    Automatic management of materialized view logs

    Last Updated:2026-04-02 06:23:57  Updated
    share
    What is on this page
    Limitations
    Considerations
    Related parameters
    Examples
    Example 1: Automatically create an mlog
    Example 2: Automatically update the definition of an mlog
    Example 3: Automatically prune an mlog
    References

    folded

    share

    OceanBase Database supports automatic management of materialized view logs (mlogs). This feature covers two main aspects:

    1. When you create a materialized view, OceanBase Database analyzes its dependencies on the base table and automatically creates the required mlogs.
    2. OceanBase Database periodically trims mlogs in the background. Specifically, it removes mlogs that are no longer referenced and reduces the number of columns in mlogs to lower the maintenance cost.

    Limitations

    Mlogs are automatically created or updated only when the materialized view is explicitly defined as an incremental refresh view (by specifying REFRESH FAST) or as a real-time materialized view (by specifying ENABLE ON QUERY COMPUTATION).

    Considerations

    • When you update the definition of an mlog, OceanBase Database actually creates a new mlog table and replaces the original mlog. During the replacement, the incremental data in the original mlog is refreshed to the incremental refresh materialized views associated with the original mlog. Therefore, when a base table is associated with a large number of materialized views and contains a large amount of incremental data, updating the mlog definition may be a time-consuming operation.
    • We recommend that you set the mlog_trim_interval parameter to a relatively large value. Otherwise, the mlog may be incorrectly trimmed, and you may need to recreate or update the mlog when you create a materialized view.

    Related parameters

    OceanBase Database provides two parameters to control the automatic management of mlogs:

    • enable_mlog_auto_maintenance: specifies whether to enable the automatic management of mlogs.
    • mlog_trim_interval: specifies the scheduling cycle of the background automatic trimming task of mlogs.

    Examples

    Enable the mlog auto-maintenance feature.

    Note

    In OceanBase Database V4.4.2:

    • For newly created tenants, the default value of the enable_mlog_auto_maintenance parameter is True, which means the mlog auto-maintenance feature is enabled by default.
    • For tenants upgraded from an earlier version of OceanBase Database (V4.4.2 or earlier), the default value of the enable_mlog_auto_maintenance parameter is False, which means the mlog auto-maintenance feature is disabled by default.

    obclient> ALTER SYSTEM SET enable_mlog_auto_maintenance = True;
    

    Example 1: Automatically create an mlog

    1. Create a table named test_tbl1.

      obclient> CREATE TABLE test_tbl1(col1 INT, col2 INT, col3 INT);
      
    2. Create an incremental refresh materialized view named mv_test_tbl1 on the test_tbl1 table. OceanBase Database automatically creates an mlog on the col2 column of the test_tbl1 table.

      obclient> CREATE MATERIALIZED VIEW mv_test_tbl1
          REFRESH FAST
          AS SELECT
                 col2,
                 count(*) cnt
             FROM test_tbl1
             GROUP BY col2;
      
    3. Query the information about the materialized view logs of the test_tbl1 table.

      obclient> DESC mlog$_test_tbl1;
      

      The returned result is as follows:

      +------------+-----------------+------+------+---------+-------+
      | Field      | Type            | Null | Key  | Default | Extra |
      +------------+-----------------+------+------+---------+-------+
      | col2       | int(11)         | YES  |      | NULL    |       |
      | SEQUENCE$$ | bigint(20)      | NO   | PRI  | NULL    |       |
      | DMLTYPE$$  | varchar(1)      | YES  |      | NULL    |       |
      | OLD_NEW$$  | varchar(1)      | YES  |      | NULL    |       |
      | M_ROW$$    | bigint unsigned | NO   | PRI  | NULL    |       |
      +------------+-----------------+------+------+---------+-------+
      5 rows in set
      

    Example 2: Automatically update the definition of an mlog

    1. Create a table named test_tbl2.

      obclient> CREATE TABLE test_tbl2(col1 INT, col2 INT, col3 INT);
      
    2. Create an incremental refresh materialized view named mv1_test_tbl2 on the test_tbl2 table. OceanBase Database automatically creates an mlog on the col2 column of the test_tbl2 table.

      obclient> CREATE MATERIALIZED VIEW mv1_test_tbl2
          REFRESH FAST
          AS SELECT
                 col2,
                 count(*) cnt
             FROM test_tbl2
             GROUP BY col2;
      
    3. Query the information about the materialized view logs of the test_tbl2 table.

      obclient> DESC mlog$_test_tbl2;
      

      The returned result is as follows:

      +------------+-----------------+------+------+---------+-------+
      | Field      | Type            | Null | Key  | Default | Extra |
      +------------+-----------------+------+------+---------+-------+
      | col2       | int(11)         | YES  |      | NULL    |       |
      | SEQUENCE$$ | bigint(20)      | NO   | PRI  | NULL    |       |
      | DMLTYPE$$  | varchar(1)      | YES  |      | NULL    |       |
      | OLD_NEW$$  | varchar(1)      | YES  |      | NULL    |       |
      | M_ROW$$    | bigint unsigned | NO   | PRI  | NULL    |       |
      +------------+-----------------+------+------+---------+-------+
      5 rows in set
      
    4. Create an incremental refresh materialized view named mv2_test_tbl2 on the test_tbl2 table. OceanBase Database detects that the current mlog table contains only the col2 column and modifies the existing mlog definition to add the col3 column to the mlog table.

      obclient> CREATE MATERIALIZED VIEW mv2_test_tbl2
          REFRESH FAST
          AS SELECT
                 col3,
                 count(*) cnt
             FROM test_tbl2
             GROUP BY col3;
      
    5. Query the information about the materialized view logs of the test_tbl2 table again. You can find that the mlog table definition of the test_tbl2 table contains the col2 and col3 columns.

      obclient> DESC mlog$_test_tbl2;
      

      The returned result is as follows:

      +------------+-----------------+------+------+---------+-------+
      | Field      | Type            | Null | Key  | Default | Extra |
      +------------+-----------------+------+------+---------+-------+
      | col2       | int(11)         | YES  |      | NULL    |       |
      | col3       | int(11)         | YES  |      | NULL    |       |
      | SEQUENCE$$ | bigint(20)      | NO   | PRI  | NULL    |       |
      | DMLTYPE$$  | varchar(1)      | YES  |      | NULL    |       |
      | OLD_NEW$$  | varchar(1)      | YES  |      | NULL    |       |
      | M_ROW$$    | bigint unsigned | NO   | PRI  | NULL    |       |
      +------------+-----------------+------+------+---------+-------+
      6 rows in set
      

    Example 3: Automatically prune an mlog

    1. Create a table named test_tbl3.

      obclient> CREATE TABLE test_tbl3(col1 INT, col2 INT, col3 INT);
      
    2. Create an incremental refresh materialized view named mv1_test_tbl3 on the test_tbl3 table. OceanBase Database automatically creates an mlog on the col2 column of the test_tbl3 table.

      obclient> CREATE MATERIALIZED VIEW mv1_test_tbl3
          REFRESH FAST
          AS SELECT
                 col2,
                 count(*) cnt
             FROM test_tbl3
             GROUP BY col2;
      
    3. Create an incremental refresh materialized view named mv2_test_tbl3 on the test_tbl3 table. OceanBase Database detects that the current mlog table contains only the col2 column and modifies the existing mlog definition to add the col3 column to the mlog table.

      obclient> CREATE MATERIALIZED VIEW mv2_test_tbl3
          REFRESH FAST
          AS SELECT
              col3,
              count(*) cnt
          FROM test_tbl3
          GROUP BY col3;
      
    4. Query the information about the materialized view logs of the test_tbl3 table again. You can find that the mlog table definition of the test_tbl3 table contains the col2 and col3 columns.

      obclient> DESC mlog$_test_tbl3;
      

      The returned result is as follows:

      +------------+-----------------+------+------+---------+-------+
      | Field      | Type            | Null | Key  | Default | Extra |
      +------------+-----------------+------+------+---------+-------+
      | col2       | int(11)         | YES  |      | NULL    |       |
      | col3       | int(11)         | YES  |      | NULL    |       |
      | SEQUENCE$$ | bigint(20)      | NO   | PRI  | NULL    |       |
      | DMLTYPE$$  | varchar(1)      | YES  |      | NULL    |       |
      | OLD_NEW$$  | varchar(1)      | YES  |      | NULL    |       |
      | M_ROW$$    | bigint unsigned | NO   | PRI  | NULL    |       |
      +------------+-----------------+------+------+---------+-------+
      6 rows in set
      
    5. Change the mlog pruning interval to observe the pruning result more quickly.

      obclient> ALTER SYSTEM SET mlog_trim_interval = '5s';
      
    6. Drop the mv1_test_tbl3 materialized view.

      obclient> DROP MATERIALIZED VIEW mv1_test_tbl3;
      
    7. Wait for 5 seconds and query the information about the materialized view logs of the test_tbl3 table again. You can find that the mlog table definition of the test_tbl3 table contains only the col3 column.

      obclient> DESC mlog$_test_tbl3;
      

      The returned result is as follows:

      +------------+-----------------+------+------+---------+-------+
      | Field      | Type            | Null | Key  | Default | Extra |
      +------------+-----------------+------+------+---------+-------+
      | col3       | int(11)         | YES  |      | NULL    |       |
      | SEQUENCE$$ | bigint(20)      | NO   | PRI  | NULL    |       |
      | DMLTYPE$$  | varchar(1)      | YES  |      | NULL    |       |
      | OLD_NEW$$  | varchar(1)      | YES  |      | NULL    |       |
      | M_ROW$$    | bigint unsigned | NO   | PRI  | NULL    |       |
      +------------+-----------------+------+------+---------+-------+
      5 rows in set
      
    8. Drop the mv2_test_tbl3 materialized view.

      obclient> DROP MATERIALIZED VIEW mv2_test_tbl3;
      
    9. Wait for 5 seconds and query the information about the materialized view logs of the test_tbl3 table again. You can find that the mlog table of the test_tbl3 table no longer exists.

      obclient> DESC mlog$_test_tbl3;
      

      The returned result is as follows:

      ERROR 1146 (42S02): Table 'test_db.mlog$_test_tbl3' doesn't exist
      
    10. Restore the mlog pruning interval.

      obclient> ALTER SYSTEM SET mlog_trim_interval = '1d';
      

    References

    • Overview of materialized views
    • Materialized view logs
    • Create a materialized view
    • Drop a materialized view

    Previous topic

    Materialized view logs
    Last

    Next topic

    Create a materialized view
    Next
    What is on this page
    Limitations
    Considerations
    Related parameters
    Examples
    Example 1: Automatically create an mlog
    Example 2: Automatically update the definition of an mlog
    Example 3: Automatically prune an mlog
    References