内存配置相关参数

  mysql内存分配需要考虑到操作系统需要使用的内存,其他应用程序所要使用的内存,mysql的会话数以及每个会话使用的内存,然后就是操作系统实例所使用的内存。生产环境的mysql往往都是一个实例独占一个服务,因此,mysql实例需要考虑 mysql 的会话数,会话内存以及实例内存。

  会话内存参数会为每一个连接的会话分配对应大小的内存,相关的主要参数有如下几个:

  sort_buffer_size:会话发送的语句需要进行排序时就会一次性分配对应的大小的缓存

  join_buffer_size:应用程序经常会出现一些两表(或多表)join 的操作需求,Mysql 在完成某些 join 需求的时候(all / index join),为了减少参与 join 的“被驱动表”的读取次数以提高性能,需要使用到 join buffer 来协助完成 join 操作。当 join buffer 太小,mysql 不会将该 buffer 存入磁盘文件,而是先将 join buffer 中的结果集与需要 join 的表进行 join 操作,然后清空 join buffer 中的数据,继续将剩余的结果集写入此 buffer 中,如此往复,会造成驱动表需要被多次读取,成倍增加 IO 访问,降低效率。

  read_buffer_size:mysql读入缓冲区的大小。对表进行顺序扫描的请求将分配一个读入缓冲区,mysql 会为他分配一段内存缓冲区。read_buffer_size 变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行的太慢,可以通过增加该变量以及内存缓冲区大小提高其性能。

  read_rnd_buffer_size:mysql 的随机读取缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,mysql 会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但 mysql 会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。

  Innodb_buffer_size:InnoDB 使用该参数指定大小的内存来缓冲数据和索引,这个是 InnoDB引擎中影响性能最大的参数

  key_buffer_size:myisam 决定索引处理的速度,尤其是索引读的速度。默认是 16M,通过检查状态值 key_read_requests(从缓存读取索引的请求次数) 和 key_reads(从磁盘读取索引请求次数),可以知道 key_buffer_size 设置是否合理。比例 key_reads / key_read_requests 应该尽可能的低,至少是 1:100,1:1000 更好(SHOW STATUS LIKE 'key_read%')。key_buffer_size 只对 MyIsam 表起作用。即使你不使用 MyIsam 表,但是内部的临时磁盘表是 MyIsam 表,也要使用该值。设置该值大小可以通过如下语句获取。

  select sum(index_length) from information_schema.tables where engine='myisam';

IO相关配置参数

  innodb 相关参数

  innodb_log_file_size:这个值设置 redo log 文件的大小

  innodb_log_files_in_group:这个值设置 redo log 文件的个数

  innodb_log_buffer_size:redo log 缓存池的大小

  innodb_flush_log_at_trx_commit:这个参数设置了 mysql redo log 刷新到日志文件的方式。该参数设置有以下三个值:

  0:每隔一秒 mysql 将 redo log buffer 中的数据刷新到操作系统 cache中,并刷新到磁盘中,但是事务提交并不会引起任何操作。这样会至少丢失1秒钟的数据。

  1:在每次事务提交时执行 log 写入 cache,并将数据刷新到磁盘(系统默认)

  2:事务提交时会将数据刷新到操作系统的cache中,但是并不会引起数据刷新到磁盘中,该模式下,mysql会每秒执行一次刷新到磁盘操作,这样在系统崩溃时有可能造成 1s 的数据丢失。

  当设置为0,该模式速度最快,但是不太安全,mysqld 进程崩溃会导致上一秒所有事务数据的丢失。设置为1,该模式最安全,但也是最慢的一种方式。在mysqld服务器崩溃或者服务器主机 crash的情况下,binary log只有可能丢失最多一个语句或者一个事务。设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒数据才会丢失(介于0,1之间)

  innodb_flush_method:这个参数控制着 innodb 数据文件及 redo log的打开、刷写模式。有三个值:fdatasync(默认,调用 fsync() 去刷数据文件redo log的buffer)、O_DSYNC、O_DIRECT

  innodb_double_write:双写缓存,用来缓存保护数据避免写数据块时造成数据块损坏

  MyIsam相关参数

  delay_key_write:指在表关闭之前,将对表的 update 操作只更新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存

安全相关配置参数

  expire_log_days:指定二进制日志保留的天数

  skip_name_resolve:禁用DNS查找

  read_only:将数据库设置为只读模式

  skip_slave_start:mysql启动后不会启动主从复制

