
table cache 的作用,就是节约读取表结构文件的开销。对于table cache 是否命中,其实table cache 是针对于线程的,每个线程有自己的缓存,只缓存本线程的表结构定义。不过我们发现,strace 中没有关于表结构文件的 open *** 作(只有 stat *** 作,定位表结构文件是否存在),也就是说 table cache 不命中,不一定需要读取表结构文件。这种感觉好像是:在不命中 table cache 时,命中了另外一个表结构缓存。
运维建议:
我们读一下 MySQL 的文档,关于 table_open_cache 的建议值公式:建议值 = 最大并发数 * join 语句涉及的表的最大个数。
通过实验我们容易理解:table_cache 是针对于线程的,所以需要最大并发数个缓存。另外,一个语句 join 涉及的表,需要同时在缓存中存在。所以最小的缓存大小,等于语句 join 涉及的表的最大个数。将这两个数相乘,就得到了 MySQL 的建议值公式。
1、简单的话弄过结构体数组,里面有50个结构体元素,每个结构体包含数据库表中的记录,就是缓存了2、根据题目所说“内存保存最常用的50条数据”,则需要在结构体中增加一项最近访问时间,用于替换算法3、查询时调用自己写的接口,然后根据需要在缓存的结构体数组里查询,查不到就用mysql的接口函数到数据库里面差,修改就是同时修改缓存和数据库,懂查询那个怎么做修改这个也就会了;替换算法可以用LRU;接口函数的定义需要看具体需求,这个没法说4、进行修改 *** 作和多线程进行同步 *** 作时注意必须对缓存加锁,至少要加个写锁5、一般来说,考虑到应用存在多进程 *** 作,可以开个共享内存,缓存放在共享内存中,这个不是题目必须6、关于对缓存的查询,由于只有50条,数量不大,可以直接使用顺序查询7、想到再补充……欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)