innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它有计算公式:CPU数量*磁盘数量*2。

如果无法进入内核会休眠innodb_thread_sleep_delay微妙。还有一个参数成为高并发瓶颈:innodb_commit_concurrency,就是提交的时候,如果设置太小,容易导致大量线程冲突,最后通过线程池(经验值:thread_pool_size线程组数量,默认16,建议16-36,最好24-36,值的范围1-64,线程组数量跟cpu相当。thread_pool_stall_limit意思是这个SQL占用多长时间,该让给其他人,较低的值允许线程更快启动起来,避免死锁,较高的值适合长时间运行的SQL语句)限制并发。

myisam设置concurrent_insert(0不允许,1允许默认值,只有表中没有空洞,2强制并发插入到表的尾末尾)是否允许并发插入。

如果查询涉及到blob或者text值,又需要使用临时表,不管多小,都会在磁盘上创建临时表,这样效率很低,但是通过substring函数转为varchar,或者让临时表更快一些(基于内存的文件系统,在Linux上是tmpfs),或者调大innodb日志缓冲大小。

影响MySQL排序的两个值(max_length_for_sort_data为每行排序数据创建固定大小的缓冲跟定义的最大长度比较和max_sort_length必须用blob和text排序的时候,只使用前缀)。

数据库服务器基本配置:tmp_table_size,max_heap_table_size,max_connections,thread_cache_size,table_cache_size。安全和稳定的设置:expire_logs_days,max_allowed_packet,max_connect_errors,sql_mode,sysdate_IS_now。

下面的选项控制负责复制行为,防止备库出问题:read_only,skip_slave_start,slave_net_timeout,sync_master_info,sync_relay_log,sync_relay_log_info。innodb高级配置:innodb_buffer_pool_instances,innodb_autoinc_lock_mode,innodb_io_capacity,innodb_read_io_threads,innodb_write_io_threads,innodb-strict_mode。但是最重要是:innodb_buffer_pool_size和innodb_log_file_size。

顺序io比随机io快。

MySQL复制流程:在主库上把数据更改记录到二进制日志(binary log)中,备库将主库上的日志复制到自己的中继日志(relay log)中,使用的是io线程,备库读取中继日志中的事件,将其重放到备库数据库中,使用的是SQL线程,实现获取事件和回放事件解藕,允许两个线程异步进行,但是在主库上并发运行的查询,在备库上只能串行执行,因为只有一个SQL线程重放中继日志事件。基于行的复制优于基于语句的复制。复制拓扑中的主动-被动模式下的主-主复制比较好用,执行alter table可能锁住整个表,阻塞对表的读和写,但是在主-主配置下,可以先停止主动服务器上的备库复制线程(这样就不会在被动服务器上执行任何更新),然后在被动服务器上执行。alter操作,交换角色,最后在主动服务器上启动复制线程,这个服务器读取中继日志并执行alter语句,这可能花费很长时间,但是不要紧,因为该服务器没有为任何活跃查询提供服务。

怎么配置:1确保两台服务器有相同数据,2启用二进制日志,选择唯一的服务器ID 并,创建复制账号,3启用备库更新的日志记录,后面会看到,这是故障转移和故障恢复的关键,4把被动服务器配置成。只读,防止可能与主动服务器上的更新产生冲突,这一点可选,5启动每个服务器的MySQL实例,6将每个主库设置为对方的备库,使用新创建的二进制日志开始工作。还有一种复制拓扑叫拥有备库的主主复制,优点是增加了冗余,对应不同地理位置的复制拓扑,能够消除站点单点失效的问题,像往常一样将读查询分配到备库上,当主库失效时,备库代替主库还是可行的,或者把备库指向一个不同的主库,但是有点复杂。

系统变量show variables,服务器变量的名字和值show status(二进制日志binlog_cache_use和binlog_cache_disk_use,临时表和文件的计数show global temporary tables;show status like 'creat%';,排序sort,table_locks_immediate和table_locks_waited)。大文件传输:gzip -c /backup/mydb/mytable.MYD | ssh root@server2 "gunzip -c - /var/lib/mytable.MYD",也可以在gzip上增加选项-l,使其压缩更快,如果想获得更高的压缩率而且速度很快用bzip代替gzip。如果不需要加密,可以使用nc代替ssh,还有其他复制方式如rsync。

 
 

