innodb是什么引擎 innodb是什么

InnoDB 是 MySQL 数据库引擎之一,现在是 MySQL 默认存储引擎,为 MySQL AB 公布 binary 标准之一 。InnoDB 由 Innobase Oy 公司开发,2006年,甲骨文公司于5月并购 。与传统 ISAM 与 MyISAM 相比,InnoDB 支持的主要特点是支持 ACID 适配的事务(Transaction)作用,类似 PostgreSQL 。

innodb是什么引擎 innodb是什么

文章插图
目前 InnoDB 选择双轨制授权,一种是双轨制授权,GPL 授权,另一种是专有软件授权 。
介绍首选模块适用于交易数据库,适用于交易数据库 ACID 事务,适用于行级锁定 。InnoDB 它是为了解决大量信息时的大性能设计的 。InnoDB 存储引擎完全和 MySQL 服务器集成,InnoDB 存储引擎为了在主内存中缓存数据和检索而保持自己的缓冲池 。InnoDB 存放它的表&检索一个表空间,表空间可以包括多个文档(或初始磁盘分区) 。这和 MyISAM 不同的表,如在 MyISAM 表中每个表都存在分离的文件中 。InnoDB 表可以是任何规格,即使文件尺寸受到限制 2GB 在操作系统上 。InnoDB 默认的包含在内 MySQL 二进制分发 。Windows Essentials installer 使 InnoDB 变成 Windows 上 MySQL 的默认表 。
InnoDB 给 MySQL 带来了事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表 。InnoDB 带来了行级锁(locking on row level),提供与 Oracle 类似的不锁读取(non-locking read in SELECTs) 。InnoDB 带来了行级锁(locking on row level),提供与 Oracle 类似的不锁读取(non-locking read in SELECTs) 。InnoDB 锁定专家级别,也在 SELECT 提供一个句子 Oracle 风格一致的非锁读 。这些特点增强了多客户布局和性能 。没有在 InnoDB 毕竟,在中间扩大锁定的必要性,InnoDB 中行级锁定适用于非常小的空间 。InnoDB 还支持 FOREIGN KEY 强制 。在 SQL 在查询过程中,您可以自由地查询 InnoDB 类型的表等 MySQL 表的类型可以混合,甚至可以在同一查询中混合 。这些特性都提高了多客户并发操作的性能 。在 InnoDB 表中无需扩大锁定(lock escalation),由于 InnoDB 的行级锁定(row level locks)适用于非常小的空间 。InnoDB 是 MySQL 第一个提供外键约束(FOREIGN KEY constraints)的表模块 。
从技术上,InnoDB 是一套放到 MySQL 完整的后台数据库管理,InnoDB 在主内存中创建一个专用的缓冲池,用于高速缓冲数据和检索 。InnoDB 将数据和检索存储在表空间中,可能包含多个文档,这与其他文档不同,例如,在表空间中,MyISAM 中表存储在独立的文件中 。InnoDB 表的大小仅限于操作系统的文件大小,也可以应用每个表的独立表空间,只需打开选项即可 innodb_file_per_table 。
在 MySQL 在源代码中,从 3.23.34a 开始包括 InnoDB 表模块,并在 MySQL -Max 激活二进制版本 。
特性方法1.假如 Unixtop 或 Windows 资源管理器(Task Manager)表明服务的 CPU 占用量低于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)您的系统瓶颈可能在磁盘读写上 。也许你提交了很多事情,或者缓冲池(buffer pool)太小了 。也许你提交了很多事情,或者缓冲池(buffer pool)太小了 。设置更大的缓冲池会有帮助,但一定要注意不要超过物理内存 。80% 。
2.在一个事务中包含几个修改 。如果事务对数据库进行了修改,则在事务提交时,InnoDB 一定要把日志更新到硬盘上 。由于硬盘的旋转速度一般最多为 167 转/秒,那么只要硬盘不欺骗操作系统,提交的事务数量限制也是一样的 167 第二次/秒·客户 。
3.如果你不在乎最近的几件事,你可以在里面 my.cnf 参数将在文档中进行 innodb_flush_log_at_trx_commit 设置为 0 。InnoDB 无论如何,总是尝试一秒更新(flush)日志,虽然更新不能保证 。
4.日志文档(log files)设置大一点,使日志文档之和与缓冲池相匹配(buffer pool)一样大 。当 InnoDB 当日志文档空间耗尽时,它不得不在一段时间内将缓冲池中修改的内容提到硬盘上 。小型日志文档可能会导致不必要的硬盘写作操作 。但大型日志文件的缺点是在数据修复中需要很长时间 。
5.一样 log buffer 尽量设大一点,比如说 8 MB 。
6.如果要存储拉长的字符串或字段,可能会包括大量的字符串 NULLs,请选择 CHAR 型字段取代 VARCHAR 。一个 CHAR(n)字段总是应用的 n bytes 存储数据,即使字符串很短或一个字符串很短 NULL 值 。较小的表更适合缓冲池,同时减少硬盘 I/O。
7.(适宜从 3.23.41 以上版本) 在一些版本 Linux 和 Unixes 中,应用 Unixfsync 或者以其他类似的方式将文档更新到硬盘是极其缓慢的 。InnoDB 默认的方法是 fsync 。如果对数据库管理的硬盘写特性不满意,可以尝试在数据库管理中 my.cnf 里将 innodb_flush_method 设置为 O_DSYNC,虽然 O_DSYNC 在大多数系统中,选项看起来比较慢 。
8.在向 InnoDB 导入数据时,请确认 MySQL 没有开启 autocommit=1.否则,每一个插入句子都要把每一个插入句子都要把每一个插入句子 log 更新到硬盘 。在你的 SQL 添加导入文件的第一行
set autocommit=0;并添加到最后一行 commit;
如果采用 mysqldump 选项–opt,您将得到快速导进 InnoDB 表的转储(dump)文档甚至可以停止使用上述文档 set autocommit=0; … commit; 。
9.当心 insert 集全的大回滚(roolback):在插入时 InnoDB 应用插入缓冲减少硬盘 I/O,但在相应的回滚中没有使用这样的系统 。一个系统 。disk-bound rollback 可能会花费相应的插入时间 30 翻倍 。如果有失控回滚,可以查看第一个 6.1 终止章节的方法 。
10.同时也要小心一个大的 。disk-bound 操作 。应用 DROP TABLE 或 TRUNCATE(从 MySQL-4.0 以上) 清除一块表,而不是使用它 DELETE FROM yourtable 。
11.如需插入大量纪录行,可应用多行(multi-line)的 INSERT 降低客户端与服务器端之间的通信成本:
INSERT INTO yourtable VALUES (1, 2), (5, 5);
这种方法对插入任何表都有效,而不仅仅是 InnoDB 。
12.如果在辅键上有 UNIQUE 管束,从 3.23.52 和 4.0.3 一开始,您可以在导入对话中检查唯一的键(uniqueness check)关闭以提高数据导入率:
SET UNIQUE_CHECKS=0;大表导入将减少大量硬盘 I/O,由于这时 InnoDB 可以用自己的插入缓冲记录辅助索引 。
13.如果在表中含有一个子 FOREIGN KEY 管束,从 3.23.52 和 4.0.3 一开始,外键可以在导入对话中进行检查(foreign key check)关闭以提高数据导入率:
SET FOREIGN_KEY_CHECKS=0;
这将减少大量硬盘的大表导入 I/O 。
注意事项导出数据的一些注意事项:
假如 TRANSACTIONS 部分报告锁定等待(lock waits),然后你的应用程序可能有锁争用(lock contention) 。导出信息有助于跟踪事务死锁的原因 。
SEMAPHORES 部分报告线程等待信号量及其统计进程必须转动(spin)或等候(wait)一个互斥(mutex)或 rw-lock 信号量的次数 。大线程等待信号的次数可能是因为硬盘 I/O 造成,或 InnoDB 内部争用难题(contention problems) 。争用(Contention)可能是由于较重的并发性检查,或操作系统的线程调度问题 。在这种情况下,可以将 innodb_thread_concurrency 设定低于默认 8。
FILE I/O 部分列出了文档 I/O 等待请求 。过大的值意味着硬盘 I/O 瓶颈 。
BUFFER POOL AND MEMORY 部分到页面阅读和写作的统计数据 。通过这些值,您可以计算出您查看所需的一般数据文件 I/O 量 。
【innodb是什么引擎 innodb是什么】