Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-36411

BatchUpdateExceptions while inserting into a partioned table during partition create

Details

    Description

      Since mariadb 10.11.10, we are seeing occasional exceptions in our java clients when they insert to a table at the same time a partition is reorganized into a new day-partition and 'future' partition. Mariadb java client simply returns an error code of 0, the database has no relevant logs that I can see.

      Sequence:

      • java client does an INSERT or REPLACE on a table, not with data that spans multiple partitions.
      • simultaneously, another program responsible for creating partitions runs an alter table command reorganizing the same table into a new partition and a 'future' partition. The future partition and the new partition are both empty at this time
      • the java client insert fails sometimes with the following message

      java.sql.BatchUpdateException: (conn=59560) 
      	at org.mariadb.jdbc.export.ExceptionFactory.createBatchUpdate(ExceptionFactory.java:181)
      	at org.mariadb.jdbc.ClientPreparedStatement.executeBatchBulk(ClientPreparedStatement.java:187)
      	at org.mariadb.jdbc.ClientPreparedStatement.executeInternalPreparedBatch(ClientPreparedStatement.java:121)
      	at org.mariadb.jdbc.ClientPreparedStatement.executeBatch(ClientPreparedStatement.java:474)
      	at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:128)
      	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java)
      	at com.example.Writer.run(Writer.java:128)
      	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
      	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
      	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
      	at java.base/java.lang.Thread.run(Thread.java:1583)
      Caused by: java.sql.BatchUpdateException: (conn=59560) 
      	at org.mariadb.jdbc.export.ExceptionFactory.createBatchUpdate(ExceptionFactory.java:221)
      	at org.mariadb.jdbc.client.impl.StandardClient.executePipeline(StandardClient.java:680)
      	at org.mariadb.jdbc.ClientPreparedStatement.executeBatchBulk(ClientPreparedStatement.java:156)
      	... 12 more
      Caused by: java.sql.SQLException: (conn=59560) 
      	at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:306)
      	at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:378)
      	at org.mariadb.jdbc.message.ClientMessage.readPacket(ClientMessage.java:172)
      	at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:915)
      	at org.mariadb.jdbc.client.impl.StandardClient.readResults(StandardClient.java:854)
      	at org.mariadb.jdbc.client.impl.StandardClient.readResponse(StandardClient.java:773)
      	at org.mariadb.jdbc.client.impl.StandardClient.executePipeline(StandardClient.java:613)
      

      Some additional info about the query itself:

      INSERT INTO sometable (partition_id, key, time, value)
      VALUES
      (?, ?, ?, ?)ON DUPLICATE KEY UPDATE value = VALUES(value)', 
       
      parameters:[2025032603,324234,'2025-03-26 23:29:10.476607',455.2]}
      

      Using mariadb-java-client 3.3.3.

      I'm putting this under mariadb-server, since the same version of the client started throwing these errors after the upgrade of the server.

      Attachments

        Activity

          upgrade from what version to 10.11.10 ?

          serg Sergei Golubchik added a comment - upgrade from what version to 10.11.10 ?
          bh-tt123 Bert added a comment -

          We upgraded from 10.11.9

          bh-tt123 Bert added a comment - We upgraded from 10.11.9

          Nothing looks particularly suspicious in the 10.11.9..10.11.10 difference.
          "Partitioning" was an important hint, but it's not enough.

          Do you use virtual columns? Galera? Replication? Triggers?

          serg Sergei Golubchik added a comment - Nothing looks particularly suspicious in the 10.11.9..10.11.10 difference. "Partitioning" was an important hint, but it's not enough. Do you use virtual columns? Galera? Replication? Triggers?
          bh-tt123 Bert added a comment - - edited

          Lets see:

          • we run a single master, with a slave on a separate machine. There is no Galera or triggers involved.
          • no virtual columns

          Example of a table we see the issue on (I've redacted a few names, otherwise no changes):

          CREATE TABLE `example_table` (
            `logfile` varchar(50) NOT NULL,
            `obsnr` int(11) NOT NULL,
            `linenr` int(11) NOT NULL,
            `obstime` datetime(6) NOT NULL,
            `debug` tinyint(4) NOT NULL,
            `examplecolumn` tinyint(4) NOT NULL,
            `loglevel` varchar(10) NOT NULL,
            `classname` varchar(250) NOT NULL,
            `threadname` varchar(250) NOT NULL,
            `message` varchar(20000) DEFAULT NULL,
            PRIMARY KEY (`logfile`,`obsnr`,`obstime`),
            KEY `obstimeindex` (`obstime`),
            KEY `levelkey` (`loglevel`),
            KEY `debugkey` (`debug`),
            KEY `examplekey` (`examplecolumn`)
          ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPRESSED
              PARTITION BY RANGE (to_days(`obstime`))
                  (PARTITION `verleden` VALUES LESS THAN (0) ENGINE = InnoDB,
                  PARTITION `van20250226` VALUES LESS THAN (739674) ENGINE = InnoDB,
                  PARTITION `van20250227` VALUES LESS THAN (739675) ENGINE = InnoDB,
                  PARTITION `van20250228` VALUES LESS THAN (739676) ENGINE = InnoDB,
                  PARTITION `van20250301` VALUES LESS THAN (739677) ENGINE = InnoDB,
                  PARTITION `van20250302` VALUES LESS THAN (739678) ENGINE = InnoDB,
                  PARTITION `van20250303` VALUES LESS THAN (739679) ENGINE = InnoDB,
                  PARTITION `van20250304` VALUES LESS THAN (739680) ENGINE = InnoDB,
                  PARTITION `van20250305` VALUES LESS THAN (739681) ENGINE = InnoDB,
                  PARTITION `van20250306` VALUES LESS THAN (739682) ENGINE = InnoDB,
                  PARTITION `van20250307` VALUES LESS THAN (739683) ENGINE = InnoDB,
                  PARTITION `van20250308` VALUES LESS THAN (739684) ENGINE = InnoDB,
                  PARTITION `van20250309` VALUES LESS THAN (739685) ENGINE = InnoDB,
                  PARTITION `van20250310` VALUES LESS THAN (739686) ENGINE = InnoDB,
                  PARTITION `van20250311` VALUES LESS THAN (739687) ENGINE = InnoDB,
                  PARTITION `van20250312` VALUES LESS THAN (739688) ENGINE = InnoDB,
                  PARTITION `van20250313` VALUES LESS THAN (739689) ENGINE = InnoDB,
                  PARTITION `van20250314` VALUES LESS THAN (739690) ENGINE = InnoDB,
                  PARTITION `van20250315` VALUES LESS THAN (739691) ENGINE = InnoDB,
                  PARTITION `van20250316` VALUES LESS THAN (739692) ENGINE = InnoDB,
                  PARTITION `van20250317` VALUES LESS THAN (739693) ENGINE = InnoDB,
                  PARTITION `van20250318` VALUES LESS THAN (739694) ENGINE = InnoDB,
                  PARTITION `van20250319` VALUES LESS THAN (739695) ENGINE = InnoDB,
                  PARTITION `van20250320` VALUES LESS THAN (739696) ENGINE = InnoDB,
                  PARTITION `van20250321` VALUES LESS THAN (739697) ENGINE = InnoDB,
                  PARTITION `van20250322` VALUES LESS THAN (739698) ENGINE = InnoDB,
                  PARTITION `van20250323` VALUES LESS THAN (739699) ENGINE = InnoDB,
                  PARTITION `van20250324` VALUES LESS THAN (739700) ENGINE = InnoDB,
                  PARTITION `van20250325` VALUES LESS THAN (739701) ENGINE = InnoDB,
                  PARTITION `van20250326` VALUES LESS THAN (739702) ENGINE = InnoDB,
                  PARTITION `van20250327` VALUES LESS THAN (739703) ENGINE = InnoDB,
                  PARTITION `van20250328` VALUES LESS THAN (739704) ENGINE = InnoDB,
                  PARTITION `van20250329` VALUES LESS THAN (739705) ENGINE = InnoDB,
                  PARTITION `van20250330` VALUES LESS THAN (739706) ENGINE = InnoDB,
                  PARTITION `van20250331` VALUES LESS THAN (739707) ENGINE = InnoDB,
                  PARTITION `van20250401` VALUES LESS THAN (739708) ENGINE = InnoDB,
                  PARTITION `van20250402` VALUES LESS THAN (739709) ENGINE = InnoDB,
                  PARTITION `van20250403` VALUES LESS THAN (739710) ENGINE = InnoDB,
                  PARTITION `van20250404` VALUES LESS THAN (739711) ENGINE = InnoDB,
                  PARTITION `van20250405` VALUES LESS THAN (739712) ENGINE = InnoDB,
                  PARTITION `van20250406` VALUES LESS THAN (739713) ENGINE = InnoDB,
                  PARTITION `van20250407` VALUES LESS THAN (739714) ENGINE = InnoDB,
                  PARTITION `toekomst` VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
          

          bh-tt123 Bert added a comment - - edited Lets see: we run a single master, with a slave on a separate machine. There is no Galera or triggers involved. no virtual columns Example of a table we see the issue on (I've redacted a few names, otherwise no changes): CREATE TABLE `example_table` ( `logfile` varchar (50) NOT NULL , `obsnr` int (11) NOT NULL , `linenr` int (11) NOT NULL , `obstime` datetime(6) NOT NULL , `debug` tinyint(4) NOT NULL , `examplecolumn` tinyint(4) NOT NULL , `loglevel` varchar (10) NOT NULL , `classname` varchar (250) NOT NULL , `threadname` varchar (250) NOT NULL , `message` varchar (20000) DEFAULT NULL , PRIMARY KEY (`logfile`,`obsnr`,`obstime`), KEY `obstimeindex` (`obstime`), KEY `levelkey` (`loglevel`), KEY `debugkey` (`debug`), KEY `examplekey` (`examplecolumn`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE =latin1_swedish_ci ROW_FORMAT=COMPRESSED PARTITION BY RANGE (to_days(`obstime`)) (PARTITION `verleden` VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION `van20250226` VALUES LESS THAN (739674) ENGINE = InnoDB, PARTITION `van20250227` VALUES LESS THAN (739675) ENGINE = InnoDB, PARTITION `van20250228` VALUES LESS THAN (739676) ENGINE = InnoDB, PARTITION `van20250301` VALUES LESS THAN (739677) ENGINE = InnoDB, PARTITION `van20250302` VALUES LESS THAN (739678) ENGINE = InnoDB, PARTITION `van20250303` VALUES LESS THAN (739679) ENGINE = InnoDB, PARTITION `van20250304` VALUES LESS THAN (739680) ENGINE = InnoDB, PARTITION `van20250305` VALUES LESS THAN (739681) ENGINE = InnoDB, PARTITION `van20250306` VALUES LESS THAN (739682) ENGINE = InnoDB, PARTITION `van20250307` VALUES LESS THAN (739683) ENGINE = InnoDB, PARTITION `van20250308` VALUES LESS THAN (739684) ENGINE = InnoDB, PARTITION `van20250309` VALUES LESS THAN (739685) ENGINE = InnoDB, PARTITION `van20250310` VALUES LESS THAN (739686) ENGINE = InnoDB, PARTITION `van20250311` VALUES LESS THAN (739687) ENGINE = InnoDB, PARTITION `van20250312` VALUES LESS THAN (739688) ENGINE = InnoDB, PARTITION `van20250313` VALUES LESS THAN (739689) ENGINE = InnoDB, PARTITION `van20250314` VALUES LESS THAN (739690) ENGINE = InnoDB, PARTITION `van20250315` VALUES LESS THAN (739691) ENGINE = InnoDB, PARTITION `van20250316` VALUES LESS THAN (739692) ENGINE = InnoDB, PARTITION `van20250317` VALUES LESS THAN (739693) ENGINE = InnoDB, PARTITION `van20250318` VALUES LESS THAN (739694) ENGINE = InnoDB, PARTITION `van20250319` VALUES LESS THAN (739695) ENGINE = InnoDB, PARTITION `van20250320` VALUES LESS THAN (739696) ENGINE = InnoDB, PARTITION `van20250321` VALUES LESS THAN (739697) ENGINE = InnoDB, PARTITION `van20250322` VALUES LESS THAN (739698) ENGINE = InnoDB, PARTITION `van20250323` VALUES LESS THAN (739699) ENGINE = InnoDB, PARTITION `van20250324` VALUES LESS THAN (739700) ENGINE = InnoDB, PARTITION `van20250325` VALUES LESS THAN (739701) ENGINE = InnoDB, PARTITION `van20250326` VALUES LESS THAN (739702) ENGINE = InnoDB, PARTITION `van20250327` VALUES LESS THAN (739703) ENGINE = InnoDB, PARTITION `van20250328` VALUES LESS THAN (739704) ENGINE = InnoDB, PARTITION `van20250329` VALUES LESS THAN (739705) ENGINE = InnoDB, PARTITION `van20250330` VALUES LESS THAN (739706) ENGINE = InnoDB, PARTITION `van20250331` VALUES LESS THAN (739707) ENGINE = InnoDB, PARTITION `van20250401` VALUES LESS THAN (739708) ENGINE = InnoDB, PARTITION `van20250402` VALUES LESS THAN (739709) ENGINE = InnoDB, PARTITION `van20250403` VALUES LESS THAN (739710) ENGINE = InnoDB, PARTITION `van20250404` VALUES LESS THAN (739711) ENGINE = InnoDB, PARTITION `van20250405` VALUES LESS THAN (739712) ENGINE = InnoDB, PARTITION `van20250406` VALUES LESS THAN (739713) ENGINE = InnoDB, PARTITION `van20250407` VALUES LESS THAN (739714) ENGINE = InnoDB, PARTITION `toekomst` VALUES LESS THAN MAXVALUE ENGINE = InnoDB)

          People

            Unassigned Unassigned
            bh-tt123 Bert
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.