高性能mysql第三版读书笔记3的更多相关文章

  1. Linux设备驱动程序 第三版 读书笔记(一)

    Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...

  2. effective java(第三版)---读书笔记

    第一章 引言 < Effective Java>这本书并不厚,而且并不适合初学者,适合有一定的工作经验的java攻城狮.这本书不是百科全书式的JAVA 手册,而是试图在讲述如何正确.高效地 ...

  3. javaScript高程第三版读书笔记

    看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...

  4. 《ECMAScript6标准入门》第三版--读书笔记

    2015年6月,ECMAScript 6正式通过,成为国际标准.尽管在目前的工作中还没有使用ES6,但是每项新技术出来总是忍不住想尝尝鲜,想知道ES6能为前端开发带来哪些变化?对自己的工作有哪些方面可 ...

  5. 高性能mysql第三版(文摘)

    第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...

  6. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

  7. CSS权威指南-第三版--读书笔记

    第一章:CSS和文档 html是结构化语言,css是样式语言,html主要用来被强大的搜索引擎更好的索引,更好的让一个盲人通过语音浏览器来了解我们的网页,这也就是为什么说html是结构话语言,因为这是 ...

  8. CLR.via.C#第三版 读书笔记

    第一章 CLR的执行模型 1.1将源代码编译成托管代码 决定将.NET Framework作为自己的开发平台之后,第一步是决定要生成什么类型的应用程序或组件.假定你已经完成了这些次要的细节:一切都已经 ...

  9. 9Andrew.S.Tanenbaum计算机网络第三版读书笔记-总体概览

随机推荐

  1. Redis之ziplist源码分析

    一.ziplist简介 从上一篇分析我们知道quicklist的底层存储使用了ziplist(压缩列表),由于压缩列表本身也有不少内容,所以重新开了一篇,在正式源码之前,还是先看下ziplist的特点 ...

  2. threejs地球之后:动画的控制

    上一篇知道如何制作threejs地球之后,就正式coding了,当然还是使用最心爱的Vue.本篇会有一些代码,但是都是十几行的独立片段,相信你不用担心. 布局 在进入本篇主题前,要简单看一下xplan ...

  3. 官方解读:Salesforce线上考试新政与福利

    随着疫情在世界范围内的迅速蔓延,Salesforce推出了一系列的线上认证考试改进方案,方便Salesforce从业者在疫情阶段也能够安全.便利地参与考试,今天让我们一起来捋一捋那些,和我们密切相关的 ...

  4. python操作MySQL数据库报错问题解决

    编写好Python操作数据库的脚本后,运行报错如下: 报错1:“AttributeError: 'NoneType' object has no attribute 'encoding'” 解决办法: ...

  5. HBase Filter 过滤器概述

    abc 过滤器介绍 HBase过滤器是一套为完成一些较高级的需求所提供的API接口. 过滤器也被称为下推判断器(push-down predicates),支持把数据过滤标准从客户端下推到服务器,带有 ...

  6. 不使用tomcat,仅适用javaSE手写服务器--模拟登陆

    1.搭建框架 我们只是简单模拟,框架简单分三个模块 a,服务器端server包 b,servlet,根据不同的请求url,利用反射生产对应的servlet c,IO工具包,用来关闭IO流 d,编写we ...

  7. Java 使用正则表达式和IO实现爬虫以及503解决

    我这边找了个小说网站: 基本套路: 第一步:获取小说每一章的url地址 第二步:获取章节url内容并使用正则表达式提取需要的内容 第三步:多线程封装,实现如下效果 最后测试. 代码: 内容获取封装: ...

  8. 重大更新!Druid 0.18.0 发布—Join登场,支持Java11

    Apache Druid本质就是一个分布式支持实时数据分析的数据存储系统. 能够快速的实现查询与数据分析,高可用,高扩展能力. 距离上一次更新刚过了二十多天,距离0.17版本刚过了三个多月,Druid ...

  9. 在Eclipse上实现简单的JDBC增删查改操作

    在Javaweb的学习里,学到了如何完成简单的增删查改操作,在这里撰写一篇文章以便自己整理回忆. 首先要建立一些包和导入一些文件.建一些类.具体框架如图  编写Product类 public clas ...

  10. thinkphp5.0 url跳转

    <a href="{:url('member/index/index',['id'=>5])}">跳转</a> define()自定义常量在thiin ...