MYSQL教程:优化服务器参数设置

2009-02-20 14:43:06  来源:网页教学网 

WebjxCom提示:MySQL服务器为我们提供了丰富的参数,以调整服务器满足不同环境的要求。

MySQL服务器为我们提供了丰富的参数,以调整服务器满足不同环境的要求。下面分别讨论一下这些参数:

本文由网页教学网(http://www.webjx.com)整理发布!转载请注明出处,谢谢!

  • 服务器参数变量的设置。MySQL服务器参数可在服务器启动时设置,在MySQL4.0.3及以后的版本中,有些参数也允许在线设置。在MySQL4.0.2及以后的版本里,可以把一个变量名视为一个选项名来设置。如数据表缓冲区的尺寸由服务器参数talbe_cache来设置。如果需把它设置为128,则可以在命令行里增加

    --table_cache=128
    

    也可在选项文件中设置:

    [mysqld]
    table_cache=128       
    

    在命令行选项中'_'可写'-',变成:

    --table-cache=128     #这种写法更像一个标准选项
    

    还有一种是使用--set-variable或-O选项,如:

    --set-variable=table_cache=128
    or
    -O table_cache=128
    在选项文件中可写成:
    [mysqld]
    set-variable=table_cache=128
    

    服务器参数分为全局级和会话级两个级别。全局级参数将影响整个服务器,会话级参数则只影响某给定客户连接上的工作。如果某个变量同时存在于两个级别,则服务器在客户建立连接时用全局变量的值去初始化相应的会话级参数,一旦客户连接建立起来后,对全局参数所作的修改不会影响到相应的会话级参数当前值。设置全局参数和会话级参数的语句:

    全局级:
    mysql> SET GLOBAL variable = value;
    mysql> SET @@GLOBAL.variable = value;
    会话级:
    mysql> SET SESSION variable = value;
    mysql> SET @@SESSION.variable = value;
    默认不带级别限定符的SET语句修改的参数属会话级,如:
    mysql> SET variable = value;
    mysql> SET @@variable = value;
    可用一条SET语句设置多个参数,参数间用逗号分隔,如:
    SET SESSION variable = value1,value2,value3;
    

    SESSION和LOCAL是同义语,可用LOCAL代替SESSION,如:@@LOCAL

    具备SUPER权限才能设置全局参数,新设置值的效力将持续到该参数被再次修改或服务器退出。设置会话级参数不用特殊的权限,新设置值的效力将持续到该值被再次修改或连接断开。显示参数的语句如下:

    SHOW GLOBAL VARIABLES;
    SHOW GLOBAL VARIABLES LIKE 'TEST';
    SHOW SESSION VARIABLES;
    SHOW SESSION VARIABLES LIKE 'TEST';
    如不带限定符,则返回会话级参数,如会话级参数不存在则返回全局级参数。
    也可用命令行方式显示服务器参数变量,如:
    % mysqladmin variables
    
  • 下面介绍一些MySQL服务器通用的参数变量:

    • back_log,当多个客户同时连接服务器时,客户处理过程需进入一个队列排队等待服务器处理。该值定义服务器等待处理队列长度的最大值,如果站点访问量大,需加大该值。

    • delayed_queue_size,在实际插入数据表前,来自insert delayed语句的数据行会进入一个队列等待服务器处理。该值定义该队列能容纳的数据行的最大个数。当队列满时,会阻塞后续的语句。加大该值能提高insert delayed语句的执行速度。

    • flush_time,自动存盘间隔。如果系统经常死机或重启,把这个变量设置为一个适当的非零值,使MySQL服务器每隔flush_time称去刷新一次数据表缓冲区,将其中的信息写入磁盘。这将导致系统性能下降,但可减少数据表被破坏或丢失数据的概率。在命令行上用--flush选项启动服务器可使数据表在每次修改后被自动存盘。

    • key_buffer_size,用来容纳索引块的缓冲区的长度。加大该值可加快索引创建和修改操作的速度,该索引缓冲区越大,在内存中找到键值的可能性就越大,读盘次数就越少。MySQL3.23前的版本里,该参数叫key_buffer。3.23版本之后,两种叫法都可以。

    • max_allowed_packet,服务器与客户程序之间通信时使用的缓冲区在最大值。MySQL 4版本之前,该最大值可取16MB,MySQL 4版本以后,该值的最大值是1GB。如果客户端与服务器需传送大容量的数据,如BLOB或TEXT值,就要加大该值。客户端也有一个同名的变量,默认是16MB,该值也要加大。客户端的启动命令为:

      % mysql --set-variable=max_allowed_packet=64M
      
    • max_connections,允许同时打开的连接数,如果站点繁忙,需加大该值。

    • table_cache,数据表缓存区的尺寸。加大该值可使服务器能够同时打开更多的数据表,从而减少文件打开/关闭操作的次数。

    注意:加大max_connections和table_cache参数的值,会使服务器占用更多的文件描述符。运行多个服务器可绕过该限制。对一些分配给每个客户的资源变量,设置时不能过大,因为当连接数快速增长时会很快耗尽服务器的资源,造成服务器性能下降。

  • InnoDB处理程序变量:

    • innodb_buffer_pool_size,InnoDB数据库缓冲池的大小,如果有足够的内存,可把该值设置得大些以减少读盘操作。

    • innodb_log_file_size和innodb_log_files_in_group,前者设置日志文件的长度,后者设置日志文件的个数。InnoDB日志文件的总长度是两者的乘积,它的总长度不得超过4GB。

更多

推荐文章