mysql吞吐量怎么调整 数据库吞吐量怎么看

mysql 参数调优(11)之innodb_buffer_pool_instances设置多个缓冲池实例MySQL 5.5引入了缓冲实例作为减小内部锁争用来提高MySQL吞吐量mysql吞吐量怎么调整的手段 。在5.5版本这个对提升吞吐量帮助很小 , 然后在MySQL 5.6版本这个提升就非常大了,所以在MySQL5.5中mysql吞吐量怎么调整你可能会保守地设置innodb_buffer_pool_instances=4,在MySQL 5.6和5.7中你可以设置为8-16个缓冲池实例 。设置后观察会觉得性能提高不大,但在大多数高负载情况下,它应该会有不错的表现 。对了,不要指望这个设置能减少你单个查询的响应时间 。这个是在高并发负载的服务器上才看得出区别 。比如多个线程同时做许多事情 。
5.7、8.0 下INNODB_BUFFER_POOL_INSTANCES默认为1,若mysql存在高并发和高负载访问 , 设置为1则会造成大量线程对BUFFER_POOL的单实例互斥锁竞争,这样会消耗一定量的性能的 。
pool_instances 可以设置为cpu核心数,它的作用是:
1)对于缓冲池在数千兆字节范围内的系统 , 通过减少争用不同线程对缓存页面进行读写的争用,将缓冲池划分为多个单独的实例可以提高并发性 。可以类比为 java中的 ThreadLocal 线程本地变量就是为每个线程维护一个buffer pool实例,这样就不用去争用同一个实例了 。相当于减少高并发下mysql对INNODB_BUFFER缓冲池的争用 。
2)使用散列函数将存储在缓冲池中或从缓冲池读取的每个页面随机分配给其中一个缓冲池实例 。每个缓冲池管理自己的空闲列表,刷新列表,LRU和连接到缓冲池的所有其他数据结构,并受其自己的缓冲池互斥量保护 。
如何设置合理的mysql的参数[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思
skip-name-resolve
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间 。但需要注意,如果开启该选项,
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking
back_log = 600
# MySQL能有的连接数量 。当主要MySQL线程在一个很短时间内得到非常多的连接请求 , 这就起作用,
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程 。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中 。
# 如果期望在一个短时间内有很多连接,你需要增加它 。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源 。
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小 。
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的 。
max_connections = 1000
#
MySQL的最大连接数 , 如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,
介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存 , 所以要适当调整该值,不能盲目提高设值 。可以过'conn%'通配符查看当前状态的连接
数量,以定夺该值的大小 。

推荐阅读