数据库后台线程

默认情况下讲述的InnoDB存储引擎,以后不再重复声明。后台线程有7个——4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程。IO thread的数量由配置文件中的innodb_file_io_threads参数控制,默认为4。4个IO线程分别是insert buffer thread、log thread、read thread、write thread。


在MySQL 5.6.10中,MySQL企业版MySQL的包括线程池,使用服务器插件来实现。在MySQL服务器的默认线程处理模型使用执行每个客户端连接一个线程语句。随着越来越多的客户端连接到服务器和执行语句,整体性能降低。线程池插件的提供旨在减少开销,提高性能的其他线程的处理模式。该插件实现了通过有效地管理语句执行线程的大量客户端连接的提高服务器性能的线程池。

InnoDB Plugin版本开始增加了默认IO thread的数量,默认的read thread和write thread分别增大到了4个,并且不再使用innodb_file_io_threads参数,而是分别使用innodb_read_io_threads和innodb_write_io_threads参数。
线程池解决每个连接模型解决单线程的几个问题:(原话也在其中,怕翻译错了。)
  • 过大的线程堆栈导致处理器高速缓存在高并发工作负载下几乎是无用。线程池促进线程堆栈重用,以尽量减少处理器高速缓存。
Too many thread stacks make CPU caches almost useless in highly parallel execution workloads. The thread pool promotes thread stack reuse to minimize the CPU cache footprint.
  • 伴随着过多的线程并发调用,上下文切换带来大量的性能消耗。与此同时对于操作系统任务调度也是富有挑战的任务。线程池控制着活跃线程数,以确保MySQL服务器内部保持高并发状态,同时操控并使服务器适应MySQL的运转。
With too many threads executing in parallel, context switching overhead is high. This also presents a challenging task to the operating system scheduler. The thread pool controls the number of active threads to keep the parallelism within the MySQL server at a level that it can handle and that is appropriate for the server host on which MySQL is executing.
  • 并发执行导致过多的事务竞争资源。在InnoDB中,导致了花在互斥的时间增加。一旦事务开启,线程池将控制不会有太多并发执行。
Too many transactions executing in parallel increases resource contention. In InnoDB, this increases the time spent holding central mutexes. The thread pool controls when transactions start to ensure that not too many execute in parallel.

Master thread在主循环中,分两大部分操作,每秒钟的操作和每10秒钟的操作:

每秒一次的操作包括:

1、日志缓冲刷新到磁盘,即使这个事务还没有提交(总是),这点解释了为什么再大的事务commit时都很快;

2、合并插入缓冲(可能),合并插入并不是每秒都发生,InnoDB会判断当前一秒内发生的IO次数是否小于5,如果是,则系统认为当前的IO压力很小,可以执行合并插入缓冲的操作。

3、至多刷新100个InnoDB的缓冲池的脏页到磁盘(可能),这个刷新100个脏页也不是每秒都在做。

每10秒一次的操作包括:

1、刷新100个脏页到磁盘(可能);

2、合并至多5个插入缓冲(总是);

3、将日志缓冲刷新到磁盘(总是);

4、删除无用的undo页(总是);

5、产生一个检查点(checkpoing);

MySQL学习笔记-数据库后台线程的更多相关文章

  1. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  2. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  3. mysql学习笔记--数据库操作

    一.显示数据库 show databases; 二.创建数据库 create database [if not exists] 数据库名 [字符编码] 注意: a. 如果已经存在数据库再创建会报错 b ...

  4. MYSQL学习笔记——数据库范式及MYSQL优化整体思路

    一.数据库范式                                                                               为了建立冗余较小.结构合理的 ...

  5. mysql学习笔记--数据库索引

    一.索引的优点:查询速度快 二.索引的缺点: 1. 增.删.改(数据操作语句)效率低了 2. 索引占用空间 三.索引类型: 1. 普通索引 2. 唯一索引(唯一键) 3. 主键索引:只要主键就自动创建 ...

  6. mysql学习笔记--数据库视图

    一.视图 1. 概念 a. 视图是一张虚拟表,它表示一张表的部分或多张表的综合的结构 b. 视图仅仅是表结构,没有数据.视图的结构和数据建立在表的基础上 2. 创建视图 a. 语法: create [ ...

  7. mysql学习笔记--数据库单表查询

    一.查询语句 1.  select [选项] 列名 [from 表名]  [where 条件]  [order by 排序]  [group by 分组]  [having 条件]  [limit 限 ...

  8. mysql学习笔记--数据库设计

    一.数据库基本概念 1. 关系:两个表的公共字段 2. 行:也称记录,也称实体 3. 列:也称字段,也称属性 4. 数据冗余:相同的数据存在不同的地方. 注意:冗余只能减少,不能杜绝. 减少冗余,只能 ...

  9. mysql学习笔记--数据库预处理

    一.概念 1. 预编译一次,可以多次执行.用来解决一条sql语句频繁执行的问题 2. 语法 a. 预处理语句:preapre 预处理名字 from 'sql语句' b. 执行预处理:execute 预 ...

随机推荐

  1. slot 插槽的使用

    在vue 中父组件中的子组件在子组件中添加内容(html标签.文本内容),在子组件中加入slot这样页面中就会呈现出在父组件填写的内容,例如: 父组件中hello是子组件,在子组件中插入slot这样子 ...

  2. java.security.MessageDigest (1)

    我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky&q ...

  3. 1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)

    Impala使用的端口 Impala使用下表中列出的TCP端口.在部署Impala之前,请确保在每个系统上打开这些端口. Component Service Port Access Requireme ...

  4. Java用代码演示String类中的以下方法的用法

    用代码演示String类中的以下方法的用法 (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true (2)char charAt(int index): 返回索引上 ...

  5. skinned mesh render

    [skinned mesh render] 相比MeshRender组件 ,SkinnedMeshRender多了bones组件.所以很明显,MeshRender不支持骨骼动画,而SkinnnedMe ...

  6. python-ceilometerclient命令行(1)

    1.导入模块,可以动态获取模块中方法并调用,其功能与from...import...一致 2. callback = getattr(actions_module, attr) 从模块中获取方法. 调 ...

  7. 性能测试工具---jmeter

    一.jmeter:简介  Apache jmeter是Apache组织的开发的源代码项目,是一个纯的Java应用,用于压力测试和性能测试,他最初的测试使用于web端的测试,但是后来也被扩展到其他的测试 ...

  8. httpclient和httpUrlConnect区别

    HttpURLConnection的用法 一.创建HttpURLConnection对象 URL url = new URL("http://localhost:8080/TestHttpU ...

  9. 截图原理(二)——android自动化测试学习历程

    接上一篇(截图原理) 视频地址:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=87 ...

  10. linux-ubuntu 安装配置Redis

    >wget http://download.redis.io/releases/redis-3.2.6.tar.gz #下载redis源码包 >tar -zxvf redis-3.2.6. ...