其他配置

  sync_binlog:同步二进制日志的频率,设置0的表示 mysql 不控制 bin log的刷新, bin log 日志刷新到磁盘完全依赖于文件的操作系统,这时候的性能是最好的,但是风险也是最大的。当设置为 n 时,指每个 N 次操作时进行磁盘同步,这里将磁盘设置为1是最安全的设置,但是刷新的频率过高对 IO 的影响也非常大。

  tmp_table_size:规定了内部内存临时表的最大值,每个线程都要分配,如果内存临时表超出了限制,mysql 就会自动地把它转化为基于磁盘的 MyIsam表,存储在指定的 tmpdir 目录下

  max_heap_table_size:这个变量定义了用户可以创建的内存表(memory table)的大小,这个值用来计算内存表的最大行数值。这个变量支持动态改变,即 set @max_heap_table_size = xxx,但是对于已经存在的内存表就没有什么用,除非这个表被重新创建或者修改或者 truncate table,服务重启也会设置已经存在的内存表为全局 max_heap_table_size 的值。这个参数和 tmp_table_size 一起限制了内部内存表的大小

  max_connections:设置 mysql 会话连接的最大值

Mysql优化-典型的服务器配置的更多相关文章

  1. MySQL优化面试

    原则:尽量使用整型表示字符串 存储IP INET_ATON(str),address to number INET_NTOA(number),number to address MySQL内部的枚举类 ...

  2. MySQL优化/面试,看这一篇就够了

    原文链接:http://www.zhenganwen.top/articles/2018/12/25/1565048860202.html 作者:Anwen~链接:https://www.nowcod ...

  3. mysql 优化知识点

    附录: https://www.nowcoder.com/discuss/150059?type=0&order=0&pos=13&page=0 本文概要 概述 为什么要优化 ...

  4. 3万字总结,Mysql优化之精髓

    本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降. ...

  5. MySQL优化聊两句

    原文地址:http://www.cnblogs.com/verrion/p/mysql_optimised.html MySQL优化聊两句 MySQL不多介绍,今天聊两句该如何优化以及从哪些方面入手, ...

  6. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

  7. MySQL优化—工欲善其事,必先利其器之EXPLAIN(转)

    最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器.最近我就打算了解下几个优化MySQL中经常用到的工具.今天就简单介绍下EXPLAIN. 内容导航 id select_t ...

  8. MySQL优化—工欲善其事,必先利其器之EXPLAIN

    最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器.最近我就打算了解下几个优化MySQL中经常用到的工具.今天就简单介绍下EXPLAIN. 内容导航 id select_t ...

  9. MySQL优化技巧之五(mysql查询性能优化)

    对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...

随机推荐

  1. Spark on YARN--WordCount、TopK

    原文地址:http://blog.csdn.net/cklsoft/article/details/25568621 1.首先利用http://dongxicheng.org/framework-on ...

  2. Javascript基础二(程序的三大结构)

    程序的三大结构: 顺序结构,选择结构,循环结构 程序的单分支结构-if语句:       当条件判断为真true时,执行花括号内的语句,如果条件为假false,跳过花括号内的语句       if(条 ...

  3. AD库转换为KiCAD库的方法

    AD库转换为KiCAD库的方法 参照博主另外一篇文档: AD转换为KiCAD的方法,点击此处

  4. Linux上的VirtualBox如何使用USB

    问题: VirtualBox设置中已经启用了"USB2.0(EHCI)控制器"选项,但是虚拟机中始终没有USB设备,右下角的状态也显示没有连接任何USB设备,看起来像是Virtua ...

  5. 界面设计微信小程序

    上一个周期将微信小程序的程序编完了,虽然还有很多需要修改的地方,大体已经完成.剩下的边角料以后再弄 这个周期来学习一下微信小程序的设计....好吧. 首先还是需要看一下微信的设计指南的.地址 http ...

  6. CICS FILE OPEN

    CEMT I CECD V FILE() GROUP() CEDA check error log in JESYSMSG FILE OPEN/CLOSE STATUS CICS ACTION res ...

  7. 模数循环节——cf547A

    campjls讲过模数循环节的问题,今天做cf才做到这类题 h1->a1的长度为len1,a1->a1的长度为cir1 h2->a2的长度为len2,a2->a2的长度为cir ...

  8. Minimum Snap轨迹规划详解(1)轨迹规划

    一. 轨迹规划是什么? 在机器人导航过程中,如何控制机器人从A点移动到B点,通常称之为运动规划.运动规划一般又分为两步: 1.路径规划:在地图(栅格地图.四\八叉树.RRT地图等)中搜索一条从A点到B ...

  9. 关于Web前端密码加密是否有意义的总结

    关于Web前端密码加密是否有意义的总结    :    https://blog.csdn.net/hla199106/article/details/45114801 个人:加密涉及到的是前后端的数 ...

  10. jmeter基本问题

    jmetet加压的时候不用图像界面(GUI),直接在命令行加压(命令行生成一个report-命令行参数),不做断言,不加监听器--不然会很卡: 进入就meter命令行: 后置处理器可以从HTML页面拿 ...