金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > mysql优化策略,数据库引擎InnoDB和myisam的区别和联

mysql优化策略,数据库引擎InnoDB和myisam的区别和联

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-10-01 03:10

2、数据库的存储引擎,

适用场景

  • 非事务应用
  • 只读类应用
  • 空间类应用

都能看到一条记录

1.混和引擎的MySQL如何进行设计,需要将所有的MyISAM引擎表转化成Innodb吗?
根据情况分析,如果使用频率不高,和主要业务和事物的表没有直接关联关系,不用回滚的情况下,不转换为innodb也可以,当然备份对这种表影响也不是很大。
如果情况允许,还是建议转换成innodb,毕竟myisam表损坏的情况还是很多的。

详细解释转载于:

memory

但可以用check table,以及mysqlcheck [OPTIONS] database [tables]

MySQL的混和引擎设计是优点不是缺点, 除了MyISAM、InnoDB,MySQL还有 BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED 等存储引擎,具体怎么使用要看应用场景。对于,MyISAM和Innodb两种存储引擎,最大的区别是Innodb引擎支持事务等高级特性,MyISAM不支持事务;其次,Innodb支持行锁,MyISAM是表锁,锁的粒度支持不一样,对于并发写操作性能影响较大。那么很显然,在做数据库建模设计时,对于需要事务支持的交易表当然需要选择Innodb,而对于没有事务需求的表,例如字典表、日志表,建议选择MyISAM(注:MyISAM也是Mysql的默认存储引擎)。 因为虽然MyISAM不支持事务等高级特性,但强调的是性能,其执行速度比InnoDB类型更快。两则结合使用,一切都是为了性能,因为一般来说,系统最大的瓶颈就是IO。而对于MySQL Master/Slave 读写分离架构,只读的从机是完全可以只用MyISAM来提高读的性能。

myisam:读取速度比较快,不占用大批量资源,但是又两个缺点,1、不支持事物,2、容错不好。硬盘崩溃了,数据就没了,如果说坚持要用在那个关键程序,要通过其复制特性实时的去备份数据,,MySQL能够支持这样的备份应用程序。MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。

mysql优化的几个方面

  • 硬件 主要有 cpu、内存、磁盘io、网络
  • 系统配置 操作系统的不同、版本、以及操作系统的配置
  • 数据库 存储引擎的选择、数据库服务器配置参数、
  • 表结构设计及sql语句 sql语句优化、编写、表结构的设计

3. 可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全:

2.混和引擎的MySQL,大家平时是用哪些方案备份的?
如果在slave上面,允许比较大时间表锁的话,可以考虑mysqldump,优点是到处的数据量较小节约存储空间,可以拆分单表数据直接还原等操作。
如果在master上面备份,不能允许长时间表所的话,可以考虑innobackupex,可以自动备份innodb和myisam,在完成innodb备份以后,在备份myisam时候才会表所。可以降低锁表时间,缺点是占用比较大的磁盘空间,当然可以压缩,压缩会造成额外的系统资源开销。
在slave上,可以考虑快照备份,需要前期规划好,如果快照保存时间越长,对IO和空间消耗越大。
具体根据自己的实际环境和情况来设计备份方法。

mysql中engine=innodb和engine=myisam的区别

文件系统存储特点

  • 也称为heap存储引擎,所以所有数据存储在内存中
  • 重启数据消失 需要数据是可再生的
  • 表结构 存储在ifm

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量 的SELECT,MyISAM是更好的选择。

3.混和引擎的MySQL如何进行优化呢,innodb_buffer_pool_size是否设成物理内存的50%-80%即可?
关于innodb_buffer_pool_size的值为物理内存的多少,这个得看你有多少物理内存,还要看你是否在机器上做其他的管理操作,比如备份,慢查询分析,二进制日志分析等。如果你只有4G内存,那么你想设置80%肯定是是多了,50%就差不多了。如果你有32G内存,少量管理操作,我个人觉得80%比较合适。或者64G内存,80%都嫌少,系统用不到那么多内存的。

Innodb:它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,在电子银行中事务控制能力是非常重要的。支持COMMIT、ROLLBACK和其他事务特性。目前数据库表结构设计的时候一般都选择这种存储引擎。但是速度慢,占用磁盘空间比较多。

磁盘的配置和选择

  • 传统机械磁盘

读取过程:1)移动磁头到磁盘表面正确的位置上,2)等待磁盘旋转,使所需的数据在磁头之下,3)等待磁盘旋转过去,所有所需的数据被磁头读出
12称为访问时间,3传输速度

选择因素:磁盘容量,传输速度,访问时间,主轴转速,物理尺寸

  • raid机械磁盘 磁盘冗余队列的简称

  • ssd
    相比机械磁盘,可以加强随机读写性能,随机读的性能提升明显
    支持的更好的并发
    长时间密集写操作容易损坏ssd

  • 网络存储
    外部文件存储设备加载到服务器上的方法
    最适合用于数据库备份

  1. 临时改变默认表类型可以用:

    set table_type=InnoDB; show variables like 'table_type'; 或: c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=InnoDB

1、ENGINE=InnoDB 数据库存储引擎,DEFAULT 默认,CHARSET=utf8 数据库字符编码

