Reclaiming mysql empty space... nothing works I've deleted tons of records from my database but I can't reclaim the space....
Use % is at 96%
Your MariaDB connection id is 242212
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

I have innodb_file_per_table -
MariaDB [(none)]&gt;  show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.16 sec)

I have the table with the space I need to reclaim
MariaDB [(none)]&gt; SELECT TABLE_NAME,
    -&gt; ROUND(DATA_LENGTH/1024/1024) AS USED_SPACE_MB,
    -&gt; ROUND(DATA_FREE/1024/1024) AS UNUSED_SPACE_MB
    -&gt; FROM INFORMATION_SCHEMA.TABLES
    -&gt; WHERE ROUND(DATA_FREE/1024/1024) &gt; 1000
    -&gt; ORDER BY UNUSED_SPACE_MB;
+--------------+---------------+-----------------+
| TABLE_NAME   | USED_SPACE_MB | UNUSED_SPACE_MB |
+--------------+---------------+-----------------+
| correlations |         65720 |           54103 |
+--------------+---------------+-----------------+
1 row in set (0.01 sec)

But when I run
'optimize table correlations'
.... it does nothing.
I even ran mysqlcheck -o 
....it does nothing.
Use % stays at 96%.
Is there something I'm missing?   I'd appreciate any suggestions.  Thanks!
Adding config info...
[mysqld]
innodb-defragment=1
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
innodb_buffer_pool_size = 4G
skip-name-resolve
max_heap_table_size= 128M
tmp_table_size= 128M

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

#
# * Fine Tuning
#
key_buffer_size         = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam_recover_options  = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M
Down to 4% disk space?  This will be tricky.
Find the largest files on the system; sort by size; see if any other files (logs, other apps, etc) can be freed up.

Find out how big ibdata1 is.
Run SHOW TABLE STATUS.  (Show me this, so I can explain what the rest of the steps mean.)
Figure out whether some tables are &quot;file-per-table&quot; and some are in ibdata1.
Figure out how much free space is in ibdata1.  Let'c call this x.
For each table that is not in ibdata1, but is small enough (data_free+index_free) to fit into x, move it into ibdata1 -- but start with the one with the largest Data_free.  Do not bother will tables with free space below 8MB.  (This involves a SET and an ALTER.)
For each of the rest of the tables with more than 8MB free and not currently in ibdata1, rebuild (ALTER).  Start with the smallest and work your way up, until their is not enough free disk to do the next table.

If that won't suffice then:  Get a bigger machine, dump and reload.
For the future:  You should worry about disk space when 50% full (not 96%).