之前写过一篇博文,《不好的MySQL过程编写习惯》(http://www.cnblogs.com/wingsless/p/5041838.html)。这篇博文里强调了不要循环的提交事务,尽量将可以放在一起的SQL同一个事务提交,会快很多很多。博文中提到了redo的问题,因此,结合最近编写新员工培训材料的感悟,简单的介绍一些InnoDB和Redo的事情。
InnoDB的内存中有redo log buffer,磁盘上还有redo log file,redo用于在宕机之后恢复数据,保证数据的持久性。
一...
下面是部分输出:show engine innodb status
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
I/O thread 3 state: waiting for completed aio requests (read thread)
I/O thread 4 state: waiting for completed aio r...
1、MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。
2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。表类型功能对比
MyISAM表
InnoD...
存储引擎概念数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。
存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。
InnoDB(B+树)
InnoDB 底层存储结构为B+树, B树的每...
网上写MySQL架构的文章比较多,写InnoDB架构的文章比较少,今天简单说说InnoDB架构。
画外音:一分钟,一幅图,秒懂。
作者:58沈剑
MySQL简要架构是怎么样的?
MySQL整体分为三层:
(1)客户端,是各种编程语言的connector;
(2)MySQL服务,内部包含各种组件,实现各种功能;
(3)文件系统,数据存储与日志;
其中,MySQL服务内,可以以插件的形式,实现各种存储引擎。
在InnoDB,MyISAM,Memory…等各种存储引擎中...
结论
共享表空间insert操作上略有优势,其它都没独立表空间表现好。当启用独立表空间时,请合理调整一下innodb_open_files参数。
独立表空间开启方法,在my.cnf中[mysqld]下设置:
innodb_file_per_table=1查看是否开启:
mysql> show variables like ‘%per_table%’;关闭独享表空间:
innodb_file_per_table=0通常这三个参数放在一起设置:
innodb_file_per_table=1
innodb_file_format=barracuda
innodb_strict_mode=1
...
default charset=utf8 collate=utf8_unicode_ci auto_increment=444;
create table if not exists `inno_hotarticle`(
`id` int(11) unsigned not null auto_incremcrement,
`name` varchar(100) character set utf8 not null ,
primary key (`id`)
)engine=InnoDB default charset=utf8 collate=utf8_unicode_ci auto_increment=444;
MyISAM、InnoDB在频繁插入删除情况下的不同标签:本文系统来源:http://www.c...
将Innodb类型的表从一台服务器拷贝到另一台服务器,或从一个库拷贝到另一个库。
前提是:innodb_file_per_table =ON.
1 先在目标服务器(库)上创建一个相同的表结构。
如:
2 废弃原有的表空间3 在源服务器(库)上,执行FLUSH*** FOR EXPORT操作,目的是将buffer pool 中缓存的数据持久化到硬盘并生成.cfg文件。4 将 .cfg文件和.ibd文件目标服务器(库)中。
直接 cp 命令就行。
5 在源服务器(库)上,执行 UNLOCK TABLES 以释放...
由于MySQL的InnoDB默认是使用的RR级别,所以我们先要将该session开启成RC级别,并且设置binlog的模式
SET session transaction isolation level read committed;
SET SESSION binlog_format = ‘ROW‘;(或者是MIXED)事务A事务Bbegin;
begin;update class_teacher set class_name=‘初三二班’ where teacher_id=1;
update class_teacher set class_name=‘初三三班’ where teacher_id=1;commit;
为了防止并发过程中的修改冲突,...
今天发现c_parser导出数据是会丢掉某些行,给过调试发现是他处理utf8编码时计算有误,目前还没有发现自动解决总是的方法,只会手动改代码来解决. 下一步计划把c_parser移植到windows下,并改正发现的问题, 做成windows程序的原因是自己对linux编程不太熟,调试更不熟,又考虑到linux和windows下许多实现都不一样,所以不计划做多平台了undrop for innodb c_parser 不完美之处标签:本文系统来源:http://www.cnblogs.com/veryjuly/p/55062...
innodb怎么解决partial write?
innodb采用的是doublewrite机制,在写数据page时,会写两遍到磁盘上,第一遍是写到doublewrite buffer(实际上是共享表空间的一块区域),第二遍是从doublewrite buffer写到真正的数据文件中。如果发生了partial write,InnoDB再次启动后就可以从doublewrite buffer中进行page的恢复。由于第一遍page落盘与第二遍page落盘在不同的时间点,所以不会出现doublewrite page和数据page同时发生partial wr...
-- 查看创建数据库语句
SHOW CREATE DATABASE 数据库名
-- 查看创建表语句
SHOW CREATE TABLE 表名
-- 查看表结构
DESC 表名MYISAM
INNODB事务支持
不支持
支持数据行锁定
不支持
支持外键
不支持
支持全文索引
支持
不支持表空间的大小
较小
较大,约为2倍常规使用操作MYISAM 节约空间,速度较快
INNODB 安全性高,事务的处理,多表多用户操作在物理空间对应的位置? 所有的数据库文件都存在data目录下,一个文件夹就对应一个...
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立一个辅助索引,则此索引的...
通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等。根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点。 MySql数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持sql语言...
。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,那么Mysql就会锁定这个主键索引,如果sql语句操作的是非主键索引,那么Mysql会先锁定这个非主键索引,再去锁定主键索引。 在UPDATE 和 DELETE操作时Mysql不仅会锁定所有WHERE 条件扫描过得索引,还会锁定相邻的键值。 “死锁”举例分析: 表Test:(ID,STATE,TIME) 主键索引:ID 非主键索引:STATE 当执行"UPDATE STATE =1011 WHERE STATE=1000...