• MySQL 优化 (四)


    参数优化

    innodb_log_buffer_size

    此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,对于较大的事务,可以增大缓存大小。
    innodb_log_buffer_size=128M
    
    设定依据:
    1、大事务: 存储过程调用 CALL
    2、多事务
    

    innodb_log_file_size = 100M (重要)

    设置 ib_logfile0  ib_logfile1 
    此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能.
    innodb_log_file_size = 100M
    

    innodb_log_files_in_group = 3 (重要)

    为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
    

    read_buffer_size = 1M

    MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql 会为它分配一段内存缓冲区。如果对表的顺序扫描请求非常频繁,
    并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和 sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
    

    read_rnd_buffer_size = 1M

    MySql的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
    注:顺序读是指根据索引的叶节点数据就能顺序地读取所需要的行数据。随机读是指一般需要根据辅助索引叶节点中的主键寻找实际行数据,而辅助索引和主键所在的数据段不同,因此访问方式是随机的。
    

    bulk_insert_buffer_size = 8M

    批量插入数据缓存大小,可以有效提高插入效率,默认为8M
    

    binary log (重要)

    log-bin=/data/mysql-bin
    binlog_cache_size = 2M //为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存, 提高记录bin-log的效率。没有什么大事务,dml也不是很频繁的情况下可以设置小一点,如果事务大而且多,dml操作也频繁,则可以适当的调大一点。前者建议是 1M,后者建议是:即 2-4M
    max_binlog_cache_size = 8M //表示的是binlog 能够使用的最大cache 内存大小
    max_binlog_size= 512M //指定binlog日志文件的大小,如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。你不能将该变量设置为大于1GB或小于4096字节。默认值是1GB。在导入大容量的sql文件时,建议关闭sql_log_bin,否则硬盘扛不住,而且建议定期做删除。
    expire_logs_days = 7 //定义了mysql清除过期日志的时间。二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。
    log-bin=/data/mysql-bin
    binlog_format=row 
    sync_binlog=1
    双1标准(基于安全的控制):
    sync_binlog=1   // 什么时候刷新 binlog 到磁盘,每次事务commit
    innodb_flush_log_at_trx_commit=1
    set sql_log_bin=0;
    show status like 'com_%';
    

    安全参数 (重要)

    Innodb_flush_method=(O_DIRECT, fsync) 
    1、fsync:
    (1)在数据页需要持久化时,首先将数据写入OS buffer中,然后由os决定什么时候写入磁盘
    (2)在redo buffuer需要持久化时,首先将数据写入OS buffer中,然后由os决定什么时候写入磁盘
    但,如果innodb_flush_log_at_trx_commit=1的话,日志还是直接每次commit直接写入磁盘
    2、 Innodb_flush_method=O_DIRECT
    (1)在数据页需要持久化时,直接写入磁盘
    (2)在redo buffuer需要持久化时,首先将数据写入OS buffer中,然后由os决定什么时候写入磁盘
    但,如果innodb_flush_log_at_trx_commit=1的话,日志还是直接每次commit直接写入磁盘
    
    最安全模式:
    innodb_flush_log_at_trx_commit=1
    innodb_flush_method=O_DIRECT
    最高性能模式:
    innodb_flush_log_at_trx_commit=0
    innodb_flush_method=fsync
            
    一般情况下,我们更偏向于安全。 
    “双一标准”
    innodb_flush_log_at_trx_commit=1        ***************
    sync_binlog=1                           ***************
    innodb_flush_method=O_DIRECT
    

    参数优化结果

    [mysqld]
    basedir=/data/mysql
    datadir=/data/mysql/data
    socket=/tmp/mysql.sock
    log-error=/var/log/mysql.log
    log_bin=/data/binlog/mysql-bin
    binlog_format=row
    skip-name-resolve
    server-id=52
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    relay_log_purge=0
    max_connections=1024
    back_log=128
    wait_timeout=60
    interactive_timeout=7200
    key_buffer_size=16M
    query_cache_size=64M
    query_cache_type=1
    query_cache_limit=50M
    max_connect_errors=20
    sort_buffer_size=2M
    max_allowed_packet=32M
    join_buffer_size=2M
    thread_cache_size=200
    innodb_buffer_pool_size=1024M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=32M
    innodb_log_file_size=128M
    innodb_log_files_in_group=3
    binlog_cache_size=2M
    max_binlog_cache_size=8M
    max_binlog_size=512M
    expire_logs_days=7
    read_buffer_size=2M
    read_rnd_buffer_size=2M
    bulk_insert_buffer_size=8M
    [client]
    socket=/tmp/mysql.sock  
    
  • 相关阅读:
    0302 随想
    1231递归下降语法分析程序设计
    《构建之法》1、2、3章读后感
    复利计算总结
    操作系统实验0
    学习进度条
    0302思考并回答一些问题
    评论
    c语言文法
    词法分析
  • 原文地址:https://www.cnblogs.com/klvchen/p/12074989.html
Copyright © 2020-2023  润新知