内存分为:可控和不可控
一、mysql可以使用多少内存
1.物理内存限制
不能超过物理内存
2.操作系统限制
(1)进程限制
32位linux内核通常限制任意进程可以使用的内存量在2.5GB~2.7GB范围内
(2)堆栈大小
(3)glibc库支持单次分配的最大大小
二、每个连接需要的内存
保持连接只需要少量的内存--预留内存
最大允许100个连接、myisam_sort_buffer_size 256M,最差情况 25GB内存消耗--不可能存在
使用了许多大的临时表或复杂存储过程的查询,通常是导致高内存消耗最可能的原因。
top命令virt列的值反应使用内存情况
三、为操作系统预留内存--2GB或5%的较大者
四、为缓存分配内存
innodb缓冲池、innodb日志文件
五、innodb缓冲池--更需要内存
缓存索引、行数据、自适应哈希索引、插入缓冲、锁。
大缓冲池带来的挑战,预热和关闭都会花费很长时间,如果有很多脏页在缓冲池里,innodb关闭时可能会花费较长时间。
调小--innodb_max_dirty_pages_pct,等待脏页刷新后在关闭
innotop观察脏页刷新量
利用percona server的重新载入缓冲池来减少server的启动时间
六、myisam多个键缓存
key_buffer_1.key_buffer_size = 1G
key_buffer_2.key_buffer_size = 1G
用key_buffer_1来缓存t1,t2表的索引
cache index t1,t2 in key_buffer_1;
键缓存缓存索引文件,操作系统缓存缓存数据文件。
没有任何myisam表,也要将key_buffer_size设置为较小的值。
键缓存块大小太小造成写时读取的问题
线程缓存
表缓存
阅读(713) | 评论(0) | 转发(0) |