Mysql一些重要配置参数的学习与整理(一)

    原文地址:Mysql一些重要配置参数的学习与整理(一)
php

     最近一直在进行mysql的学习,主要是学习mysql的一些配置参数,了解参数的意义,考虑其对mysql性能的影响,向同事要了一份正式服务器上的mysql配置,目前的配置可以知足正式生产环境中的性能要求,在学习mysql的过程当中,对该配置中的一些参数进行了解和学习,这里总结和整理一下,方便之后回顾。

    其中涉及的配置参数主要有如下几个,接下来会依次进行学习和了解: 
  skip-external-locking
    在某些系统中,lockd锁管理器可能不能正常工做,可使用skip-external-locking告诉mysqld不使用外部锁定。(这意味着你不能在同一个数据目录运行两个mysqld服务器,并且若是你使用相同内存配置,也须要特别注意)

    在Mysql4.0版本以后,外部锁定默认是禁用的,而启用外部锁定(系统锁定),若是系统上的lockd不能彻底工做(好比Linux系统),很容易形成mysqld死锁。

    明确的禁用外部锁定,能够经过配置skip-external-locking。 外部锁定只影响存储引擎为MyISAM表的访问。    

       key_buffer_size = 16M    
    这个参数的含义是:MyISAM表用于索引块的缓冲区大小,能够被全部线程所共享,默认值是8388608(即8M),它是对MyISAM表性能影响最大的一个参数,
若是数据库存储引擎为InnoDB类型,这个参数是无效的。能够经过增大这个值,以便索引更好的处理全部读和多写操做。

    这里有两篇相关的文章值得参阅:
