mysql 参数优化(二)

7  innodb_file_per_table

innodb 把数据保存在表空间内,本质上一个由一个或者多个磁盘文件组成的虚拟文件系统。

  innodb_file_per_table 选项让InnoDb为每张表使用一个文件,他在数据字典存储为表名.ibd的数据,这是得删除一张表时回收空间巨大的多了,并且可以冗余的分散表到不同的磁盘上,然而把数据放到多个文件,总体来说可能导致跟多的空间浪费,因为把单个Innodb表空间的内部碎片浪费分布到了多个ibd文件。对于非常小的表,这个问题更大,因为innodb的页大小是16KB,即使表只有1KB的数据,仍然需要至少16KB的磁盘空间。

innodb_file_per_table=1;

8  sync_binlog

sync_binlog 选项控制mysql怎么刷新二进制日志(binlog)到磁盘。默认值0,意味着mysql不刷新,由操作系统决定什么时候刷新缓存到持久化设备。

如果这个值比0大,它指定了两次刷新到磁盘的动作之间间隔多少次二进制日志写操作。一般设置为0或1.

如果设置为0 那么崩溃以后可能导致二进制日志没有同步事务数据。这可以轻易的导致复制中断你,并且使得及时回复变得不可能。无论如何,可以把这个值设置为1来获取安全的保障。这样就会要求mysql 同步把二进制日志和事务日志这两个文件刷新到两个不同的位置,这可能需要磁盘寻道,相对来说说个很慢的操作。

9 innodb_open_files

指定mysql可同时打开.ibd 文件的最大个数.16384 是个不错的选择

此变量仅在使用多个InnoDB表空间时才相关。它指定MySQL一次可以打开的.ibd文件的最大数量。最小值是10。如果未启用innodb_file_per_table,则默认值为300,否则为300和table_open_cache的最大值。

用于.ibd文件的文件描述符仅用于InnoDB表。它们独立于open_files_limit系统变量指定的变量,并且不影响表缓存的操作

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_open_files

10  innodb_max_dirty_pages_pct

InnoDB尝试刷新缓冲池中的数据,这样脏页的百分比就不会超过这个值。默认值是75。

innodb_max_dirty_pages_pct设置为刷新活动建立一个目标。它不影响冲洗速度。

11 innodb_sort_buffer_size

指定在创建InnoDB索引期间用于排序数据的排序缓冲区的大小。指定的大小定义读入内存进行内部排序然后写入磁盘的数据量。这个过程称为“运行”。默认大小 1048576bytes(1MB), 这个可以用explain 来查看一下,如果很多sql排序用到了File_on_disk 那么需要适当的增加排序缓冲区的大小。

在索引创建完毕后innodb_sort_buffer会被释放。

12  max_connections

mysql  同时进行的客户端连接的最大允许数量,默认是151.

修改 在my.cnf 下的【mysql】 下添加 max_connections=1024;

13  max_connect_errors

      如果MySQL服务器连续接收到了来自于同一个主机的请求,而且这些连续的请求全部都没有成功的建立连接就被中断了,当这些连续的请求的累计值大于max_connect_errors的设定值时,MySQL服务器就会阻止这台主机后续的所有请求. 这个就是说,tcp连接建立的过程中超过这个参数值(默认是10)的次数没有成功,那么不好意思你接下来的就别想再连接了。可以有效的防止syn_flood攻击。 

想要解决这个 执行flush hosts;

14 connect_timeout

mysql连接超时时间,默认是10s

获取MySQL连接是多次握手的结果,除了用户名和密码的匹配校验外,还有IP->HOST->DNS->IP验证,任何一步都可能因为网络问题导致线程阻塞。为了防止线程浪费在不必要的校验等待上,超过connect_timeout的连接请求将会被拒绝。

15  max_user_connections#最大用户连接数 

针对某一个账号的所有客户端并行连接到MYSQL服务的最大并行连接数。简单说是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制 默认是0;

16 skip-name-resolve

禁止mysql进行域名解析 默认值为OFF,如果它是off,mysqld在检查客户端连接的时候,将解析主机名,如果它是on  mysqld只能使用ip数字。

17  wait_timeout#等待超时 

服务器在关闭非交互式连接之前等待活动的秒数。默认值是28800秒(8小时),最小是1秒,最大是31536000秒。。。

非交互式:指用dbc,pdo连接数据库是非交互式。

交互式:mysql客户端连接数据库。

18 back_log 可以在堆栈中的连接数量

MySQL可以有多少未完成的连接请求。当主MySQL线程在很短的时间内收到很多连接请求时,就会出现这种情况。然后,主线程需要一些时间(尽管很少)来检查连接并启动一个新线程。back_log值表示在MySQL暂时停止响应新请求之前的短时间内可以堆多少个请求。只有当您预期在短时间内会有大量连接时,才需要增加这个值。

       如果mysql的连接数据达到了max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。默认值-1(version mysql 5.7)意味着自适应大小。

官方有个公式: back_log = 50 +(max_conections / 5);

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注