If I'm reading your post correctly, innodb_buffer_pool_size is 23G in 8 GB of RAM. Yikes. When the buffer_pool is a quarter or so full, MySQL will be swapping to disk. Terrible. Swapping
must be avoided. With 8GB RAM and no other software running, innonb_buffer_pool_size should be no more than 6GB.
There's probably a serious reason for that 23GB setting. Let's see the result of ...
select
concat(round(sum(table_rows)/1000000,2),'m') rows,
concat(round(sum(data_length)/(1024*1024*1024),2),'g') data,
concat(round(sum(index_length)/(1024*1024*1024),2),'g') idx,
concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'g') total_size,
round(sum(index_length)/sum(data_length),2) idxfrac
from information_schema.tables ;
show variables;
show global status;
The deletion cmd you posted would delete all rows. Much faster to truncate the table. Assuming the real query has a condition, best approach usually is to delete in chunks, see
http://mysql.rjweb.org/doc.php/deletebig .