zoukankan      html  css  js  c++  java
  • MySQL性能优化/调优:默认配置的修改

    在这里罗列一下这些配置, 每次新装MySQL的时候, 最好根据实际需要调整一下这些配置:

    max_connections
      最大并发连接数。当MySQL的并发连接达到这个设定值时,新的连接将会被拒绝。当发现MySQL有能力处理更多的并发的时候, 建议调大这个值,相应给服务器带来更高的负载(CPU/IO/内存)。
      默认值:100, 参考设置:900

    back_log
      TCP/IP连接队列的最大值。当MySQL同时有大量连接请求的时候,MySQL会尝试用当前现有的线程处理这些请求,如果处理不过来,MySQL会把连接先放到一个队列里面,然后起新的线程处理。这个过程会很快, 但是并发请求很多的话,需要调高这个值,否则新来的连接请求会被拒绝。在一次压测的时候发现客户端返回大量的“Lost connection to MySQL”, 就是因为back_log的默认值太小导致的。增大这个值会增大CPU负载并消耗更多的内存。
      默认值:50, 参考设置:200

    skip-name-resolve
      关闭反向域名解析。MySQL默认会对每个客户端连接作反向域名解析,强烈建议关闭反向域名解析。关闭的方法是在my.cnf里面加一行skip-name-resolve

    innodb_file_per_table
    如果使用innodb, 强烈建议打开这个设置,否则所有的innodb表共享一个文件,并且这个文件的大小不会因为表数据的减少而减小,时间长了会把磁盘搞爆,这是mysql的一个bug:http://bugs.mysql.com/bug.php?id=1341

    max_connect_errors
      当客户端连接服务端超时(超过connect_timeout), 服务端就会给这个客户端记录一次error,当出错的次数达到max_connect_errors的时候,这个客户端就会被锁定。除非执行FLUSH HOSTS命令。绝对是个地雷!
      默认值:10, 参考设置:1844674407370954751(能设多大,设多大)

    connect_timeout
      连接超时的秒数。
      默认值:5, 参考设置:15
      
    slave_net_timeout
      MySQL主从复制的时候, 当Master和Slave之间的网络中断,但是Master和Slave无法察觉的情况下(比如防火墙或者路由问题)。Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,然后才会重连并且追赶这段时间主库的数据。默认是3600秒,相信一个小时之后,黄花菜都凉了。
      默认值:3600, 参考设置:30

    wait_timeout
      连接过期秒数。当一个连接SLEEP超过wait_timeout秒后,MySQL服务端会中断这个连接。这个值设置的过长有可能会导致大量的SLEEP链接占用系统资源,过小会导致“MySQL has gone away”的错误。
      默认值:28800, 参考设置:30

    key_buffer
      主键缓存。如果发现有大量的slow log,可以尝试调高这个值,相应会带来更高的内存开销。

    table_cache
      给经常访问的表分配的内存。调大这个值,一般情况下可以降低磁盘IO, 但是相应会占用更多的内存。

    配置的查看

    mysql> show variables like "max_%";
    +----------------------------+----------------------+
    | Variable_name              | Value                |
    +----------------------------+----------------------+
    | max_allowed_packet         | 31457280             |
    | max_binlog_cache_size      | 18446744073709547520 |
    | max_binlog_size            | 1073741824           |
    | max_connect_errors         | 10                   |
    | max_connections            | 100                  |
    | max_delayed_threads        | 20                   |
    | max_error_count            | 64                   |
    | max_heap_table_size        | 16777216             |
    | max_insert_delayed_threads | 20                   |
    | max_join_size              | 18446744073709551615 |
    | max_length_for_sort_data   | 1024                 |
    | max_prepared_stmt_count    | 16382                |
    | max_relay_log_size         | 0                    |
    | max_seeks_for_key          | 18446744073709551615 |
    | max_sort_length            | 1024                 |
    | max_sp_recursion_depth     | 0                    |
    | max_tmp_tables             | 32                   |
    | max_user_connections       | 0                    |
    | max_write_lock_count       | 18446744073709551615 |
    +----------------------------+----------------------+

    配置的修改
    动态变量可以在MySQL命令行里面设置:

    mysql> set global max_connections = 1600;
    Query OK, 0 rows affected (0.02 sec)

    非动态变量,比如back_log只能在my.cnf里面修改,修改后重启MySQL才能生效:

    back_log=200
  • 相关阅读:
    程序员们,让你的孩子当个网页工程师吧!
    罗永浩:锤子手机一共卖了12万部(但计划50万)……我已经交出微博密码……(老罗想通了:-))
    母婴市场两万亿,我独钟情于尿布?已获千万级天使的垂直电商“尿布师”,其商业逻辑是这样的
    梵高眼里的《星空》究竟有多美,利用机器学习和图像处理来扩展整幅画的全局景象~
    编程王道,唯“慢”不破
    BAT,你好!字幕组,再见!——也许要跟美剧说再见了~
    Google想出了一个决定人员晋升的算法,然后就没有然后了......
    程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~
    比特币 Bitcoin 是什么,我勒个去,哈耶克果然超前——货币的非国有化,容我思量一下【转载+整理】
    2014年10月底/终于/HTML5定稿……/技术从来不会成为发展的绝对瓶颈/反而商业成了无法逾越的鸿沟【转载+整理】
  • 原文地址:https://www.cnblogs.com/hujihon/p/4807764.html
Copyright © 2011-2022 走看看