如果不配的后果:
默认的为256k配置实例:
join_buffer_size = 16M13)tmp_table_size
推荐设置:
67108864作用:
- 如果是128gb内存的服务器,我建议是在my.cnf中设成64M
- 通过设置tmp_table_size选项来增加一张临时表的大小,例如做高级GROUP BY操作生成的临时表 。默认系统为32M,如果当你的临时表越来越多加在一起超过了这个值,那么mysql会在系统磁盘上创建,这个值不是越多越好,也没有一个合适的值 。一开始的建议为>64M,然后在运行时我们通过以下公式来做临时调优,
- show global status like 'created_tmp%';
- 把得到的结果中的:(Created_tmp_disk_tables / Created_tmp_tables) * 100% 如果<=25%为最佳值 。注意了,在生产时热设定时一定要用类似以下算法:
- set global tmp_table_size=64*1024*1024而不是set global tmp_table_size=64M 。
默认为32M配置实例:
tmp_table_size = 6710886414)tmpdir
这块参数可以让运维给到,放到大空间里就行了,没什么太敏感的 。
15)max_allowed_packet
推荐设置:
134217728作用:
- 如果你经常在应用层碰到了:Got a packet bigger than'max_allowed_packet' bytes,这时你可以使用
- show variables like '%max_allowed_packet%';来查看这个值,这个值没有合适,一般如:用客户端导入数据的时候,遇到 错误代码: 1153 - Got a packet bigger than 'max_allowed_packet' bytes 终止了数据导入 。这样的场景下,当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接 。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误 。
- 客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量 。一般情况下,服务器默认max-allowed-packet为1MB,可以通过在交换机上抓包或者是图形化分析来抓返回结果判断 。一般推荐在128gb内存下设置的置为128M.也可以在运行时动态调整:set global max_allowed_packet = 128*1024*1024
1M配置实例:
max_allowed_packet = 13421772816)sql_mode
不需要去设置,使用默认的,这块和性能无关 。我们的中台中的sql如果碰到有sql报错,因该是在测试环境上就已经报了,它的作用是用来约束你sql的写法的,如果是一个从头开始开发的应用,我们比如说约束好都是ansi sql写法,对于一个产品,不要去做这种画蛇添足的做法 。
17)interactive_timeout
推荐设置:
600作用:
- 单位为s,系统默认为:28800s即8小时 。如果这2个值太大,你会发觉在mysql中有大量sleep的连接,这些连接又被称为:僵尸连接,僵尸连接一多你真正要用的时候就会抛:too many connection这样的错,因此对于长久不用的连接,我们一般要使用“踢出机制”,多久对于一个活动累的sql进行踢呢?我们说如果有一个长事务,它要执行1小时,我不知道这是不是属于正常?当然如果你设了太短,说1分钟就把它踢了,还真不一定踢的对,按照我们在oracle中设置的best practice我们都会把它放到10分钟 。你有一条sql连着,10分钟不用,我就把它踢了,这也算正常 。但是在高并发的场景下这个timeout会缩短至3-5分钟,这就是为什么我提倡我们的非报表即时类查询需要优化到sql的运行时间不超过300ms的原因,因为在高并发场景下,超过500ms的sql都已经很夸张了 。保守点我觉得可以设成10分钏,在应用端由其通过jdbc连接数据库的,做的好的应用都会在jdbc里有一个autoconnect参数,这个autoconnect参数就要和mysql中的wait_timeout来做匹配了 。同时在应用端要有相应的validate sql一类的操作来keep alived 。不过我更推荐使用”连接池内连接的生存周期(idleConnectionTestPeriod)”来做设置,把这个置设成<mysql内的这两个值将会是最好,同时,idleConnectionTestPeriod会使用到异步的方式去做超时check 。如c3p0中的:idleConnectionTestPeriod和testConnectionOnCheckin相当可靠
- interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)
- wait_timeout:非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等
推荐阅读
- 淘宝店铺好评率如何快速提升 淘宝好评率低于多少有影响
- 高性能网络通信框架 HP-Socket v5.7.2
- 多云架构的3个常见性能挑战和解决方案
- 2分钟学会,提升你气质的20个小习惯
- 淘宝店的物流服务怎么提升 如何提高物流时效
- 淘宝新店铺怎么刷销量 淘宝店铺怎么提升流量和销量
- 在桌面上创建一个关机快捷方式,只需一条命令,关机速度大幅提升
- 月经期间女性能做瑜伽吗?
- 淘宝每天转化率百分之多少最好 淘宝怎么提升转化率
- 淘宝客单价高的产品怎么刷 淘宝货单价怎么提升
