MySQL常规优化

MySQL优化

--何旭东

MySQL使用内存

引擎的特点

Comment: Supports transactions, row-level locking, and foreign keys

Supports transactions:事务

row-level locking:行锁

foreign keys:外键。

Transactions:表示是否支持事务处理,YES表示支持,NO表示不支持。

XA:表示是否分布式交易处理XA规范,YES表示支持,NO表示不支持。

Savepoints:表示是否支持保存点,以便事务回滚到保存点,YES表示支持,NO表示不支持。

目前InnoDB采用双轨授权,一个是GPL授权,另一个则是专有软件授权。

InnoDB存储引擎给MySQL数据库提供了具有事务,回滚和崩溃修复能力,多版本并发控制的事务安全性表。InnoDB存储引擎也提供了行级锁。

优势:良好的事务管理,崩溃修复能力和并发控制。

缺点:读写效率稍差,占用数据空间相对较大。

3个方面介绍InnoDB的特点:

1 InnoDB存储引擎中存储表和索引有两种方式:共享表空间存储和多表空间存储。

共享表空间存储。创建的表结构存储在后缀是.frm的文件中,数据和索引存在innodb_data_home_dir和innodb_data_file_path定义的表空间中。

多表空间存储。创建的表结构存储在后缀名是.frm的文件中,但是每个表的数据和索引单独保存在.ibd文件中。如果为分区表,则每个分区表对应单独的.ibd文件,文件名是表明+分区名。如果为分区表,则每个分区表对应单独的.ibd文件,文件名是表名+分区名。使用多表空间存储需要设置参数innodb_file_per_table,并且重启服务才能生效,只对新建表有效。

2 InnoDB存储引擎支持外键,外键所在的表为子表,外键所依赖的表为夫表。夫表被子表外键关联的字段必须为主键。如果删除,修改夫表中的某条信息时,子表也必须有相应改变。

3 InnoDB存储引擎支持自动增长列AUTO_INCREMENT,自动增长列的值不能为空,而且值必须唯一。另外在MySQL数据库中规定自增列必须为主键,再插入值时,自动增长分为3种情况。

一、如果自动增长列不输入值,则插入的列自动增长后的值。

二、如果输入的值为0或空(NULL),则插入的值也为自动增长后的值。

三、如果插入某个确定的值,且该值在前面的数据没有出现过,则可以直接插入。

线程特点

#在5.1的4个FILE_iO 线程包括: 
insert buffer thread
log thread 
read thread
write thread

#而在5.5, 总共有10个FILE_IO线程
(insert buffer thread) * 1
(log thread) * 1 
(read thread) * 4 
(write thread) * 4

常规优化的十个参数

(1)、max_connections: 
(2)、record_buffer: 
(3)、key_buffer_size: 
4)、back_log: 
(5)、interactive_timeout: 
(6)、sort_buffer: 
(7)、table_cache: 
(8)、thread_cache_size: 
(9)、mysql的搜索功能 
(10)、wait_timeout:

系统层IO调度算法

noop anticipatory deadline [cfq] 
deadline :    deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory:    有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。
        对数据库应用很糟糕,而对于Web Server等则会表现不错。
cfq:        对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
noop:        对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

优化swap分区

默认60,当swap空间使用达到60%的时候,开始释放物理内存中的cache/buffers。

刷磁盘机制

mysql日志操作步骤 :log_buffer ---mysql写 (write)---> log_file ---OS刷新(flush)---> disk

0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file的刷新或者文件系统到磁盘的刷新操作;

1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;

2:事务提交会触发log buffer 到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。

具体的展示

0(延迟写): log_buffer  --每隔1秒--> log_file  —实时—> disk

1(实时写,实时刷): log_buffer  —实时—>  log_file  —实时—> disk

2(实时写,延迟刷): log_buffer  —实时—> log_file --每隔1秒-->disk

进程管理思想

僵尸进程:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程将会导致资源浪费,而孤儿则不会。

最多可以多少个进程同时存在

[email protected] ~]$ cat/proc/sys/kernel/pid_max
32768

linux负载,是内核数的3倍

Linux允许的最大进程数可以通过 ulimit -u来查看

时间: 2024-10-19 00:44:54

MySQL常规优化的相关文章

mysql的密码设置以及常规优化配置

最近有人在问我mysql的密码设置,刚好最近手头上有mysql服务器需要常规优化配置,那么这里就简单的说一下吧: 一.首先是mysql的密码设置 要知道,在实际生产环境中mysql的root用户要是没有密码是非常不安全的,而在新安装的mysql一般都是没有密码的,那么我们在对mysql部署后除了必要的安全措施(可以参看:http://jim123.blog.51cto.com/4763600/1864671),还要对mysql的root用户添加密码,而给用户添加或修改密码都是在修改mysql.u

MySQL架构优化实战系列1:数据类型与索引调优全解析

一.数据类型优化 数据类型 整数   数字类型:整数和实数 tinyint(8).smallint(16).mediuint(24).int(32).bigint(64) 数字表示对应最大存储位数,如 tinyint (-127 --- 128),tinyint unsigned 表示不允许负数,则范围为 (0 -- 255). 常规数据库中 int(11) 只是表示控制显示字符的个数是11个,int(1) 和 int(20) 存储和计算是一样的,即 int(1) 照样可以存储1111(4位数)

mysql性能优化教程(转)

Mysql 性能优化教程 目录 目录 背景及目标 Mysql 执行优化 认识数据索引 为什么使用数据索引能提高效率 如何理解数据索引的结构 如何理解影响结果集 理解执行状态 常见分析手段 分析流程 总结 Mysql 运维优化 存储引擎类型 内存使用考量 性能与安全性考量 存储压力优化 运维监控体系 Mysql 架构优化 架构优化目标 防止单点隐患 方便系统扩容 安全可控,成本可控 分布式方案 分库&拆表方案 主从架构 故障转移处理 缓存方案 缓存结合数据库的读取 缓存结合数据库的写入      

史上最全的MySQL高性能优化实战总结!

1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已. 今天给大家体验MySQL的优化实战,助你高薪之路顺畅.图 - MySQL查询过程 1.2 优化的哲学 优化有风险,涉足需谨慎 1.2.1 优化可能带来的问题 1.2.2 优化的需求1.2.3 优化由谁参与 在进

mysql索引优化 mysiam和innodb区别?

Mysql中有哪几种锁? 1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高. 3.页面锁:开销和加锁时尚界于表锁和行锁之间,并发度一般. mysql中有哪些不同的表格? 5种 myisam.Heap.merge.innodb.isam MYISAM和Innodb区别 myisam表引擎: 1.  5.1版本前,myisam是默认的存储引擎. 2. 支持全文索引,压缩空

MySQL高性能优化指导思路

MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已. 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是

MySQL高性能优化实战总结

from:http://database.51cto.com/art/201809/583620.htm 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已. 今天给大家体验MySQL的优化实战,助你高薪之路顺畅. 图 - MySQL查询过程 1.2 优化的哲学

mysql全面优化

在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 图-MySQL查询过程 一.优化的哲学 注:优化有风险,涉足需谨慎 1.优化可能带来的问题 1.优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统: 2.优化手段本来就有很大的风险,只不过你没能力意识到和预见到: 3.任何的技术可以解决一个问题,但必然存在带来一个问题的风险: 4.对于优化来说解决问题而带来的问题,控制在可接

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like