MySQL 8.0是目前市場(chǎng)上使用最廣泛的數(shù)據(jù)庫(kù)之一,對(duì)于其性能的提升一直是大家比較關(guān)注的話題之一。其中,數(shù)據(jù)表緩存也是我們需要重點(diǎn)關(guān)注的一個(gè)方面。
MySQL 8.0之前的版本中,數(shù)據(jù)表緩存默認(rèn)情況下是開(kāi)啟的,而且這個(gè)緩存是基于LRU算法的。這個(gè)算法實(shí)現(xiàn)的功能是,當(dāng)緩存中的數(shù)據(jù)達(dá)到規(guī)定的大小,就會(huì)按照最近最少使用的原則,淘汰最早使用的數(shù)據(jù),以保證數(shù)據(jù)的更新。
1. SHOW VARIABLES LIKE 'table_open_cache'; 2. SET GLOBAL table_open_cache = 2000; 3. FLUSH TABLES;
以上是增加數(shù)據(jù)表緩存的方法,在MySQL 8.0中,可以通過(guò)程序設(shè)置table_open_cache變量的值來(lái)增大數(shù)據(jù)表緩存。當(dāng)然,要想實(shí)現(xiàn)這個(gè)功能需要在MySQL的初始化文件中加入如下內(nèi)容:
table_open_cache = 2000 table_open_cache_instances = 16
在MySQL 8.0中,我們可以看到數(shù)據(jù)表緩存的變化,它不再基于LRU算法,而是使用了一種全新的并發(fā)哈希表(concurrent hash table)來(lái)實(shí)現(xiàn)。這個(gè)哈希表不僅能夠?qū)⒆x寫數(shù)據(jù)的操作進(jìn)行并發(fā),也能夠?qū)彺嬷械脑剡M(jìn)行散列處理。這樣就可以使得數(shù)據(jù)在緩存中的查找速度大大提高,并且緩存的并發(fā)性能也有了很大的提升。
綜上所述,MySQL 8.0的數(shù)據(jù)表緩存相比之前的版本有了很大的提升,不僅支持更高的并發(fā)性能,也能夠減少緩存淘汰操作的出現(xiàn),增加了數(shù)據(jù)緩存的效率。