知识点十四:MySQL 内存的优化(31)

  一、优化MySQL SERVER

    7组后台进程:

      masterthread:主要负责将脏缓存页刷新到数据文件,执行purge操作,触发检查点,合并插入缓冲区等。

      insertbuffer thread:主要负责插入缓冲区的合并操作。

      readthread:负责数据库读取操作,可配置多个线程

      writethread:负责数据库写操作,可配置多个线程。

      logthread:用于将重做日志刷新到logfile中。

      purgethread:MySQL5.5之后用于单独的purge thread 执行purge操作。

      lockthread:负责锁控制和死锁检测。

      错误监控线程:主要负责错误监控和错误处理。

  二、内存管理及优化

    1、内存管理原则

      在调整MySQL内存分配时,要注意以下几点。

      将尽量多的内存分配给MySQL做缓存,但是要给操作系统和其他程序的运行预留足够的内存,否则如果产生SWAP页交换,将严重影响系统性能。

      MyISAM的数据文件读取依赖操作系统自身IO缓存,因此,如果有MyISAM表,就要预留更多的内存给操作系统做IO缓存。

      排序区、连接区等缓存是分配给每个数据库会话(seesion)专用的,其默认值的设置要根据最大连接数合理分配,如果设置太大,不但浪费内存资源,而且在并发连接较高时会导致物理内存消耗尽。

    2、MyISAM内存优化

        MyISAM存储引擎使用 key buffer缓存索引块,以加速MyISAM索引的读写速度。对于MyISAM变的数据库块,MySQL没有铁别的缓存机制,完全依赖操作系统的IO缓存。

      key_buffer_size设置:

        key_buffer_size决定MyISAM索引块缓存区的大小,直接影响到MyISAM表的存取效率。可以在MySQL参数文件中设置key_buffer_size的值,对于一般MyISAM数据库,建议至少将1/4可用内存分配给key_buffer_size。

          在my.ini设置MyISAM的key_buffer_size:
          key_buffer_size=2G

        我们可以通过检查key_read_requests、key_reads、key_write_requests和key_writes等MySQL状态来评估索引缓存的效率。一般来说,索引块物理读比率key_reads/key_read_requests应该小于0.01。

          索引块写比率key_wirte/key_write_requests也应尽可能小。但是这与应用特点有关,对于更新和删除操作特别多的应用,key_writes/key_wirte_requests可能会接近1,

          而对于 更新很多行记录的应用,key_wirtes/key_write_requests就会比较小。

        除了通过索引块的物理读写比率衡量key_buffer的效率外,我们也可以通过评估key buffer的使用率来判断索引缓存设置是否合理。key buffer使用率计算公式如下:

          1-((key_blocks_unused*key_cache_block_size)/key_buffer_size)

        一般来说,使用率在80%左右合适,大于80%可能因索引还粗不足而导致性能下降,小于80%会导致内存浪费

        设置key_buffer_size:

         --设置key_buffer_size:
            set global key_buffer_size=8088608;
        --永久设置
           vim /etc/my.sql
            key_buffer_size=8088608         --查看key_buffer_size
            show variables like'key_buffer_size';
            show global status like 'key_%';

      调整read_buffer_size和read_rnd_buffer_size

        如果需要经常扫描MyISAM表,可以通过增大read_buffer_size的值来改善性能。但是注意的是read_buffer_size是每个session独占的,如果默认设置太大就会造成资源浪费,甚至导致物理内存耗尽。

        对于需要排序的MyISAM表查询,如果有ORDER BY子句的SQL语句,适当增大read_rnd_buffer_size的值,可以改善此类的SQL性能。但是要注意是read_rnd_buffer_size是每个SESSION独占的。如果默认值设置过大,就会造成内存的浪费。

    3、InnoDB内存优化

      InnoDB用一块内存块做IO缓存池,该缓存池不仅用来缓存InnoDB的索引块。而且也用来缓存InnoDB的数据块。

      在内部,InnoDB缓存池逻辑上由free list、flush list、LRU list组成。顾名思义,free list是空闲缓存块列表,flush list是需要缓新到磁盘的缓存块列表,

        而LRU list是InnoDB正在使用的缓存块,它是InnoDB buffer pool的核心。InnoDB使用LRU算法与MyISAM的‘中点插入策略’LRU算法类似。

        设置innodb_buffer_pool_size:

          该变量决定了InnoDB存储引擎表数据和索引数据的最大缓存区大小。

        设置innodb_log_buffer_size:

        该变量决定了InnoDB重做日志的缓存的大小,对于可能产生大量更新记录的大事务,增加innodb_log_buffer_size的大小,可以避免InnoDB在事务提交前就执行不必要的日志写入磁盘操作。

   三、调整MySQL并发相关的参数

        调整max_connections,提高并发连接

        调整thread_cache_size,加快链接数据库的速度,MySQL会缓存一定数量的客户服务线程以备重用,通过参数thread_cache_size可以控制MySQL缓存客户服务线程的数量。

        调整innodb_lock_wait_timeout:控制innoDB事务等待行锁的时间,对于快速处理的SQL语句,可以将行锁的等待超时间调小,以避免事务长时间挂起,对于后台运行的批处理操作,可以将行锁等待超时时间调大,以避免发生大的回滚操作。

MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)的更多相关文章

  1. (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)

    目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...

  2. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 基于【 MySql 】二 || mysql详细学习笔记

    mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...

  4. Mysql事务学习笔记

    Mysql事务学习笔记 1.事务概述 事务是数据库的执行单元,它包含了一条或多条sql语句,进行的操作是要么全部执行,要么全部都不执行. 2.事务执行命令 语法格式: start transactio ...

  5. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  8. SQLMAP学习笔记2 Mysql数据库注入

    SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...

  9. ref:学习笔记 UpdateXml() MYSQL显错注入

    ref:https://www.cnblogs.com/MiWhite/p/6228491.html 学习笔记 UpdateXml() MYSQL显错注入 在学习之前,需要先了解 UpdateXml( ...

随机推荐

  1. IntelliJ IDEA 常用快捷键总结

    个人使用频率的高低排序: Alt+enter               代码提示 Alt+7                查看类的方法 Alt+insert        生成get和set方法 ...

  2. Java -----transient 和static

    越来越喜欢深究java基础了,讲讲 transient  和static 对序列化的影响.废话少说,直接上代码就可以了 package serializable; import java.io.Ser ...

  3. 谈Objective-C block的实现(转)

    前言 这里有关于block的5道测试题,建议你阅读本文之前先做一下测试. 先介绍一下什么是闭包.在wikipedia上,闭包的定义)是: In programming languages, a clo ...

  4. 三维场景如何嵌入到PPT中展示?

    今天要跟大家一起交流的大体内容如标题所示,日常生活中,ppt已经成为人们工作学习生活中不可或缺的工具之一,那么三维场景是如何在ppt中加载展示的呢?请大家慢慢往下看. 1.创建命令按钮和web bro ...

  5. OpenCV学习教程入门篇<一、介绍>

    OpenCV,是Inter公司开发的免费开源专门因为图像处理和机器视觉的C/C++库,英文全称是Open Source Computer Vision. 1. 可视化语言Matlab与OpenCV都能 ...

  6. C# Main(string[] args)方法参数

    Main 方法是 C# 控制台应用程序或窗口应用程序的入口点,以下是各种情况下方法参数的输入方式: 1.通过vs启动,需要在“项目属性-调试-启动选项-命令行参数”中配置参数,格式为:参数一 参数二 ...

  7. 工作总结 mvc 调页面传参数 参数值会一直保存 在这个页面上的

    意思是 两个页面均可以 获取到id 和 goodsType 都可以获取 id goodsType post 的 还多带点属性值 form data 页面上带过去的 (新增 编辑)

  8. CUDA vs GPGPU

    http://www.kuqin.com/hardware/20080830/15726.html 一 在硬件和软件之间选择     “计算机软件和硬件的逻辑等价性”是计算机组成原理中一个非常重要的理 ...

  9. Cocos2d-x 3.0的启动流程

    Cocos2d-x 3.0变动非常大,包含启动的方式,我看了下对android的启动总结例如以下: Java方面:     AppActivity继承Cocos2dxActivity     Coco ...

  10. java开发之随笔记录

    1.java 保留两位小数 DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(1 ...