zoukankan      html  css  js  c++  java
  • innodb的innodb_buffer_pool_size和MyISAM的key_buffer_size

    一. key_buffer_size 对MyISAM表来说非常重要。

    如果只是使用MyISAM表,可以把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载 -- 记住,MyISAM表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的 key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。

    key_buffer_size = 2000M

    或者

    key_buffer_size = 1G

    二. innodb_buffer_pool_size 对Innodb表来说非常重要。

    Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 -- 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了。

    innodb_buffer_pool_size = 8000M

    或者

    innodb_buffer_pool_size = 15G

    其他牛人的解释

    #InnoDB存储数据字典、内部数据结构的缓冲池,16MB 已经足够大了。

    innodb_additional_mem_pool_size = 16M

    #InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等

    #如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的50%

    #如果是非专用DB服务器,可以先尝试设置成内存的1/4,如果有问题再调整

    #默认值是8M,非常坑X,这也是导致很多人觉得InnoDB不如MyISAM好用的缘故

    innodb_buffer_pool_size = 4G

    #InnoDB共享表空间初始化大小,默认是 10MB,也非常坑X,改成 1GB,并且自动扩展

    innodb_data_file_path = ibdata1:1G:autoextend

    #如果不了解本选项,建议设置为1,能较好保护数据可靠性,对性能有一定影响,但可控

    innodb_flush_log_at_trx_commit = 1

    #抱 怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据

    #InnoDB的log buffer,通常设置为 64MB 就足够了

    innodb_log_buffer_size = 64M

    #InnoDB redo log大小,通常设置256MB 就足够了

    innodb_log_file_size = 256M

    #InnoDB redo log文件组,通常设置为 2 就足够了

    innodb_log_files_in_group = 2

    #启用InnoDB的独立表空间模式,便于管理

    innodb_file_per_table = 1

    #启用InnoDB的status file,便于管理员查看以及监控等

    innodb_status_file = 1

    #设置事务隔离级别为 READ-COMMITED,提高事务效率,通常都满足事务一致性要求

    transaction_isolation = READ-COMMITTED 

    [mysqld]

    #禁止开启自动事务

    init_connect='SET autocommit=0'

    innodb_buffer_pool_size = 4G

    key_buffer_size = 1G

    user            = mysql

    socket          = /var/run/mysqld/mysqld.sock

    port            = 3306

    basedir         = /usr

    datadir         = /var/lib/mysql

    tmpdir          = /tmp

    skip-external-locking

    #bind-address            = 127.0.0.1

    #

    # * Fine Tuning

    #

    key_buffer              = 16M

    max_allowed_packet      = 16M

    thread_stack            = 192K

    thread_cache_size       = 8

    # This replaces the startup script and checks MyISAM tables if needed

    # the first time they are touched

    myisam-recover         = BACKUP

    #max_connections        = 100

    #table_cache            = 64

    #thread_concurrency     = 10

    # * Query Cache Configuration

    query_cache_limit       = 1M

    query_cache_size        = 16M

    #general_log_file        = /var/log/mysql/mysql.log

    #general_log             = 1

    log_error                = /var/log/mysql/error.log

    # Here you can see queries with especially long duration

    log_slow_queries        = /var/log/mysql/mysql-slow.log

    long_query_time = 0.05

    #log-queries-not-using-indexes

    expire_logs_days        = 10

    max_binlog_size         = 100M

    # * InnoDB

    # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

    # Read the manual for more InnoDB related options. There are many!

    # chroot = /var/lib/mysql/

    ——————————————————————————————————————————————————

    innodb_pool_buffer_size对innodb性能的影响

    innodb_pool_buffer_size是影响innodb性能最重要的参数,指的是innodb缓冲的大小。一般来说,它越大Innodb的吞吐量(单位: tps)就越高。所以,在不影响服务器上其他程序正常工作的情况下,这个值总是越大越好。

    但是当innodb做crash recovery的时候,大的pool buffer会让recovery奇慢无比。 一种折衷的解决方法就是:启动的时候用小的pool buffer,恢复完成以后改用大的pool bufer。

    为什么小的pool buffer能加快恢复的速度? 
    用Oprofile跟踪恢复的过程发现,Flush_List中页的插入排序耗掉了大多的时间,大的Pool buffer会让Flush list中的脏页越来越多,而插入排序的时间复杂度是O(N^2)。 相反,小的pool buffer会让flush list的脏page及时flush,这样flush list里面的脏页数目总是不会很大,有新的脏数据按序插入就不会有大的开销。

  • 相关阅读:
    20155222 第二周测试
    2017-2018-1 20155222 《信息安全系统设计基础》第3周学习总结
    20155222 2016-2017-2《Java程序设计》课程总结
    2016-2017-2 20155222 实验五 网络编程与安全
    20155222 2016-2017-2 《Java程序设计》实验三
    20155222 2016-2017-2 《Java程序设计》第10周学习总结
    20155222 2016-2017-2 《Java程序设计》实验二
    20155222 2016-2017-2 《Java程序设计》第9周学习总结
    2017-2018-1 20155228 《信息安全系统设计基础》第二周课堂测试与课后作业
    2017-2018-1 20155228 《信息安全系统设计基础》第一周学习总结
  • 原文地址:https://www.cnblogs.com/zsmynl/p/3602922.html
Copyright © 2011-2022 走看看