加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

高性能的MySQL(8)优化服务器配置:内存

发布时间:2016-10-01 04:24:19 所属栏目:MySql教程 来源:站长网
导读:配置MySQL服务器离不开配置文件,接下来就开始这一部分的内容。 首先一定要清楚配置文件的位置,如果不知道可以尝试下面的操作: /usr/local/mysql/bin/mysqld --verbose --help | grep -A 1 'Default options' #结果如下 Default options are read from t

配置MySQL服务器离不开配置文件,接下来就开始这一部分的内容。

首先一定要清楚配置文件的位置,如果不知道可以尝试下面的操作:

/usr/local/mysql/bin/mysqld  --verbose --help | grep -A 1 'Default options'
#结果如下
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

有时候可以使用show global status 的输出来看状态,有的时候也需要看随着时间的变化而变化的状态值,可以使用命令:

/usr/local/mysql/bin/mysqladmin extended-status -ri60 -uroot -p123456

接下来看看内存的配置使用了。

MySQL可以使用的内存会受到操作系统位数的限制,MySQL保持一个连接(线程)只需要少量的内存,同时也需要为高峰时期执行大量查询预留好足够的内存。
下面是我们认为比较重要的缓存:

a、InnoDB缓冲池

b、InnoDB日志文件和MyISAM数据的操作系统缓存

c、MyISAM键缓存

d、查询缓存

InnoDB缓冲池并不仅仅缓存索引,还会缓存行的数据,自适应哈希索引,插入缓冲,锁,以及其他内部数据结构。很大的缓冲池,预热和关闭都很话费很长时间,重启服务器也会话费很长的时间,尤其是磁盘很慢的时候,可以使用Percona Server的快速预热功能,如果不能使用可以在重启时立刻进行全表扫描或者索引扫描,把索引载入缓冲池。可以通过使用init_file设置来实现这个功能。

URL:http://www.bianceng.cn/database/MySQL/201410/46080.htm

如果大部分表都是MySIAM表,就应该为键缓存分配比较多的内存。最重要的配置是key_buffer_size,在决定键缓存需要分配多少内存之前,需要先了解MySIAM索引实际占用多少空间。查询INFORMATION_SCHEM表的INDEX_LENGTH字段,把他们的值相加就可以得到索引占用空间。如下:

高性能的MySQL(8)优化服务器配置:内存

linux下也可以使用如下命令:

du -sch `find /path/to/mysql/data/directory/ -name "*.MYI"`

默认情况下,MySIAM将所有索引都缓存在默认的键缓存中,但也可以创建多个命名的键,可以在配置文件中添加如下

key_buffer_1.key_buffer_size=1G

key_buffer_2.key_buffer_size=1G

可以使用cache index 命令来将表映射到对应的缓冲区,比如下面的语句,使用key_buffer_1来缓存t1和t2表的索引

cache index t1,t2 in key_buffer_1;

也可以把表的索引预载入缓存中,如下命令:

load index into cache t1,t2;

即使全部是InnoDB表,没有MySIAM表,依然需要将key_buffer_size设置为一个较小的值,因为服务器有时会在内部使用MySIAM,例如GROUP BY语句可能会使用MySIAM作为临时表。

线程缓存保存那些当前没有连接但是准备为后面的连接服务的线程,thread_cache_size变量指定了MySQL可以保持在缓存中的线程数。

一个好的办法是观察Threads_connected变量并且尝试thread_cache_size,没有必要设置的非常大。

InnoDB有自己的表缓存,可以称为数据字典,当InnoDB打开一个表就增加了一个对应的对象到数据字典,当表关闭的时候也不会从数据字典移除。

另一个性能问题是第一次打开表会计算统计信息,这需要很多的I/O操作,相比MySIAM,InnoDB没有将统计信息持久化,而是在每次打开时重新计算,包括改变表的内容或者查询INFORMATION_SCHEMA表也会重新计算统计信息,如果有很多表,服务器可能会花费数个小时来启动并完成预热。MySQL5.6以后,可以通过innodb_analyze_is_persistent选项来持久化存储统计信息到磁盘上。

可以关闭innodb_stats_on_metadata选项来避免耗时的表统计信息的刷新。

本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1320197

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读