特性

  • innodb 是一种事务型存储引擎
  • 完全支持事务的acid特性
  • redo log 和 undo log redo log 实现事务持久性,undo log 未提交事务
  • innodb 支持行级锁,行级锁可以最大程度支持并发,行级锁是由存储引擎实现的
ALTER TABLE tablename ENGINE = MyISAM ;

性能监控命令

show engine innodb status

--default-table-type=InnoDB

锁的概念

锁的主要作用是管理共享资源的并发访问
锁用于实现事务的隔离性
锁的类型:读锁(共享的,不相互干扰),写锁(排他的,堵塞其他读锁和写锁)
锁的粒度:被加锁资源的最小单位,行级锁,表级锁,锁定的数据越少,并发越高
阻塞:不同锁之间的兼容,一个锁需要等待另一个锁的释放,因而产生了阻塞,阻塞是为了确保事务的可以并发。大量慢查询或者是alter table
死锁:两个或者两个以上事务,相互占用对方等待的资源。系统会自动处理。少量死锁不会对系统发生影响。

3.1 innodb表不能用repair table命令和myisamchk -r table_name

临时表

  • 系统使用的(未超过限制使用momery临时表, 超过限制 使用myisam 临时表)
  • create temporary table 建立的临时表

 

archive

 

存储特点

  • 只支持insert 和 select
  • 支持在自增id 上建立索引
  • 记录日志和数据采集类应用

可以用 show create table tablename 命令看表的类型。

限制

  • mysql5.0之前默认表大小为4g,5.0之后支持256tb

执行另一个mysql:

特性

  • 并发性和锁级别 使用的是表级锁,读写混合操作并发差,
  • 表损坏修复 check table tablename 进行检查, repair table tablename 进行修复
  • 支持的索引类型 全文索引,
  • 支持数据压缩 myisampack命令压缩 已压缩的表只能进行读操作
use test;
select * from tn;
select * from ty;

innodb

mysql5.5版本之后称为默认存储引擎
适合处理大量小事务
innodb使用表空间进行数据存储
innodb_file_per_tabl
on 独立表空间:tablename.ibd; 通过optimize table命令收缩系统文件,可以同时向多个文件刷新数据
off 系统表空间 ibdatax 无法简单收缩文件大小,会产生io瓶颈
将系统表空间转到独立表空间,1mysqldump导出,2停止mysql服务,修改参数,3重启mysql,重建innodb表空间,4重新导入

最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意。后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什么区别,就去查了查。原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这 样就可以根据数据表不同的用处是用不同的存储类型。 

文件系统存储特点

  • 以zlib对表数据进行压缩,磁盘io更少
  • 数据存储在ARZ为后缀的文件中
  • frm 存储表结构

4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(

功能特点

  • 支持hash 等值查找
  • btree索引 范围查找
  • 所有字段的长度都是定长的,varchar(10). => char(10)
  • 不支持 text blog 大字段类型
  • 使用的是表级锁
  • 最大大小由 max_heap_table_size. 默认16mb 修改之后需要重建已存在的表

 

文件系统存储特点:

  • 以文件方式存储
  • 所有的列 都是非空的
  • 不支持索引
  • 不适合大表 不适合在线处理
  • 可以直接对文件进行编辑

commit;

CSV

对于支持事物的InnoDB类型的标,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打 开也可以),将大大提高性能。

系统

mysql适合的操作系统
windows、FreeBSD、Solaris、linux

  • centos优化
    linux优化
  • 插件式存储引擎 存储引擎针对于表,而不是针对于库的
![](https://upload-images.jianshu.io/upload_images/7357680-3810dcef62fd9615.png)

执行一个msyql:

myisam

myisam存储引擎由MYD和MYI组成

只有tn能看到一条记录

内存

  • 一般来说通过增加内存,将数据缓存到内存中,从而提高数据吞吐性能
    瓶颈,如所有的数据都缓存到内存中了,在增加内存不会有性能的提升
    myisam 会将索引缓存到内存中
    数据通过操作系统缓存
    innodb 会同时在内存中缓存数据和索引

  • 内存的提升对于写会有提升,可以将多次写入改为一次写入

  • 内存的频率越高,速度越快

然后在另一边

cpu选择

应用为计算密集型,应该使用更高的频率
应用的并发量高,则需要更多的核数

 

适用场景,作为数据交换的中间表使用

  • .csv 文件存储表内容
  • .csm 文件存储表的元数据和数量数
  • .frm 文件存储表结构信息

 

存储引擎

才都能看到记录。

硬件

 

2.1 对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:

修改:

use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;
begin;
insert into tn values('a');
insert into ty values('a');
select * from tn;
select * from ty;

   

alter table tablename type=innodb;

最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意。后来用Access2MySQL导数据的...

InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,

mysql中engine=innodb和engine=myisam的区别

只影响到create语句。)

另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。

 

 

===============================================================

 

  1. 创建表时如果不指定type则默认为myisam,不支持事务。
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;

测试命令:

1. 4.0以上mysqld都支持事务,包括非max版本。3.23的需要max版本mysqld才能支持事务。

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:mysql优化策略,数据库引擎InnoDB和myisam的区别和联

关键词: