Such a common question, that I wrote a common answer:
http://mysql.rjweb.org/doc.php/memory
> 500GB of RAM
Wow! Are you broke? Consider Un*x for getting more out of a server.
> query_cache_type=1
> query_cache_size=4096M
This may be hurting more than helping (see the link).
> innodb_buffer_pool_size=16384M
That explains the "18GB". How big are your tables? (Sum up Data_length and Index_length from SHOW TABLE STATUS.) Are you using InnoDB (I recommend) or MyISAM? Sounds like InnoDB:
> default-table-type=InnoDB
And it sounds like your entire dataset is less than 16384M, hence the extra RAM is not providing any benefit to MySQL.
> table_open_cache=15000
excessive.
> innodb_file_per_table
good
Based on this:
> seeing almost no disk I/O
I suspect that no _tuning_ will help.
Set
long_query_time = 2
and watch the slowlog. Speeding up naughty queries may be the best boost.