MySQL数据库服务器配置
CPU的优化
内存的优化
IO的优化
连接的优化
数据一致性的优化

1.描述back_log参数的作用?

back_log = 500 要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,
这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
不需要配置 =50 + (max_connections / 5),===50+ 3000/5=650
Default Value -1 (autosized)
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,
你需要增 加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。
你的操作系统在这个队列大小上有它自己的限制。试图设定 back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login |
NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。
作用:MySQL每处理一个连接请求的时候都会对应的创建一个新线程与之对应,那么在主线程创建新线程期间,如果前端应用有
大量的短连接请求到达数据库,MySQL 会限制此刻新的连接进入请求队列,由参数back_log控制,如果等待的连接数量超过back_log,
则将不会接受新的连接请求,所以如果需要MySQL能够处理大量的短连接,需要提高此参数的大小。 现象:如果参数过小可能会导致应用报错

2.描述thread_cache_size参数的作用?

thread_cache_size = 64  缓存可重用线程数,减小创建新线程的开销)

可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,
当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性 能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用

3.描述table_open_cache参数的作用?

show status like 'Opened_files';--当前打开表的数量
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_files | 180 |
| table_definition_cache | 1400 |
| table_open_cache | 2000 |
| table_open_cache_instances | 1
一个是打开表的缓存 ---> table_open_cache,每打开一个表,都会读入该值中,当mysql在缓存中找不到,才会读取磁盘
一个是表定义的缓存 ---> table_definition_cache

MySQL数据库服务器配置
--
mysql服务器:2*E5 2690
innodb_thread_concurrency=32
innodb内部自己控制 kernel_mutex竞争 innodb_thread_concurrency设置为cpu的核心数
#内存
query_cache_type=0
query_cache_size=0
#io
innodb_buffer_pool_size=50G
innodb_io_capacity=20000
innodb每秒后台进程处理IO操作的数据页上限,default 200
innodb_buffer_pool_size总的io处理能力上限
innodb_buffer_pool_instances分割成多个内存块时,每个内存块的IO处理能力为:innodb_io_capacity/innodb_buffer_pool_instances
对于个别5400转或7200转硬盘系统上,可能降低值的100前者默认。
innodb_log_files_in_group=4
innodb_log_file_size=1000M
innodb_flush_method=O_DIRECT
O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲(page cache),
而真正的完成也是在flush这步,日志(redo log)还是要经过OS缓冲
--innodb是怎样打开和刷新日志文件及数据文件
--参数innodb_flush_method=O_DIRECT
--fdatasync:非windows的默认值,innodb用fsync()来刷新数据和日志文件,fsync的缺点是操作系统会在自己的缓存中缓冲一些数据
--O_DIRECT,会使用fsync来刷新文件到磁盘,但是会通知操作系统不要缓存数据,也不要预读,避免双重缓冲,如果RAID卡支持预读,这个选项不会关闭raid卡的预读
--ALL_O_DIRECT 在percona server和mariadb中使用,可以用mysql的o_direct方式
--O_DSYNC没有避免双重缓冲
--async_unbuffered :Windows下的默认值,让innodb对大部分写使用没有缓冲的I/O
--unbuffered 只对Windows有效,不使用原生的异步I/O
--normal 只对window有效,让innodb不要使用原生异步I/O或者五缓冲I/O
innodb_max_dirty_pages_pct=50
default 75 InnoDB试着从缓冲池刷新数据,使脏页的百分比不超过这个值
innodb从innodb buffer中刷新脏页的比例
刷新脏页,产生checkpoint脏页刷新innodb_max_dirty_pages_pct * innodb_io_capacity
innodb_file_per_table=on
innodb_page_size=4k#ssd
innodb_flush_neighbors=0#ssd。随机访问转换成顺序访问
##show global status like 'innodb_log_waits';
##当Innodb_log_waits值较大时,说明可用log buffer不足,需等待释放次数,数量较大时需要加大innodb_log_buffer_size的值

#连接
back_log=300
max_connections=3000
max_user_connections=2800
table_open_cache=1024#打开缓存的表数
thread_cache_size=512#连接池
wait_timeout=120#服务器关闭交互式连接前等待活动的秒数
interactive_timeout=120#交互超时
#数据库一致性优化
innodb_flush_log_at_trx_commit=1,commit/write/flush/sync
sync_binlog=1
max_connections/max_user_connections
(system@127.0.0.1:3306) [(none)]> show variables like '%open%';
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| have_openssl | DISABLED |
| innodb_open_files | 60000 |
| open_files_limit | 65535 |
| table_open_cache | 2000 |
| table_open_cache_instances | 16 |
+----------------------------+----------+

