[MDEV-10453] Allow ONLINE or ALGORITHM=INPLACE with OPTIMIZE TABLE Created: 2016-07-27  Updated: 2020-02-20

Status: Open
Project: MariaDB Server
Component/s: None
Fix Version/s: None

Type: Task Priority: Major
Reporter: Chris Calender (Inactive) Assignee: Unassigned
Resolution: Unresolved Votes: 2
Labels: None

Issue Links:
Relates
relates to MDEV-16329 Engine-independent online ALTER TABLE Closed
relates to MDEV-12955 Use InnoDB's fast index creation to r... Open

 Description   

We should allow ONLINE or ALGORITHM=INPLACE to be used with OPTIMIZE TABLE.

MySQL Supports this in 5.7:
"As of 5.7.4, OPTIMIZE TABLE uses online DDL (ALGORITHM=INPLACE) for both regular and partitioned InnoDB tables. The table rebuild, triggered by OPTIMIZE TABLE and performed under the cover by ALTER TABLE ... FORCE, is now performed using online DDL (ALGORITHM=INPLACE) and only locks the table for a brief interval, which reduces downtime for concurrent DML operations."
http://dev.mysql.com/doc/refman/5.7/en/optimize-table.html

We may support it, but it is not mentioned in the Docs as far as I can tell.

However, we do "allow" an online optimize, per any of the following commands:

ALTER TABLE t ENGINE=InnoDB, ALGORITHM=INPLACE;
ALTER ONLINE TABLE t ENGINE=InnoDB;
ALTER ONLINE TABLE t FORCE;

So I think it would be fairly straight-forward to add an ONLINE keyword to be used with OPTIMZE.

Or if it is performed automatically (which I now suspect), then perhapos we just need to mention this in our manual.

Thank you for your consideration.



 Comments   
Comment by Marko Mäkelä [ 2019-03-22 ]

MDEV-16329 could make this unnecessary.

Comment by Chris Calender (Inactive) [ 2019-05-21 ]

If that is the case, then that sounds great to me.

Comment by Geoff Montee (Inactive) [ 2019-05-22 ]

Isn't this already supported if OPTIMIZE TABLE is equivalent to ALTER TABLE ... FORCE if the innodb_defragment system variable and the innodb_optimize_fulltext_only system variable are both set to OFF?

https://mariadb.com/kb/en/library/innodb-online-ddl-operations-with-algorithminplace/#optimize-table

https://mariadb.com/kb/en/library/innodb-online-ddl-operations-with-algorithminplace/#alter-table-force

i.e. this works just fine:

MariaDB [db1]> CREATE OR REPLACE TABLE tab (
    ->    a int PRIMARY KEY,
    ->    b varchar(50),
    ->    c varchar(50)
    -> );
Query OK, 0 rows affected (0.030 sec)
 
MariaDB [db1]> SET SESSION alter_algorithm='INPLACE';
Query OK, 0 rows affected (0.000 sec)
 
MariaDB [db1]> ALTER TABLE tab FORCE, LOCK=NONE;
Query OK, 0 rows affected (0.023 sec)
Records: 0  Duplicates: 0  Warnings: 0

Generated at Thu Feb 08 07:42:20 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.