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

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

最近一直在进行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进行行排序时。
  • 进行分区批量插入操作时。
  • 对于嵌套查询缓存结果。

如果使用
另外一个存储引擎,需要为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、1、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的一点理解中学习,这里不再赘述。

未完待续...

时间: 2024-08-29 00:14:14

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

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

原文地址:Mysql一些重要配置参数的学习与整理(二) 上一篇,Mysql一些重要配置参数的学习与整理(一)中,我们了解和学习了mysql配置中的一些重要参数,今天继续进行学习,mysql的配置参数很多,不可能做到面面俱到,这里的总结和整理只是针对于现实生产环境中用到的一些配置参数的学习,接下来,开始本篇的学习.    innodb_flush_log_at_trx_commit = 2        这个变量的官方定义是:Controls the balance between strict

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

原文地址:Mysql一些重要配置参数的学习与整理(三) 之前的Mysql一些重要配置参数的学习与整理(一)和Mysql一些重要配置参数的学习与整理(二)中,对于线上mysql服务器的一些配置参数进行了学习,不过参阅官方doc后对其中的一些参数的配置的理解不是很清晰,今天与同事进行了交流和沟通,都一些重要的配置交换了意见,本篇就对其中的一些疑问点,整理一下心得.     skip-external-locking作用     在Mysql Linux 的发行版中,默认存在一行skip-extern

MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)

1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端.参数默认值:28800秒(8小时) (2)wait_timeout:参数含义:服务器关闭非交互连接之前等待活动的秒数.在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_

Hadoop学习之第五章节:Mysql的安装配置,命令学习

一.关于MySQL MySQL是最流行的开源SQL数据库管理系统,它由MySQL AB开发.发布和支持.MySQL AB是一家由MySQL开发人员创建的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司.MySQL是MySQL AB的注册商标. MySQL是一个快速的.多线程.多用户和健壮的SQL数据库服务器.MySQL服务器支持关键任务.重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去. MySQL的官方发音是"My Ess

mysql数据库同步配置参数及常见问题

一. 配置参数说明(基本知识): #服务器ID, 每台服务器的ID不能设为相同的数. server-id=1 #启用从库日志,这样可以进行链式复制 log-slave-updates #从库是否只读,0表示可读写,1表示只读 read-only=1 #只复制某个表 replicate-do-table=tablename #只复制某些表(可用匹配符) replicate-wild-do-table=tablename% #只复制某个库 replicate-do-db=dbname #只复制某些库

linux系统下mysql配置优化初学习入门

学习mysql 一段时间了,在mysql配置优化方面做一下总结,mysql优化要考虑到多方面,多因素.与服务器的硬件,当前运行的环境都息息相关.下面来说一下mysql的配置优化: [client] port = 3306 socket = /tmp/mysql.sock    [mysqld] port = 3306 socket = /tmp/mysql.sock   basedir = /usr/local/mysql datadir = /data/mysql pid-file = /da

【原创】MySQL性能优化-I/O相关配置参数

本文介绍InnoDB和MyISAM两种存储引擎的I/O相关参数配置. 1.InnoDB  I/O相关配置 Innodb是一种事务型的存储引擎,为了减少提交事务时产生的io开销,innodb采用了写日志的方式,也就是在事务提交的时候会先写入事务日志中 ,而不是每次都把修改或者数据刷新到数据文件中,这样做是为了提高io的性能,因为事务的修改,使数据和索引文件通常都会映射到表空间随机的位置,所以刷新数据变更到数据文件会产生大量随机io,而记录日志是顺序io,一旦事务日志安全的写到磁盘中,数据就算是持久

MySQL性能优化-内存参数配置

Mysql对于内存的使用,可以分为两类,一类是我们无法通过配置参数来配置的,如Mysql服务器运行.解析.查询以及内部管理所消耗的内存:另一类如缓冲池所用的内存等. Mysql内存参数的配置及重要,设置不当很有可能会造成很大的性能问题甚至是服务器宕机,内存相关参数的配置需要考虑以下两点: (1)确定可以使用的内存上限: (2)确定Mysql每个连接使用的内存: 在Mysql的体系中(如下图所示),简单来说可以分为两层,第一层代表各种可以用过Mysql连接协议连接到Mysql的客户端,例如PHP.

通过查看mysql 配置参数、状态来优化你的mysql

mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,flush status 来查看mysql的各种性能指标. 2. 直接使用mysqladmin查看其性能指标,例如: UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T" mysqladmin两个参数,status,extended-st