美文网首页
Mysql参数配置

Mysql参数配置

作者: 青衣敖王侯 | 来源:发表于2019-07-19 21:43 被阅读0次

    内存相关配置:

    • 为每个线程分配的内存:
      sort_buffer_size 排序缓冲
      join_buffer_size 参与join的每一个表都需要一个join buffer
      read_buffer_size 是MySQL读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区
      read_rnd_buffer_size 是MySQL的随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区

    • 为缓存池分配内存:
      innodb_buffer_pool_size
      总内存 -(每个线程所需要的内存*连接数)- 系统保留内存)
      key_buffer_size(MyIsam使用的参数)
      可以通过select sum(index_length) from information_schema.tables where engine='myisam'

    IO相关参数:
    为了减少提交事务时所产生的IO开销,Innodb使用了预写日志的方式,事务提交的时候会写到事务日志中,而不是每次把修改数据刷新到数据文件中,这样做可以提高IO的性能,因为事务的修改是数据和索引文件通常会映射到表空间的随机位置,所以刷新数据变更到数据文件会产生大量的随机IO,而记录日志只是顺序IO,所以相比于刷新脏数据到数据文件系统来说,记录事务日志的方法要快很多。一旦事务日志安全写入到磁盘中,事务就算持久化了,即使变更还没有写入到数据文件,服务器发生了宕机,我们可以通过事务日志恢复已经提交的事务。
    innodb_log_file_size控制了单个事务日志的大小
    innodb_log_files_in_group控制了事务日志的个数
    事务日志总大小=innodb_log_file_size*innodb_log_files_in_group
    事务日志不是每次提交都写入到文件中,而是写入到缓冲区中,innodb_log_buffer_size是缓冲区大小,这个值不必设置的太大,因为一般情况下,1s钟就会刷新一次,设置32MB到128MB就可以了。刷新频率如何设置?可以通过Innodb_flush_log_at_trx_commit来控制,0表示每秒进行一次log写入cache,并flush log到磁盘。1(默认)表示在每次事务提交执行log写入cache,并flush log到磁盘2(建议):每次事务提交,执行log数据写入到cache,每秒执行一次flush log到磁盘。
    Innodb I/O相关配置:
    Innodb_flush_method=O_DIRECT 确定日志及数据文件如何write、flush
    O_DIRECT打开文件,则读/写操作都会跳过OS cache,直接在device(disk)上读/写。因为没有了OS cache,所以会O_DIRECT降低文件的顺序读写的效率



    Innodb_file_per_table=1
    Innodb_doublewrite=1
    MySQL默认数据页大小是16K,而我们通常文件系统数据页大小是4K。正是由于这二个原因导致了仅仅依靠redo log在某些情况下是不能把有问题的page修复的。假设数据库page size和文件系统一致,都是4K。那么数据库从内存中写回1个page到磁盘时,发生宕机,这1个page要么写回成功,要么写回不成功,如果不成功,重启的时候通过redo log,重写一次就可以了。当现在的问题是数据库page size是16K,也就是说我写1个page到磁盘,需要4次IO操作,假如我前2次IO操作成功,而后2次IO操作突然宕机,那么这个page在磁盘里就出现数据不一致了
    MyISAM I/O相关配置
    delay_key_write
    OFF:每次写操作后刷新键缓冲中的脏块到磁盘
    ON:只对在键表时指定了delay_key_write选项的表使用延迟刷新
    ALL:对所有MYISAM表都使用延迟键写入

    Mysql服务器参数

    • sync_binlog 控制mysql如何向磁盘刷新binlog
    • tmp_table_size 和 max_heap_table_size控制内存临时表大小
    • max_connections控制允许的最大连接数

    数据库设计对性能的影响

    • 过分的反范式化为表建立太多的列
    • 过分的范式化造成太多的表关联
    • 在OLTP环境中使用不恰当的分区表
    • 使用外键保证数据的完整性

    相关文章

      网友评论

          本文标题:Mysql参数配置

          本文链接:https://www.haomeiwen.com/subject/zzhhlctx.html