高性能mysql第三版读书笔记3
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的更多相关文章
- Linux设备驱动程序 第三版 读书笔记(一)
Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...
- effective java(第三版)---读书笔记
第一章 引言 < Effective Java>这本书并不厚,而且并不适合初学者,适合有一定的工作经验的java攻城狮.这本书不是百科全书式的JAVA 手册,而是试图在讲述如何正确.高效地 ...
- javaScript高程第三版读书笔记
看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...
- 《ECMAScript6标准入门》第三版--读书笔记
2015年6月,ECMAScript 6正式通过,成为国际标准.尽管在目前的工作中还没有使用ES6,但是每项新技术出来总是忍不住想尝尝鲜,想知道ES6能为前端开发带来哪些变化?对自己的工作有哪些方面可 ...
- 高性能mysql第三版(文摘)
第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- CSS权威指南-第三版--读书笔记
第一章:CSS和文档 html是结构化语言,css是样式语言,html主要用来被强大的搜索引擎更好的索引,更好的让一个盲人通过语音浏览器来了解我们的网页,这也就是为什么说html是结构话语言,因为这是 ...
- CLR.via.C#第三版 读书笔记
第一章 CLR的执行模型 1.1将源代码编译成托管代码 决定将.NET Framework作为自己的开发平台之后,第一步是决定要生成什么类型的应用程序或组件.假定你已经完成了这些次要的细节:一切都已经 ...
- 9Andrew.S.Tanenbaum计算机网络第三版读书笔记-总体概览
随机推荐
- spark——详解rdd常用的转化和行动操作
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark第三篇文章,我们继续来看RDD的一些操作. 我们前文说道在spark当中RDD的操作可以分为两种,一种是转化操作(trans ...
- threejs创建地球
上个月底,在朋友圈看到一个号称“这可能是地球上最美的h5”的分享,点进入后发现这个h5还很别致,思考了一会,决定要不高仿一个? 到今天为止,高仿基本完成, 线上地址 github地址 除了手机端的me ...
- 用threejs 实现3D物体在浏览器展示
用threejs 实现3D物体在浏览器展示,通过鼠标平移,缩放,键盘箭头按钮左右移动等功能展示. <!DOCTYPE html> <html> <head> < ...
- 好玩的GeoGebra
目前,在网站上看到好多大牛写的信号方面的笔记,有很多好玩的gif好玩又让人能明白其中的原理,工欲善其事必先利其器,在写我的博客方面先来学一个好玩的数学软件吧. GeoGebra官网如图 它是一个小巧的 ...
- 最长上升子序列 HDU 1025 Constructing Roads In JGShining's Kingdom
最长上升子序列o(nlongn)写法 dp[]=a[]; ; ;i<=n;i++){ if(a[i]>dp[len]) dp[++len]=a[i]; ,dp++len,a[i])=a[i ...
- C. Standard Free2play --div
https://codeforces.com/contest/1238/problem/C 题意:下台阶的时候只有一种方式,拉动当前台阶x的 level,然后当前的台阶关闭,调到下边的台阶x-1,如果 ...
- Python——详解__slots__,property和私有方法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第11篇文章,我们来聊聊面向对象的一些进阶使用. __slots__ 如果你看过github当中一些大牛的代码,你会 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第九周作业
第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...
- Qt 与 .Net 为何不兼容
哪怕是非Qt的静态库里用了 .Net 也不行.
- 快速部署一个Kubernetes集群
官方提供的三种部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用. 部署地址:https:// ...