mysql优化:Key_buffer_size   MySQL的key_buffer_size参数   

 max_allowed_packet = 1M

    表示一个数据包的最大大小,或任何生成的/中间字符串,或任何mysql_stmt_send_long_data() API 函数传递的参数。数据包消息的缓冲区被初始化为net_buffer_length的字节(net_buffer_length默认值为16384:16KB,最大能够设置为1048576:1M),可是在须要的时候能够增加到max_allowed_packet字节,这个参数的默认值是4M,在接收一些大的数据包时可能会出现错误,最大能够设置为1GB。当你经过修改这个变量的值更改消息缓冲区的大小时,若是客户端程序容许的话,建议在客户端也修改缓冲区的大小。在客户端库,默认的max_allowed_packet是1GB,可是我的的客户端可能会重写这个值,例如,mysql和mysqldump分别是16 MB和24 MB。能够经过在命令行设置或在配置文件中修改max_allowed_packet参数来更改客户端的值,须要注意的是:在session会话级别中,这个变量是只读的。

   table_open_cache = 64    
     表示全部线程打开表的数量,增长该值会增长mysqld要求的文件描述符的数量?你能够经过检查Opened_tables状态变量来肯定是否须要增长表缓存数量(Opened_tables表示已打开的表的数量)。若是这个值很大,你又不常用FLUSH TABLES(这个命令会强制关闭并从新打开全部表),能够增长table_open_cache的值。


       table_open_cache和max_connections系统变量影响文件服务器保持打开的最大数量。若是你增长了其中一个或两个值,可能会超过操做系统上每一个进程打开的文件描述符的数量限制。许多的操做系统容许你增长这个限制,可是也须要肯定操做系统是否有可能增长打开文件的限制,以及如何去作。

    table_open_cache的值与max_connections的值存在关系。例如,对于200个并发运行的链接,指定table_open_cache的值 至少为200 *  N,其中 N是 任何参与 执行 查询的链接中关联 表的最大 数量。你还必须为临时表和文件保留一些额外的文件描述符

    请确保你的操做系统可以处理table_open_cache设置的隐含打开的文件描述符的数量。若是table_open_cache值设置的过高,MYSQL可能使用完文件描述符而拒绝链接,不能执行查询,并会变的不可靠。还必须须要考虑的是,MyISAM存储引擎中,每一个惟一打开的表都须要两个文件描述符。你能够经过在mysqld的启动选项中配置open-files-limit参数,来增长MySQL可用的文件描述符的数量。   

 
   sort_buffer_size = 512K 
   表示为每个须要排序的会话分配一个指定的缓存区大小。sort_buffer_size的值不特定于任何存储引擎,它适用优化的通常方式。经过SHOW GLOBAL STATUS命令,若是你发现每秒钟有许多的Sort_merge_passes输出(Sort_merge_passes表示不得不作合并排序算法的数量),咱们就须要考虑增长sort_buffer_size的值,以加快order by 或 group by 等操做的查询性能(order by和group by的查询效率很难经过优化查询和改善索引提供效率)。

   
    优化器会尝试找出有多少空间是必要的,但能够分配更多,直到达到极限。值得注意的是:若是全局的设置,大于系统所须要的值,将减缓大部分涉及排序的查询效率。最好在session会话级别增长它的值,并且值针对那些须要增长sort_buffer_size的session会话。在Linux系统中,256KB和2MB阈值,其中较大的值可能显著减慢内存分配因此你应该考虑那些较小的值

   net_buffer_length = 8K 
   每一个客户端线程都与一个connection链接缓冲区和结果缓冲区相关联,默认值是16K。二者最初的大小都是net_buffer_length,可是根据须要会动态的扩大到max_allowed_packet设置的大小,结果缓冲区在每个sql语句执行后都会缩小到设置的net_buffer_length。

    这个变量一般不该该改变,可是若是你的系统内存很小,你能够将其设置为客户端语句的指望长度。若是语句的长度超过这个值,connection链接缓冲区会自动的扩大。net_buffer_length参数的最大值能够设置到1M。须要注意的是:在session会话级别中,这个变量是只读的。

       read_buffer_size = 256K 
    进行顺序扫描的MyISAM表的 每一个线程,都为它扫描的每一个表分配一个指定大小的缓冲区。若是须要作不少的顺序扫描,你可能会增大这个值,默认值为131072(128K)。这个变量的值应该是4KB的倍数。若是它被设置为不是4KB的倍数,它的值将被舍入为4KB的最近倍数。        

     该参数在如下状况时适用于全部的搜索引擎:
  • 缓存索引在一个临时文件而不是临时表,使用ORDER BY进行行排序时。
    html

  • 进行分区批量插入操做时。mysql

  • 对于嵌套查询缓存结果算法

   若是使用 另一个存储引擎,须要为MEMORY表肯定内存块大小 read_buffer_size 最大容许 设置为 2GB

   read_rnd_buffer_size = 512K 
   此变量用于范围读取优化,包括MyISAM表以及任何存储引擎当从一个有排序操做的MyISAM表的一个关键分拣操做中读取行经过该缓冲区读取,以免磁盘寻道。设置这个值为较大的值能够显著的提升ORDER BY操做的性能, 然而,这是分配给每个客户端的缓冲区,因此不该该在全局级别将其设置为一个较大的值。相反,只有在须要进行大量查询操做的客户端才建议在session会话级别增大这个变量值。read_rnd_buffer_size最大容许设置为2GB

   myisam_sort_buffer_size = 8M    
    表示在REPAIR TABLE上进行MyISAM索引排序时,或经过CREATE INDEX、ALTER TABLE建立索引时,分配的缓冲区大小。相应的,对于InnoDB引擎,有InnoDB_sort_buffer_size的设置。


   query_cache_size= 8M         
    表示分配给高速缓存查询结果的内存量默认状况下查询缓存是禁用的。这是经过使用默认的query_cache_size为 1M,query_cache_type为0(为0表示不启用查询缓存)使用的,这样作会显著下降开销,由于若是你设置了query_cache_size为0,你也须要在启动时设置query_cache_type为0。


    容许设置的值为1024的倍数,其余设置的值会四舍五入到最近的那个值。 须要 注意的是,即便query_cache_type设置为0,query_cache_size字节的内存也会被默认的分配。

    查询缓存须要一个最小大小约40 kb的分配结构(具体的值取决于系统结构)。若是设置的query_cache_size过小,还可能会产生一些问题。

    query_cache_type的值有0、一、2三种,0表示不进行任何查询缓存;1表示 缓存全部可缓存的查询结果除了那些以SELECT SQL_NO_CACHE开头的查询;2表示只缓存以SELECT SQL_CACHE开头的查询结果。mysql官方doc建议设置为2。

   thread_cache_size = 20
    表示服务器将会缓存重用的线程数量,当一个客户端断开链接,若是缓存中线程的数量小于设置的thread_cache_size,那么这个客户端的线程会变放入到缓存中。请求的线程若是可能的话,会从高速缓存中去的线程,当缓存为空时,才会建立新的线程。若是系统中存在许多新的链接的话,增长这个变量值能够提升性能。一般状况下,若是你的代码中很好的作了线程实现,这种性能改进并不显著。然而,若是你的服务器每秒有数百个链接,你一般应该设置thread_cache_size足够高,大多数新链接都会使用缓存的线程。经过比较这个变量与Connections(表示尝试链接到Mysql服务器的数量(不管是否链接成功))和Threads_created(表示处理connection链接所建立的线程的数量)状态变量之间的区别,你能够看到线程缓存的高效。

    这个变量的默认值是根据如下公式计算的,封顶为100:8 + (max_connections / 100),可是在嵌入式服务器(libmysqld)这个变量是没有效果的,在MySQL 5.7.2版本以后,这个参数也再也不可见。

   log-bin=mysql-bin    
    表示启用二进制日志记录,服务器记录了全部改变数据语句的二进制日志,用于备份和复制。


   binlog_format=mixed    以前 Mysql中事务隔离级别与binlog_format的一点理解中学习,这里再也不赘述。         未完待续...     
相关文章
相关标签/搜索