MySQL分割数据
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15是否打开查询缓存。可以设置成OFF、ON或DEMAND. DEMAND 表示只有在查询语句中明确写明SQL_ CACHE 的语句才放入查询缓存。这个变量可以是会话级别的也可以是全局级别的。
query_ cache_ size查询缓存使用的总内存空间,单位是字节。这个值必须是1024的整数倍,否则MySQL实际分配的数据会和你指定的略有不同。
query_ cache_ min_ res_ unit在查询缓存中分配内存块时的最小单位。
query_ cache_ limitMySQL能够缓存的最大查询结果。如果查询结果大于这个值,则不会被缓存。因为查询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,MySQL才知道查询结果是否超出限制。如果超出,MySQL则增加状态值Qcache_ not_ cached, 并将结果从查询缓存中删除。如果你事先知道有很多这样的情况发生,那么建议在查询语句中加入SQL_ NO_ CACHE来避免查询缓存带来的额外消耗。
query_ cache_wlock_invalidate如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果。这个参数默认是OFF,这可能在一定程序上会改变服务器的行为,因为这使得数据库可能返回其他线程锁住的数据。将参数设置成ON,则不会从缓存中读取这类数据,但是这可能会增加锁等待。对于绝大数应用来说无须注意这个细节,所以默认设置通常是没有问题的。
减少内存碎片没什么办法能够完全避免碎片,但是选择合适的query_ cache_ min_ res_ _unit 可以帮你减少由碎片导致的内存空间浪费。设置合适的值可以平衡每个数据块的大小和每次存储结果时内存块申请的次数。这个值太小,则浪费的空间更少,但是会导致更频繁的内存块申请操作;如果这个值设置得太大,那么碎片会很多。调整合适的值其实是在平衡内存浪费和CPU消耗。
这个参数的最合适的大小和应用程序的查询结果的平均大小直接相关。可以通过内存实
际消耗(query_ cache_ size Qcache_ free. .memory)除以Qcache_ queries_ in_ cache 计算单个查询的平均缓存大小。如果你的应用程序的查询结果很不均匀,有的结果很大,有的结果很小,那么碎片和反复的内存块分配可能无法避免。如果你发现缓存一个非常大的结果并没有什么意义(通常确实是这样),那么你可以通过参数query_ cache_ limit 限制可以缓存的最大查询结果,借此大大减少大的查询结果的缓存,最终减少内存碎片的发生。
点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15作者 | 李冬梅采访嘉宾 | Monty,MySQL 之父审校 | 王一鹏,刘燕InfoQ 深度专访 “MySQL 之父” — Michael “Monty” Widenius ,全文包括视频访谈实录...
2024.11.15概述本文将指导您完成在 SSMS 中成功创建链接服务器以连接到 MySQL 数据库的所有必要步骤。本文分为三个部分:为 MySQL 安装ODBC驱动程序配置 ODBC 驱动程序以连接到 MySQL 数...
2024.11.13功能简介在项目实现中总会有敏感数据需要加密存储的时候,但是使用非对称RSA加密存储了搜索就有问题。所以这里我使用mysql自带的AES进行加密、解密。在同样实现功能的同时又可以减少爬坑的时间(主要是搜...
2024.11.12redis、mysql双写缓存不一致:但是在更新缓存方面,对于更新完的数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案...
2024.11.11