mysql性能优化学习笔记-存储引擎

mysql体系架构

  • 客户端(java、php、python等)
  • mysql服务层(连接管理器、查询解析器、查询优化器、查询缓存)
  • mysql存储引擎(innodb、myisam等)

存储引擎针对表而言的,不针对库

mysql存储引擎

mysql存储引擎之MyISAM

5.5前默认的存储引擎、临时表(查询、排序时由查询优化器生成的表)、系统表

  • 特性:
  • 并发性与锁级别(表级锁),
  • 表损坏修复,检查check table tablename,修复repair table tablename

此外也可以通过myisamchk对表进行修复,但是必须注意的是使用该命令进行修复时需要将mysql服务停止后进行。否则有可能对数据表造成更大的损坏。

  • myisam支持全文索引
  • myisam表支持数据压缩,可以使用myisampack命令进行压缩,如:myasimpack -b -f tablename.MYI。对已经压缩后的表不能进行写操作,因此要慎重操作。
  • 限制:
  • 5.0前,单表文件最大支持4G。如存储大表需要修改MAX_Rows和AVG_ROW_LENGTH;5.0后默认支持256TB
  • 使用场景
  • 非事务型应用
  • 只读类应用
  • 空间类应用

mysql存储引擎之Innodb

MySQL5.5及以后版本默认存储引擎

  • Innodb使用表空间进行数据存储

由innodb_file_per_table参数的值进行控制,如果为ON,则独立表空间(tablename.ibd)。如果为OFF,则会存储到系统共享表空间ibdataX。

如何选择系统表空间和独立表空间

  • 系统表空间无法简单的收缩文件大小
  • 独立表空间可以通过optimize table命令收缩系统文件
  • 系统表空间会产生IO瓶颈
  • 独立表空间可以同时向多个文件刷新数据

建议对Innodb使用独立的表空间。5.6后已经是默认方式。

  • 如何将系统表空间转换为独立表空间
  • 1、使用mysqldump导出所有表数据
  • 2、停止Mysql服务,修改参数,并删除Innodb相关文件。如果是主从架构可以先处理从库再处理主库。
  • 3、重启Mysql服务,重建Innodb系统表空间
  • 4、重新导入数据
  • Innodb存储引擎的特性

Innodb数据字典信息

Innodb的特性

  • 事务性存储引擎
  • 完全支持事务的ACID特性,
  • Redo Log(重做日志,已提交事务,实现事务的持久性)和Undo Log(未提交事务进行回滚)
  • Innodb支持行级锁
  • 支持更多的写并发
  • 行级锁由存储引擎层实现的。
  • 什么是锁?
  • 管理资源的并发访问
  • 实现事务的隔离性
  • 锁的类型
  • 共享锁(读锁)
  • 独占锁(写锁),排他性
  • 锁的粒度

行级锁、页级锁、表级锁

  • 表级锁
  • 行级锁
  • 阻塞和死锁
  • 什么是阻塞,不同锁之间的兼容性,不同锁之间需要等待锁响应。
  • 什么是死锁,两个或两个以上,互相占用资源而互相等待。一般情况下系统会自动处理。
  • Innodb状态检查

shown engine innodb status

  • 使用场景
  • Innodb适用于大多数OLTP应用

mysql存储引擎之CSV

文件存储特点:csv文件作为存储引擎。数据以文件方式存储在文件中。

  • 特点
  • 以csv格式进行数据存储
  • 所有的列定义不能是NULL
  • 不支持索引(不适用于大表及在线系统)
  • 可以直接对数据文件进行编辑
  • 使用场景
  • 适用于数据交换的中间表

mysql存储引擎之Archive

  • 特点
  • 以zlib对表数据进行压缩,磁盘I/O更少
  • 存储在ARZ为后缀的文件中

存储特点:

  • 只支持insert和select操作,支持行级锁
  • 只允许在自增ID列上添加索引

使用场景

  • 日志和数据采集类应用

mysql存储引擎之Memory

  • 特点

也成为Heap存储引擎,所有数据保存在内存中。一旦mysql重启,则数据会丢失,表结构会保存。

  • 功能特点:
  • 支持hash索引(等值查询)和btree(范围查询)索引,默认为hash索引
  • 所有字段固定长度为char(10)
  • 不支持blog和text等大字段
  • 使用表级锁,因此性能也不一定会很高。
  • 表最大大小由参数max_heap_table_size参数决定
  • 容易混淆的概念
  • 临时表,系统使用的临时表;create temporary table建立的表。
  • 使用场景
  • 用于查找或映射表,如邮编和地区的对应表。
  • 保存数据的中间表
  • 混存周期性聚合数据的结果表

mysql存储引擎之Federated

  • 特点
  • 提供了远程访问mysql服务器上表的方法
  • 本地不存储数据,数据全部存储在远程服务器上
  • 本地会保存远程数据库表结构和远程连接的信息
  • 如何使用

由于可以通过其他方式替代,因而默认是禁止的。但可以在启动时通过federated参数

mysql://user_name[:password]@host_name[:port]/dbname/tablename

  • 使用场景
  • 偶尔的统计分析和手工查询

如何选择存储引擎

参考条件

  • 事务
  • 备份,热备
  • 崩溃恢复
  • 存储引擎的特性

尽量不要同时混合使用多种存储引擎

时间: 2024-08-02 01:48:36

mysql性能优化学习笔记-存储引擎的相关文章

mysql性能优化学习笔记

mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 32位不能使用超过4G的内容,因此选择的时候需要注意. myisam innodb 磁盘的配置和选择 机械硬盘: 存储容量 传输速度 访问时间 主轴转速 物理尺寸 使用RAID增加传统机器硬盘的性能 RAID:一系列小磁盘组成大磁盘,数据冗余 RAID 0 :成本最低,但是没有数据冗余会造成数据丢失

mysql性能优化学习笔记-参数介绍及优化建议

MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global 参数名=参数值; set @@global.参数名 :=参数值; 会话参数 set [session] 参数名=参数值; set @@session.参数名 :=参数值; 内存配置相关参数 确定可以使用的内存的上限 确定mysql每个连接使用的内存 sort_buffer_size:需要注意,每个

kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1606422 本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口

Oracle性能优化学习笔记之选择最有效率的表名顺序

        选择最有效率的表名顺序(只在基于规则的优化器中有效)         ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二

Oracle性能优化学习笔记之共享Sql语句

       为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中.这块位于系统全局区域SGA(systemglobal area)的共享池(shared buffer pool中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前执行过的语句完全相同,Oracle就能很快获得已经被解析的语句以及最好的执行方案.Oracle的这个功能大大地提高了SQL的执行性能并节省了内存的使用.        可惜的是ORACL

Oracle性能优化学习笔记之WHERE子句中的连接顺序

        ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.         例如:        (低效,执行时间156.3秒) SELECT - FROM EMP E WHERE SAL > 50000 AND JOB = 'MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);      

MySQL性能优化总结

一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图:   三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件.首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)和索引数据(.MYI).每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个

详解MySQL性能优化(一)_Mysql

一.MySQL的主要适用场景1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图:   三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件.首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)和索引数据(.MYI).每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个表

MySQL DBA教程:Mysql性能优化之缓存参数优化_Mysql

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO.本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来进行IO优化: 一.query_cache_size/query_cache_type (global)    Query cache 作用于整个 MySQL Inst