MySQL tuning query - 5.6
swappiness:


= 0 --> crash if you run out of memory -- not nice
small --> best
large --> might swap mysql preemptively, leading to poor performance

pool_instances -- should not be more than pool_size/1G; the specific value makes only a small difference in performance.  (Don't worry about it.)  Some say 16 should be the max number of instances, but I have not heard 'why'.
CPU spikes -- Usually a missing index or a poorly phrased query.  Find it and fix it.  (And/or ask for advice)
The buffer_pool(s) cache data and indexes.  It is (roughly) a least-recently-used cache.  It is also used for delaying index updates due to writes.
52G/64G -- reasonable.  It obviously can't hold the entire 300GB, but that may not be an issue -- especially if most of the action is in isolated portions.  Example:  Only "recent" data is actively accessed.  Counter example:  UUIDs have terrible performance when the data is bigger than the buffer_pool.


For further analysis of settings, post SHOW VARIABLES; and SHOW GLOBAL STATUS;.  (Not here; there is a size limitation.)