精华内容
下载资源
问答
  • mysql性能优化配置优化

    千次阅读 2016-11-16 17:20:34
    通过根据服务器目前状况,修改MySQL的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。   2、服务器参数: 32G内存、4个CPU,每个CPU 8核。 3、MySQL目前安装状况。  MySQL目前...

    1、目的:

    通过根据服务器目前状况,修改MySQL的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。

     

    2、服务器参数:

    32G内存、4CPU,每个CPU 8核。

    3MySQL目前安装状况。

        MySQL目前安装,用的是MySQL默认的最大支持配置。拷贝的是my-huge.cnf.编码已修改为UTF-8.具体修改及安装MySQL,可以参考<<Linux系统上安装MySQL 5.5>>帮助文档。

    4、修改MySQL配置

    打开MySQL配置文件my.cnf

     

    vi  /etc/my.cnf

    4.1 MySQL非缓存参数变量介绍及修改
    4.1.1修改back_log参数值:由默认的50修改为500.每个连接256kb,占用:125M

              back_log=500

        back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。将会报:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时.

    back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。

    修改系统内核参数,)http://www.51testing.com/html/64/n-810764.html

    查看mysql 当前系统默认back_log值,命令:

    show variables like 'back_log'; 查看当前数量

     

    4.1.2修改wait_timeout参数值,由默认的8小时,修改为30分钟。(本次不用)

              wait_timeout=1800(单位为妙)

     

    我对wait-timeout这个参数的理解:MySQL客户端的数据库连接闲置最大时间值。

    说得比较通俗一点,就是当你的MySQL连接闲置超过一定时间后将会被强行关闭。MySQL默认的wait-timeout  值为8个小时,可以通过命令show variables like 'wait_timeout'查看结果值;。

    设置这个值是非常有意义的,比如你的网站有大量的MySQL链接请求(每个MySQL连接都是要内存资源开销的 ),由于你的程序的原因有大量的连接请求空闲啥事也不干,白白占用内存资源,或者导致MySQL超过最大连接数从来无法新建连接导致“Too many connections”的错误。在设置之前你可以查看一下你的MYSQL的状态(可用show processlist),如果经常发现MYSQL中有大量的Sleep进程,则需要 修改wait-timeout值了。

    interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。

    wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局 interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义).

    这两个参数必须配合使用。否则单独设置wait_timeout无效

     

    4.1.3修改max_connections参数值,由默认的151,修改为3000750M)。

        max_connections=3000

    max_connections是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。

    MySQL服务器允许的最大连接数16384

    查看系统当前最大连接数:

    show variables like 'max_connections';

     

    4.1..4修改max_user_connections值,由默认的0,修改为800

         max_user_connections=800

     max_user_connections是指每个数据库用户的最大连接

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

    目前默认值为:0不受限制。

    这儿顺便介绍下Max_used_connections:它是指从这次mysql服务启动到现在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。如果在过去某一个时刻,MYSQL服务同时有1000个请求连接过来,而之后再也没有出现这么大的并发请求时,则Max_used_connections=1000.请注意与show variables 里的max_user_connections的区别。默认为0表示无限大。

    查看max_user_connections值

    show variables like 'max_user_connections';

     

    4.1.5修改thread_concurrency值,由目前默认的8,修改为64

         thread_concurrency=64

    thread_concurrency的值的正确与否mysql的性能影响很大在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。

    thread_concurrency应设为CPU核数的2比如有一个双核的CPU, thread_concurrency  的应该为4; 2个双核的cpu, thread_concurrency的值应为8.

    比如:根据上面介绍我们目前系统的配置,可知道为4CPU,每个CPU8核,按照上面的计算规则,这儿应为:4*8*2=64

    查看系统当前thread_concurrency默认配置命令:

     show variables like 'thread_concurrency';

     

    4.1.6添加skip-name-resolve,默认被注释掉,没有该参数。

    skip-name-resolve

    skip-name-resolve:禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

    4.1.7 skip-networking,默认被注释掉。没有该参数。(本次无用)

     skip-networking建议被注释掉,不要开启

    开启该选项可以彻底关闭MySQLTCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

    4.1.8  default-storage-engine(设置MySQL的默认存储引擎)

    default-storage-engine= InnoDB(设置InnoDB类型,另外还可以设置MyISAM类型)

    设置创建数据库及表默认存储类型

    show table status like tablename显示表的当前存储状态值

    查看MySQL有哪些存储状态及默认存储状态

     show engines;

    创建表并指定存储类型

    CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB;

    修改表存储类型:

      Alter table tableName engine =engineName

     

    备注:设置完后把以下几个开启:

    # Uncomment the following if you are using InnoDB tables

    innodb_data_home_dir = /var/lib/mysql

    #innodb_data_file_path = ibdata1:1024M;ibdata2:10M:autoextend(要注释掉,否则会创建一个新的把原来的替换的。)

    innodb_log_group_home_dir = /var/lib/mysql

    # You can set .._buffer_pool_size up to 50 - 80 %

    # of RAM but beware of setting memory usage too high

    innodb_buffer_pool_size = 1000M

    innodb_additional_mem_pool_size = 20M

    # Set .._log_file_size to 25 % of buffer pool size

    innodb_log_file_size = 500M

    innodb_log_buffer_size = 20M

    innodb_flush_log_at_trx_commit = 0

    innodb_lock_wait_timeout = 50

    设置完后一定记得把MySQL安装目录地址(我们目前是默认安装所以地址/var/lib/mysql/)下的ib_logfile0ib_logfile1删除掉。否则重启MySQL起动失败。

     

    4.2 MySQL缓存变量介绍及修改

    数据库属于IO密集型的应用程序,其主职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个 IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。本文先从MySQL数据库 IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化

     

    4.2.1全局缓存

    启动MySQL时就要分配并且总是存在的全局缓存。目前有:key_buffer_size(默认值:402653184,384M)innodb_buffer_pool_size(默认值:134217728即:128M)innodb_additional_mem_pool_size(默认值:8388608即:8M)、innodb_log_buffer_size(默认值:8388608即:8M)query_cache_size(默认值:33554432即:32M)等五个。总共:560M.

    这些变量值都可以通过命令如:show variables like '变量名';查看到。

     

    4.2.1.1key_buffer_size,本系统目前为384M,可修改为400M

        key_buffer_size=400M

        key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MyISAM(MySQL表存储的一种类型,可以百度等查看详情)表性能影响最大的一个参数。如果你使它太大,系统将开始换页并且真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。对于内存在4GB左右的服务器该参数可设置为256M384M.

    怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requestsKey_reads   ,比例key_reads / key_read_requests应该尽可能的低,比如1:1001:1000 1:10000。其值可以用以下命令查得:show status like 'key_read%';

    比如查看系统当前key_readkey_read_request值为:

    +-------------------+-------+

    | Variable_name     | Value |

    +-------------------+-------+

    | Key_read_requests | 28535 |

    | Key_reads         | 269   |

    +-------------------+-------+

    可知道有28535个请求,有269个请求在内存中没有找到直接从硬盘读取索引.

    未命中缓存的概率为:0.94%=269/28535*100%.  一般未命中概率在0.1之下比较好。目前已远远大于0.1,证明效果不好。若命中率在0.01以下,则建议适当的修改key_buffer_size值。

    http://dbahacker.com/mysql/innodb-myisam-compare(InnoDBMyISAM的六大区别)

    http://kb.cnblogs.com/page/99810/(查看存储引擎介绍)

    MyISAMInnoDBMyISAM Merge引擎、InnoDBmemory(heap)archive

    4.2.1.2innodb_buffer_pool_size(默认128M)

    innodb_buffer_pool_size=1024M(1G)

       innodb_buffer_pool_size:主要针对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptive hash数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。假设:12Ginnodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G的内存。若系统只有16G,而且只运行MySQL,且MySQL只用InnoDB

    那么为MySQL12G,是最大限度地利用内存了。

    另外InnoDB MyISAM 存储引擎不同, MyISAM  key_buffer_size 只能缓存索引键,而 innodb_buffer_pool_size 却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少 InnoDB 类型的表的磁盘 I/O 

    当我们操作一个 InnoDB 表的时候,返回的所有数据或者去数据过程中用到的任何一个索引块,都会在这个内存区域中走一遭。

    可以通过 (Innodb_buffer_pool_read_requests – Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100% 计算缓存命中率,并根据命中率来调整 innodb_buffer_pool_size 参数大小进行优化。值可以用以下命令查得:show status like 'Innodb_buffer_pool_read%';

    比如查看当前系统中系统中

    | Innodb_buffer_pool_read_requests      | 1283826 |

    | Innodb_buffer_pool_reads              | 519     |

    +---------------------------------------+---------+

    其命中率99.959%=1283826-519/1283826*100%  命中率越高越好。

    4.2.1.3innodb_additional_mem_pool_size(默认8M)

      innodb_additional_mem_pool_size=20M

         innodb_additional_mem_pool_size 设置了InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQL Instance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。

    这个参数大小是否足够还是比较容易知道的,因为当过小的时候,MySQL会记录Warning信息到数据库的error log中,这时候你就知道该调整这个参数大小了。

    查看当前系统mysqlerror日志  cat  /var/lib/mysql/机器名.error 发现有很多waring警告。所以要调大为20M.

    根据MySQL手册,对于2G内存的机器,推荐值是20M

        32G内存的 100M

    4.2.1.4innodb_log_buffer_size(默认8M)

    innodb_log_buffer_size=20M

        innodb_log_buffer_size  这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于Binlog Buffer,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入Innofb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件 (或者同步到磁盘)中。可以通过innodb_log_buffer_size 参数设置其可以使用的最大内存空间。

       InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。 在 my.cnf中以数字格式设置。

    默认是8MB,系的如频繁的系统可适当增大至4MB~8MB。当然如上面介绍所说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过32MB

    注:innodb_flush_log_trx_commit参数对InnoDB Log的写入性能有非常关键的影响,默认值为1。该参数可以设置为0,1,2,解释如下:

    0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file的刷新或者文件系统到磁盘的刷新操作;

    1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;

    2:事务提交会触发log buffer到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。

    实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。根据MySQL手册,在存在丢失最近部分事务的危险的前提下,可以把该值设为0

     

    4.5.1.5query_cache_size(默认32M)

    query_cache_size=40M

         query_cache_size: 主要用来缓存MySQL中的ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache功能,MySQL在接受到一条select语句的请求后,如果该语句满足Query Cache的要求(未显式说明不允许使用Query Cache,或者已经显式申明需要使用Query Cache)MySQL会直接根据预先设定好的HASH算法将接受到的select语句以字符串方式进行hash,然后到Query Cache中直接查找是否已经缓存。也就是说,如果已经在缓存中,该select请求就会直接将数据返回,从而省略了后面所有的步骤(SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。

    当然,Query Cache也有一个致命的缺陷,那就是当某个表的数据有任何任何变化,都会导致所有引用了该表的select语句在Query Cache中的缓存数据失效。所以,当我们的数据变化非常频繁的情况下,使用Query Cache可能会得不偿失

       Query Cache的使用需要多个参数配合,其中最为关键的是query_cache_sizequery_cache_type,前者设置用于缓存 ResultSet的内存大小,后者设置在何场景下使用Query Cache。在以往的经验来看,如果不是用来缓存基本不变的数据的MySQL数据库,query_cache_size一般256MB是一个比较合适的大小。当然,这可以通过计算Query Cache的命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))来进行调整。 query_cache_type可以设置为0(OFF)1(ON)或者2(DEMOND),分别表示完全不使用query cache,除显式要求不使用query cache(使用sql_no_cache)之外的所有的select都使用query cache,只有显示要求才使用query cache(使用sql_cache)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;

    根据命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))进行调整,一般不建议太大,256MB可能已经差不多了,大型的配置型静态数据可适当调大.

    可以通过命令:show status like 'Qcache_%';查看目前系统Query catch使用大小

    | Qcache_hits             | 1892463  |

    | Qcache_inserts          | 35627  

    命中率98.17%=1892463/(1892463 +35627 )*100

    4.2.2局部缓存

    除了全局缓冲,MySql还会为每个连接发放连接缓冲。个连接到MySQL服务器的线程都需要有自己的缓冲。大概需要立刻分配256K甚至在线程空闲时,它们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需分配大约read_buffer_size

    sort_buffer_sizeread_rnd_buffer_sizetmp_table_size 大小的内存空间不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。有的是立刻分配成单独的组块。tmp_table_size 可能高达MySQL所能分配给这个操作的最大内存空间了

    。注意,这里需要考虑的不只有一点——可能会分配多个同一种类型的缓存,例如用来处理子查询。一些特殊的查询的内存使用量可能更大——如果在MyISAM表上做成批的插入

    时需要分配 bulk_insert_buffer_size 大小的内存;执行 ALTER TABLE OPTIMIZE TABLE REPAIR TABLE 命令时需要分配 myisam_sort_buffer_size 大小的内存。

    4.2.2.1read_buffer_size(默认值:20971442M

    read_buffer_size=4M

           read_buffer_size MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一

    缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能.

     

    4.2.2.2sort_buffer_size(默认值:20971442M

    sort_buffer_size=4M

        sort_buffer_sizeMySql执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。如果不能,可以尝试增加sort_buffer_size变量的大小

    4.2.2.3:  read_rnd_buffer_size(默认值:83886088M)

    read_rnd_buffer_size=8M

    read_rnd_buffer_size MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开

    销过大。

    4.2.2.4:  tmp_table_size(默认值:8388608 即:16M)

    tmp_table_size=16M

       tmp_table_sizeMySqlheap (堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。大多数临时表是基于内

    存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。如果某个内部heap(堆积)表大小超过tmp_table_sizeMySQL可以根据需要自

    动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySql同时将增加heap表的大小,可达到提高

    联接查询速度的效果。

    4.2.2.5record_buffer:(默认值:)

      record_buffer每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072

    (128K)

    4.2.3其它缓存:

    4.2.3.1table_cache(默认值:512)

     

    TABLE_CACHE(5.1.3及以后版本又名TABLE_OPEN_CACHE)

    table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tablesOpened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

    SHOW STATUS LIKE 'Open%tables';

    +---------------+-------+

    | Variable_name | Value |

    +---------------+-------+

    | Open_tables   | 356   |

    | Opened_tables | 0     |

    +---------------+-------+

    2 rows in set (0.00 sec)

    open_tables表示当前打开的表缓存数,如果执行flush tables操作,则此系统会关闭一些当前没有使用的表缓存而使得此状态值减小;

    opend_tables表示曾经打开的表缓存数,会一直进行累加,如果执行flush tables操作,值不会减小。

    在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值 是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生 更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的 table_cache值。

    由于MySQL是多线程的机制,为了提高性能,每个线程都是独自打开自己需要的表的文件描 述符,而不是通过共享已经打开的.针对不同存储引擎处理的方法当然也不一样

    在myisam表引擎中,数据文件的描述符 (descriptor)是不共享的,但是索引文件的描述符却是所有线程共享的.Innodb中和使用表空间类型有关,假如是共享表空间那么实际就一个数 据文件,当然占用的数据文件描述符就会比独立表空间少.
    mysql手册上给的建议大小 是:table_cache=max_connections*n

    n表示查询语句中最大表数, 还需要为临时表和文件保留一些额外的文件描述符。

    这个数据遭到很多质疑,table_cache够用就好,检查 Opened_tables值,如果这个值很大,或增长很快那么你就得考虑加大table_cache了.

      table_cache:所有线程打开的表的数目。增大该值可以增加mysqld需要的文件描述符的数量。默认值是64.

     

    4.2.3.2 thread_cache_size (服务器线程缓存)

    thread_cache_size=64

    默认的thread_cache_size=8,但是看到好多配置的样例里的值一般是3264,甚至是128,感觉这个参数对优化应该有帮助,于是查了下:
    根据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections  Threads_created 状态的变量,可以看到这个变量的作用。(–>表示要调整的值)   根据物理内存设置规则如下:
    1G —> 8
    2G —> 16
    3G —> 32     >3G —> 64

      mysql> show status like 'thread%';
    +——————-+——-+
    | Variable_name     | Value |
    +——————-+——-+
    | Threads_cached    | 0     |  <—当前被缓存的空闲线程的数量
    | Threads_connected | 1     |  <—正在使用(处于连接状态)的线程
    | Threads_created   | 1498  |  <—服务启动以来,创建了多少个线程
    | Threads_running   | 1     |  <—正在忙的线程(正在查询数据,传输数据等等操作)
    +——————-+——-+

    查看开机起来数据库被连接了多少次?

    mysql> show status like '%connection%';
    +———————-+——-+
    | Variable_name        | Value |
    +———————-+——-+
    | Connections          | 1504  |          –>服务启动以来,历史连接数
    | Max_used_connections | 2     |
    +———————-+——-+

    通过连接线程池的命中率来判断设置值是否合适?命中率超过90%以上,设定合理。

     (Connections -  Threads_created) / Connections * 100 %

     

    展开全文
  • 数学建模解决出版社资源配置问题

    千次阅读 2019-01-24 15:53:05
    出版社的资源规划与配置是非常繁重和复杂的,如何在MATLAB进行建模解决该问题是十分有意义的,具体如下: 1、在MATLAB的主界面编辑器中写入下列代码: %lin.m 利用MATLAB自带的优化工具箱求解 clc %各科目各课程...

    出版社的资源规划与配置是非常繁重和复杂的,如何在MATLAB进行建模解决该问题是十分有意义的,具体如下:

    1、在MATLAB的主界面编辑器中写入下列代码:

    %lin.m   利用MATLAB自带的优化工具箱求解
    clc
    %各科目各课程的均价
    jsj=[25.8 25.5 28.0 26.0 24.7 25.6 27.0 22.9 25.9 24.5];
    jg=[26.4 27.3 24.9 27.5 23.5 23.5 25.7 32.9 31.5 35.3];
    sx=[21.0 20.2 24.8 19.6 18.6 23.3 13.1 18.4 22.5 25.7];
    yy=[34.4 18.7 33.0 20.6 27.9 21.4 11.4 31.3 23.5 32.3];
    lk=[14.7 18.8 26.6 16.7 13.4 14.8 17.5 24.2];
    jn=[22.5 32.3 20.8 21.6 23.0 35.4];
    hg=[20.0 23.6 25.6 28.0 18.9 26.7];
    dl=[21.5 32.4 24.0 23.8 18.2 22.7];
    hj=[37.5 22.2 20.7 22.7 24.3 32.2];
    %各课程的书号个数百分比
    w1=[0.159090909 0.161931818 0.039772727 0.048295455 0.048295455 0.153409091 0.122159091 0.048295455 0.147727273 0.071022727];
    w2=[0.135678392 0.08040201 0.090452261 0.070351759 0.090452261 0.090452261 0.095477387 0.16080402 0.095477387 0.090452261];
    w3=[0.044354839 0.173387097 0.239247312 0.036290323 0.120967742 0.143817204 0.059139785 0.024193548 0.102150538 0.056451613];
    w4=[0.355971897 0.044496487 0.016393443 0.18969555 0.06088993 0.121779859 0.049180328 0.044496487 0.072599532 0.044496487];
    w5=[0.065789474 0.149122807 0.105263158 0.157894737 0.074561404 0.140350877 0.157894737 0.149122807];
    w6=[0.296482412 0.060301508 0.110552764 0.27638191 0.100502513 0.155778894];
    w7=[0.076190476 0.152380952 0.2 0.123809524 0.123809524 0.323809524];
    w8=[0.175 0.183333333 0.191666667 0.216666667 0.116666667 0.116666667];
    w9=[0.174603175 0.238095238 0.222222222 0.214285714 0.087301587 0.063492063];
    c1=[249.4166666 363.8375 118.3333333 238.4375 162.4166667 276.5818181 503.5486111 83.08333333 387.975 414.9375];
    c2=[1425.5 1875.75 386.6666666 1106.208333 286.4166667 544.9166667 812.9375 575.2916666 2589.9375 1356.0625];
    c3=[746.5416667 847.3785714 8609.903374 1297.5 1462.357843 2617.573864 628.4214286 498.8125 465.6760417 2863.553572];
    c4=[747.8024039 525.45 907.9166667 268.5805555 447.8583334 274.1125 59.91666667 632.3875 347.4464286 301.8333333];
    c5=[5297.5625 7532.660714 8622.2 4606.104167 16071.85416 7891.25 4104.633929 1241.875];
    c6=[681.3461539 266.875 480.25 816.175 1204.683334 1000.75];
    c7=[1038.75 863.95 406.975 162.9166667 782.0833333 427.4583333];
    c8=[226.6666667 644.875 600.125 810.5 295.1666667 1543.666666];
    c9=[593.1875 476.7916667 629.1666666 414.25 718.625 1460.75];
    m=0.7;
    ys=-[sum(jsj.*w1.*c1) sum(jg.*w2.*c2) sum(sx.*w3.*c3) sum(yy.*w4.*c4) sum(lk.*w5.*c5) sum(jn.*w6.*c6) sum(hg.*w7.*c7) sum(dl.*w8.*c8) sum(hj.*w9.*c9)];
    y1=m*ys;
    my=[3.25 3.24 3.24 3.24 3.2 3.2 3.3 3.27 3.2]; %满意度
    pf=0.2*sin(pi/4*(my-2));
    y2=(1-m)*pf.*ys;
    y=y1+y2;
    Aeq=[1 1 1 1 1 1 1 1 1];
    beq=500;
    A=[];b=[];
    vlb=[70 35 145 78 40 38 17 21 21];
    vub=[78 44 155 90 50 42 25 27 27];
    j=[64   69  77  69  73
    37  39  43  39  41
    147 148 153 150 146
    95  87  77  83  85
    44  48  42  50  44
    40  42  40  38  39
    24  25  20  17  19
    22  21  23  27  27
    27  21  25  27  26];
    qn=y*j;    %01-05年的经济总值
    [x,fval]=linprog(y,A,b,Aeq,beq,vlb,vub) %x为06年书号分配方案,fval为相应的经济总值
    

    2、命名保存好至自定义路径下,点击运行,结果如下:

    从命令行窗口的结果中可以看出,出版社在该年度出版的书籍配置已经达到利益最大化,其中fval值代表的是经济效益总值,基本介绍完毕,请大家继续关注!!!

    展开全文
  • centos中apache的优化配置

    千次阅读 2017-01-05 15:43:09
    较低的内存与CPU数能节省很大一笔建站成本,但低配置的服务器如果不精心的配置,会让服务器资源紧张,上涨的访问量会迅速使服务器资源枯竭。本教程以centos为例介绍小内存Linux服务器在lamp环境下的优化方法,给各位...

    目前不少选择VPS或云服务器的站长们都纠结过这个问题:到底从哪种配置起步呢?较低的内存与CPU数能节省很大一笔建站成本,但低配置的服务器如果不精心的配置,会让服务器资源紧张,上涨的访问量会迅速使服务器资源枯竭。本教程以centos为例介绍小内存Linux服务器在lamp环境下的优化方法,给各位新入门的站长们参考一下。

    1. centos中apache的优化与配置
      未特殊说明,本教程在所有设置均在httpd.conf文件中(默认路径/etc/httpd/conf/httpd.conf)首先,为确保服务器安全,我们需要关闭显示apache和centos系统版本号。
      在http.conf中:
      找到ServerSignature ,将值On改为Off:
      ServerSignature Off
      找到ServerTokens,将值Full改为Prod
       ServerTokens Prod针对apache的优化:
      找到<IfModule prefork.c>
      其中配置的意义:
      StartServers :Apache服务启动时进程个数
      MinSpareServers:Apache服务在运行过程中存留最少的进程个数,如进程个数少于这个值,母进程会每秒创建一个httpd进程,直到等于该值。

      MaxSpareServers:Apache服务在运行过程中空闲时存留的最多进程个数。如果进程个数多于这个值,母进程会每秒杀死一个httpd进程,直到等于该值。
      ServerLimit、MaxClients:Apache服务能接受同时连接的请求个数,如超过该值,则需排队等候。Apache服务进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须 MaxClients ≤ ServerLimit ≤ 20000。
      MaxRequestsPerChild:每个httpd进程每接受该值数量的请求链接后就会杀死自己,如有需要,母进程会通过上边的规则重建子进程。

      针对512M内存服务器的配置如下:

       

      StartServers 5
      MinSpareServers 5
      MaxSpareServers 10
      ServerLimit 256
      MaxClients 256
      MaxRequestsPerChild 100

      针对1GB内存服务器的设置如下:

      StartServers 10
      MinSpareServers 10
      MaxSpareServers 25
      ServerLimit 256
      MaxClients 256
      MaxRequestsPerChild 1000//或者设置为0,即不限制
    展开全文
  • MySQL优化之my.conf配置详解

    万次阅读 多人点赞 2017-12-29 11:30:08
    最近项目不太忙,所以有时间静心来研究下mysql的优化,对于MySQL的设置是否合理优化,直接影响到网站的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的...

     最近项目不太忙,所以有时间静心来研究下mysql的优化,对于MySQL的设置是否合理优化,直接影响到网站的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数。 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。


    一、服务器硬件对MySQL性能的影响
    ①磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快。

    ②CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU,现在我较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于mysql。

    ③物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了16G。


    二、MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。 对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。 由于my.cnf文件的优化设置是与服务器硬件配置息息相关的, 因而我们指定一个假想的服务器硬件环境:CPU: 2颗Intel Xeon 2.4GHz 内存: 4GB DDR 硬盘: SCSI 73GB(很常见的2U服务器 ) 。
    下面,我们根据以上硬件配置结合一份已经优化好的my.cnf进行说明:

    [client]
    default-character-set=utf8mb4
    #mysqlde utf8字符集默认为3位的,不支持emoji表情及部分不常见的汉字,故推荐使用utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    skip-locking 
    #避免MySQL的外部锁定,减少出错几率增强稳定性。
    
    #skip-name-resolve 
    # 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
    # 因为docker官方的mysql的dockerfile中有一段代码:echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf将这个配置写入另一个文件,这里咱们就不用写了,docker默认解析docker name或者service为ip,这样mysql就不用解析了
    
    back_log = 512
    # MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
    # 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
    # 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
    # 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
    # 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
    # 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。默认值为50,对于Linux系统推荐设置为小于512的整数。
    
    key_buffer_size = 64M
    # 这是mysql优化中非常重要的一项配置
    # 指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。注意:该参数值设置的过大反而会是服务器整体效率降低
    # 默认值是16M,对于内存在4GB左右的服务器该参数可设置为384M或512M。
    # 想要知道key_buffer_size设置是否合理,通过命令show global status like 'key_read%';来查看Key_read_requests(索引请求次数)和Key_reads(从i/o中读取数据,也就是未命中索引),
    # 计算索引未命中缓存的概率:key_cache_miss_rate = Key_reads / Key_read_requests * 100%,至少是1:100,1:1000更好,比如我的key_cache_miss_rate = 15754 / 26831941 * 100% = 1/1700,也就是说1700个中只有一个请求直接读取硬盘
    # 如果key_cache_miss_rate在0.01%以下的话,key_buffer_size分配的过多,可以适当减少。
    # MySQL服务器还提供了key_blocks_*参数:show global status like 'key_blocks_u%';
    # Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。
    # 比较理想的设置:Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% < 80%
    
    max_connections = 1500
    # MySQL的最大连接数,默认是100,测试开过1万个连接数,并将他们持久化,内存增加了一个多G,由此算出一个连接大概为100+K。
    # 如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
    # 比较理想的设置应该是max_used_connections / max_connections * 100% ≈ 80%,当发现这一比例在10%以下的话,说明最大连接数设置的过高了
    # 查看最大的连接数:SHOW VARIABLES LIKE "max_connections";
    # 查看已使用的最大连接:SHOW GLOBAL STATUS LIKE 'max_used_connections';
    # 显示连接相关的设置:SHOW STATUS LIKE '%connect%';
    # 显示当前正在执行的mysql连接:SHOW PROCESSLIST
    
    innodb_buffer_pool_size = 128M
    # InnoDB使用一个缓冲池来保存索引和原始数据, 默认值为128M。
    # 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
    # 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%即5-6GB(8GB内存),20-25GB(32GB内存),100-120GB(128GB内存),注意这是在独立数据库服务器中推荐的设置
    # 不要设置过大,否则,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。
    # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,所以不要设置的太高.
    
    query_cache_size = 0
    # MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL 5.6以后的默认值为0,MySQL将SELECT语句和查询结果存放在缓冲区中,
    # query cache(查询缓存)是一个众所周知的瓶颈,甚至在并发并不多的时候也是如此。 最佳选项是将其从一开始就停用,设置query_cache_size = 0(MySQL 5.6以后的默认值)并利用其他方法加速查询:优化索引、增加拷贝分散负载或者启用额外的缓存(比如memcache或redis)。
    # 打开query cache(Qcache)对读和写都会带来额外的消耗:a、读查询开始之前必须检查是否命中缓存。b、如果读查询可以缓存,那么执行完之后会写入缓存。 c、当向某个表写入数据的时候,必须将这个表所有的缓存设置为失效
    # 缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括查询本身,数据库,客户端协议的版本等,任何字符上的不同,例如空格,注释都会导致缓存不命中。
    # 通过命令:show status like '%query_cache%';查看查询缓存相关设置:
    # # have_query_cache:是否有此功能
    # # query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cache 
    # # query_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小
    # # uery_cache_size:设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数 
    # # query_cache_type:控制 Query Cache 功能的开关,可以设置为0(OFF),1(ON)和2(DEMAND)三种,意义分别如下: 
    # # # 0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache 
    # # # 1(ON):开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用Query Cache 
    # # # 2(DEMAND):开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cache
    # # query_cache_wlock_invalidate:控制当有写锁定发生在表上的时刻是否先失效该表相关的 Query Cache,如果设置为 1(TRUE),则在写锁定的同时将失效该表相关的所有 Query Cache,如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的 Query Cache。 
    # 通过命令:show status like ‘%Qcache%’;查看查询缓存使用状态值:
    # # Qcache_free_blocks:目前还处于空闲状态的 Query Cache 中内存 Block 数目 
    # # Qcache_free_memory:目前还处于空闲状态的 Query Cache 内存总量 
    # # Qcache_hits:Query Cache 命中次数 
    # # Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数 
    # # Qcache_lowmem_prunes:当 Query Cache 内存容量不够,需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数
    # # Qcache_not_cached:没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL 
    # # Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 数量 
    # # Qcache_total_blocks:Query Cache 中总的 Block 数量  
    # 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,且Qcache_free_memory值很小,此时需要增加缓冲大小;
    # 如果Qcache_hits的值不大,且Qcache_free_memory值较大,则表明你的查询重复率很低,查询缓存不适合你当前系统,这种情况下使用查询缓冲反而会影响效率,可以通过设置query_cache_size = 0或者query_cache_type 来关闭查询缓存。 
    # Query Cache 的大小设置超过256MB,这也是业界比较常用的做法。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
    
    max_connect_errors = 6000
    # 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。防止黑客  
    
    open_files_limit = 65535
    # MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,
    # 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
    
    table_open_cache = 128
    # MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
    # 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);
    # 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
    
    max_allowed_packet = 4M
    # 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。
    # 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
    
    binlog_cache_size = 1M
    # 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
    
    max_heap_table_size = 8M
    # 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
    
    tmp_table_size = 16M
    # MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
    # 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。
    # 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果
    
    read_buffer_size = 2M
    # MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
    # 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
    
    read_rnd_buffer_size = 8M
    # MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
    # MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
    
    sort_buffer_size = 8M
    # MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
    # 如果不能,可以尝试增加sort_buffer_size变量的大小
    
    join_buffer_size = 8M
    # 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享
    
    thread_cache_size = 8
    # 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
    # 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
    # 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)
    # 根据物理内存设置规则如下:
    # 1G  —> 8
    # 2G  —> 16
    # 3G  —> 32
    # 大于3G  —> 64
    
    query_cache_limit = 2M
    #指定单个查询能够使用的缓冲区大小,默认1M
    
    ft_min_word_len = 4
    # 分词词汇最小长度,默认4
    
    transaction_isolation = REPEATABLE-READ
    # MySQL支持4种事务隔离级别,他们分别是:
    # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
    # 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
    
    log_bin = mysql-bin
    binlog_format = mixed
    expire_logs_days = 30 #超过30天的binlog删除
    
    log_error = /data/mysql/mysql-error.log #错误日志路径
    slow_query_log = 1
    long_query_time = 1 #慢查询时间 超过1秒则为慢查询
    slow_query_log_file = /data/mysql/mysql-slow.log
    
    performance_schema = 0
    explicit_defaults_for_timestamp
    
    #lower_case_table_names = 1 #不区分大小写
    
    skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
    
    default-storage-engine = InnoDB #默认存储引擎
    
    innodb_file_per_table = 1
    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
    # 独立表空间优点:
    # 1.每个表都有自已独立的表空间。
    # 2.每个表的数据和索引都会存在自已的表空间中。
    # 3.可以实现单表在不同的数据库中移动。
    # 4.空间可以回收(除drop table操作处,表空不能自已回收)
    # 缺点:
    # 单表增加过大,如超过100G
    # 结论:
    # 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
    
    innodb_open_files = 500
    # 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
    
    innodb_write_io_threads = 4
    innodb_read_io_threads = 4
    # innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
    # 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
    
    innodb_thread_concurrency = 0
    # 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
    
    innodb_purge_threads = 1
    # InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。
    # 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单
    # 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1
    
    innodb_flush_log_at_trx_commit = 2
    # 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
    # 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
    # 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
    # 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
    # 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
    # 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
    # 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
    # 总结
    # 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
    
    innodb_log_buffer_size = 4M
    # 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
    
    innodb_log_file_size = 32M
    # 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
    
    innodb_log_files_in_group = 3
    # 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
    
    innodb_max_dirty_pages_pct = 90
    # innodb主线程刷新缓存池中的数据,使脏数据比例小于90%
    
    innodb_lock_wait_timeout = 120 
    # InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒
    
    bulk_insert_buffer_size = 8M
    # 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。
    
    myisam_sort_buffer_size = 8M
    # MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
    
    myisam_max_sort_file_size = 10G
    # 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出
    
    myisam_repair_threads = 1
    # 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) 
    
    interactive_timeout = 28800
    # 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
    
    wait_timeout = 28800
    # 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,
    # 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)
    # MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,
    # 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,
    # 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。
    # 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,
    # 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。
    
    [mysqldump]
    quick
    max_allowed_packet = 16M #服务器发送和接受的最大包长度
    
    [myisamchk]
    key_buffer_size = 8M
    sort_buffer_size = 8M
    read_buffer = 4M
    write_buffer = 4M


    总结:mysql配置项的优化是一件非常复杂且长期坚持的事情,因为不同的并发级别会导致某个配置项不符合当前的情况,所以希望能和大家一起持续关注着mysql的优化,也同样欢迎大家列出自己再mysql优化中遇到的各种坑,让大家学习和借鉴。


    展开全文
  • nginx的配置优化

    千次阅读 2017-04-14 09:31:47
    优化nginx的配置,做到合理高效的使用,让程序的跑的足够快,支持足够多的并发:目标: 1.尽量提高但台机器的处理效率 2.尽量减少单台机器的负载 3.尽量减少磁盘的i/o 4.尽量减少网络的i/o 5.尽量减少内存的...
  • MySQL优化配置之query_cache_size

    万次阅读 2017-12-28 17:27:41
    当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段。  查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失效。  但是随着服务器功能的强大,查询缓存也可能...
  • apache 优化配置 prefork模式

    千次阅读 2014-06-25 20:00:14
    (一)prefork模式下(其他模式下不适用),apache需要优化的主要参数:  ServerLimit 3000  StartServers 750  MinSpareServers 5  MaxSpareServers 100  MaxClients 3000  MaxRequestsPerChild 10000  ...
  • MYSQL性能优化之参数配置

    千次阅读 2016-07-21 15:52:55
    通过根据服务器目前状况,修改MySQL的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。   2、服务器参数: 32G内存、4个CPU,每个CPU 8核。 3、MySQL目前安装状况。  MySQL目前...
  • SSL 配置优化的若干建议

    万次阅读 2018-01-28 22:26:34
    如果你配置SSL只是为了网站的网址前有一把锁的标志,那不如直接送你把锁好了。...今天写一篇文章记录一下自己 SSL 的配置优化过程。以下设置均为 Nginx 的配置。 Forward Secrecy(前向加密) forward...
  • 网站优化—IIS与web.config配置优化

    千次阅读 2018-01-19 15:57:38
    网站优化——IIS与web.config配置优化 最近工作中需要做一个网站的优化工作,总结了几天,与大家分享下。优化思路无非就是前端优化,asp.net页面生命周期优化,数据访问优化,IIS与web.config配置优化,为了...
  • 今天,以“成为优秀的程序员”为目标的拭心将和大家一起精益求精,学习使用 Lint 优化我们的代码。什么是 LintLint 是Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些...
  • Lighttpd 配置与性能优化

    千次阅读 2013-11-28 09:28:17
    Lighttpd 配置与性能优化 前提:还是针对高负载,静态页面,freebsd系统的web应用。 如果非要在LSWS(LiteSpeed Web Server)和lighttpd中间做的选择的话,我觉得是困难的。从现存的网上资料中很难有个权威的说法。...
  • 如何配置我们的JVM呢,首先我们需要知道JVM的参数有哪些,然后根据这些参数的意义去分析自己的程序的JVM需要的配置。可以事先做一些尝试,再逐步调优,这个调优也是一个过程,没有足够的经验而做到一步到位是一件很...
  • MySQL性能优化之参数配置

    万次阅读 2013-12-18 13:34:25
    通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。   2、服务器参数: 32G内存、4个CPU,每个CPU 8核。 3、MySQL目前安装状况。  MySQL目前...
  • 配置块:server 监听端口,由于ip地址数量有限,因此经常存在多个主机域名对应着同一个ip地址的情况,这时在nginx.conf中就可以按照server_name(对应用户请求中的域名)并通过server块来定义虚拟主机,每个server...
  • mysql配置优化

    千次阅读 2008-04-22 10:59:00
    在安装MySQL之前,先来了解一下相关的配置文件MySQL配置文件MySQL发布的最新产品实际上超出了Linux所携带的版本。但是,稳定性和开放源代码可是很重要的因素,因此在操作系统上使用较早MySQL版本是有道理的。有许多...
  • Darcula主题的选择以及字体和颜色配置Intellij IDEA优化配置一. 主题选择二.主题导入合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • 细节优化提升资源利用率

    万次阅读 2011-09-23 13:54:59
    细节优化提升资源利用率 Author: 放翁(文初) Email: fangweng@taobao.com Mblog:weibo.com/fangweng    这里通过介绍对于淘宝开放平台基础设置之一的TOPAnalyzer的代码
  • Mac搭建Hexo博客及NexT主题配置优化

    千次阅读 2016-07-20 19:43:18
    8. NexT主题配置优化(如果你喜欢别的主题,请忽略) 这些东西都不熟悉没关系,下面都会详细介绍。 注册Github账号并创建repo 因为我们的博客是基于github pages的,也就是博客内容都托管在github ...
  • 配置优化 zookeeper.session.timeout 默认值:3分钟(180000ms) 说明:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对...
  • Nginx反向代理+Nginx性能优化配置详解

    万次阅读 2018-01-29 17:13:05
    简介: 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将... 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Inte
  • Windows Server 2008作Web服务器优化配置

    千次阅读 2010-09-21 10:20:00
    一些杀毒软件在运行查毒时,非常消耗资源,服务器尽量不要安装杀毒软件,在一些优化措施已实施的情况下,比如关掉不必要的服务和端口,病毒一般也不会感染服务器。在 Windows Server 下若要安装杀毒软件,也尽量将查...
  • apache2配置优化以及性能测试小结

    万次阅读 2008-06-13 20:31:00
     公司中现有多个apache平台,其中网元管理系统、升级和注册授权系统、离线浏览系统和应用组所开发的系统都是运行在专用的服务器中,他们都是以业务为主的系统,所拥有的硬件资源比较多,可以着重优化apache的运行...
  • RMI 各参数意义及其优化方案

    千次阅读 2009-09-03 15:26:00
    根据RMI参数意义,可以归结为以下几点,我们...同时,根据RMI的若干log配置,可以做到实时监控RMI网络,GC信息,针对实时监控的情况,有效地优化RMI参数设置。sun.rmi.dgc.checkInterval查询契约间隔时间The value of
  • hbase安装时候,通常都需要修改配置文件,默认配置通常是8G内存的配置配置文件有问题的话,后果是:hbase集群启动,直接报错,启动失败。所以说,一个好的hbase内存配置,很重要。 数据组hbase好端端的,老是...
  • Apache的各种优化以及安全配置详解

    万次阅读 2018-01-27 16:21:21
    Apache的性能是有积极意义的。 最后CPU和网络,CPU影响的是web程序执行速度,网络影响流量大小。   一、Apache的几种工作模式以及调优 Apache详细安装过程请点击这条链接即可查看:...
  • iptables高性能前端优化-无压力配置1w+条规则

    万次阅读 多人点赞 2017-08-27 20:36:19
    在我终于完成了这篇冗长的文章后,我顺势google了一下关于iptables优化的一些枝枝蔓蔓,希望能找到一些好玩的东西,如果能找到,那简直是比吃一顿大餐还要更爽的,加上外面狂风暴雨,舒坦地难以言表。   我还是...
  • 从而减小图片大小,页面在加载的时候由于加载的资源较小,实现更快加载。公司的项目是通过Vue的脚手架工具搭建的。所以用到了webpack打包工具,在我未进行优化的情况下,发布的源码包大小为13.6m,进过处理之后,...
  • 安装Nginx优化与防盗链配置详解

    千次阅读 2018-01-30 12:09:06
    ,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置。 一、Nginx的优化 1、编译安装前优化 编译前的优化主要是用来修改程序名...
  • 16、nginx 错误页面配置 nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可: error_page 404 403 500 502 503 504 /404.html; location = /404.html { root /usr/local/nginx/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,781
精华内容 40,712
关键字:

优化资源配置的意义