----
建议调整下面几个关键参数以获得较好的性能
1、选择Percona或MariaDB版本的话,强烈建议启用thread pool特性,可使得在高并发的情况下,性能不会发生大幅下降。此外,还有extra_port功能,非常实用,
关键时刻能救命的。还有另外一个重要特色是 QUERY_RESPONSE_TIME 功能,也能使我们对整体的SQL响应时间分布有直观感受;
2、设置default-storage-engine=InnoDB,也就是默认采用InnoDB引擎,强烈建议不要再使用MyISAM引擎了,InnoDB引擎绝对可以满足99%以上的业务场景;
3、调整innodb_buffer_pool_size大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% ~ 70%左右;
4、根据实际需要设置innodb_flush_log_at_trx_commit、sync_binlog的值。如果要求数据不能丢失,那么两个都设为1。如果允许丢失一点数据,则可分别设为2和10。
而如果完全不用care数据是否丢失的话(例如在slave上,反正大不了重做一次),则可都设为0。这三种设置值导致数据库的性能受到影响程度分别是:高、中、低,也就是第一个会另数据库最慢,最后一个则相反;
5、设置innodb_file_per_table = 1,使用独立表空间,我实在是想不出来用共享表空间有什么好处了;
6、设置innodb_data_file_path = ibdata1:1G:autoextend,千万不要用默认的10M,否则在有高并发事务时,会受到不小的影响;
7、设置innodb_log_file_size=256M,设置innodb_log_files_in_group=2,基本可满足90%以上的场景;
8、设置long_query_time = 1,而在5.5版本以上,已经可以设置为小于1了,建议设置为0.05(50毫秒),记录那些执行较慢的SQL,用于后续的分析排查;
9、根据业务实际需要,适当调整max_connection(最大连接数)、max_connection_error(最大错误数,建议设置为10万以上,
而open_files_limit、innodb_open_files、table_open_cache、table_definition_cache这几个参数则可设为约10倍于max_connection的大小;
10、常见的误区是把tmp_table_size和max_heap_table_size设置的比较大,曾经见过设置为1G的,这2个选项是每个连接会话都会分配的,因此不要设置过大,
否则容易导致OOM发生;其他的一些连接会话级选项例如:sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size等,也需要注意不能设置过大;
11、由于已经建议不再使用MyISAM引擎了,因此可以把key_buffer_size设置为32M左右,并且强烈建议关闭query cache功能;
----

mysql核心参数优化的更多相关文章

  1. MySQL性能优化最佳实践 - 05 MySQL核心参数优化

    back_log参数的作用 指定MySQL可能的TCP/IP的连接数量(一个TCP/IP连接占256k),默认是50.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花 ...

  2. MySQL 配置参数优化

    MySQL 配置参数优化 1.修改back_log参数值:由默认的50修改为500 back_log=500back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中 ...

  3. MySQL缓存参数优化(转)

    MySQL 数据库性能优化之缓存参数优化 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在 ...

  4. MySQL数据库参数优化

    概述 最近在对各个系统的mysql做一些参数上的优化,也开了慢查询,准备后面针对特定sql再进一步优化.下面主要介绍一下一些优化的参数. 1.优化前mysql配置 可以看到基本上是没怎么做优化的. 2 ...

  5. MySQL Server参数优化 - innodb_file_per_table(独立表空间)

    1 简介    Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间.    共享表空间以及独立表空间都是针对数据的存储方式而言的.    ...

  6. ES,ZK,Mysql相关参数优化

    1.ES 内存调优: vi config/jvm.options -Xms16g -Xmx16g 2.Zookeeper参数配置调优 2.1\在conf目录下 vi java.env export J ...

  7. Mysql实例参数优化15个主要参数讲解(原创)

    1.innodb_buffer_pool_size 设置物理内存的60%-80%,反应IO吞吐的最大上限2.innodb_thread_concurrency 线程并发,设置为CPU核心数,如果等于0 ...

  8. Mysql性能参数优化

    1.Max_connections (1)简介 Mysql的最大连接数,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,mysql会为每个连 ...

  9. Linux中MySQL配置文件my.cnf参数优化

    MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的.MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的 ...

随机推荐

  1. 安装(解密)win10 10074 esd 更新 10162 esd

    最新ESD:http://ms-vnext.net/Win10esds/ 公开下载:http://ms-vnext.net/Win10esds/urls/ ----------------更新 --- ...

  2. 【sparkStreaming】kafka作为数据源的生产和消费

    1.建立生产者发送数据 (1)配置zookeeper属性信息props (2)通过 new KafkaProducer[KeyType,ValueType](props) 建立producer (3) ...

  3. 【51nod-1183】编辑距离

    链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 #include <bits/stdc++.h> ...

  4. 内存保护机制及绕过方法——利用未启用SafeSEH模块绕过SafeSEH

    利用加载模块之外的地址绕过safeSEH 前言:文章涉及的概念在之前的文章中都有过详细的讲解 ⑴.  原理分析: 当程序加载进内存中后,处理PE文件(exe,dll),还有一些映射文件,safeSEH ...

  5. python-数据处理的包Numpy,scipy,pandas,matplotlib

    一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ...

  6. 开发Wordpress主题时没有特色图片的功能

    在自己开发Wordpress主题的时候,发现右下方没有了之前见到的特色图片(Featured Image)功能模块 1.找到后台右上方的显示选项模块,下拉之后启用即可 2.如果以上步骤找不到该选项,那 ...

  7. CSS3实现多列纵向滚动

    效果如图: 小程序wxml: <view class='wraper'> <view class="header"> 头部 </view> &l ...

  8. [emwin]关于渐变色使用须知

    由于需要用到渐变色,且出现问题,所以对渐变色有了解. 相关函数 GUI_DrawGradientV GUI_DrawGradientH 须知: 1.渐变色在565色和888色下的显示完全不一样.在模拟 ...

  9. IOS Quartz 2D 学习(1)

    IOS提供两种创建图形的途径: 1.OpenGL. 2.Quartz.Core Animation.UIKit图形支持. UIKit的图形系统 1.视图绘画周期: DrawRect方法,在任何时候,当 ...

  10. description方法

    1.NSLog回顾 众所周知,我们可以用NSLog函数来输出字符串和一些基本数据类 1 int age = 11; 2 NSLog(@"age is %i", age); * 第2 ...