MySQL 中的 Innodb 除了支持行锁定外,还支持事务,这往往也是使用 Innodb 的另一个原因。在一些特定的应用中,程序依赖于数据库提供的事务操作(如 rollback 或者 commit),这给应用程序带来了不少方便。
当然,如果你并没有在应用程序中使用事务操作的打算,而只是看中了 Innodb 的其它特性,比如行锁定、外键以及易于修复等,你仍然可以使用它。虽然人们一提到 Innodb 就会联想到事务,但是大多数的站点使用 Innodb 都不是冲着事务,而是为了理想中的性能,事实上大多数的站点都不需要事务级别的保障。
也许行锁定正符合你的站点应用类型,而且由于行锁定带来的其它问题你都可以统统搞定,那么,对于一个事务性表,我们需要注意哪些呢?
预写日志方式(WAL),这也是 Innodb 实现事务的方法。当有事务提交时,Innodb 首先将它写到内存中的事务日志缓冲区,随后当事务日志写入磁盘时, Innodb 才更新实际数据和索引。这里有一个关键点,那就是事务日志何时写入磁盘。
为此,MySQL 提供了一个配置选项,它有3个可选的值:
innodb_flush_log_at_trx_commit = 1
表示事务提交时立即将事务日志写入磁盘,同时数据和索引也立即更新。这符合事务的持久性原则。
innodb_flush_log_at_trx_commit = 0
表示事务提交时不立即将事务日志写入磁盘,而是每隔1秒写入磁盘文件一次,并且刷新到磁盘,同时更新数据和索引。这样一来,如果 mysqld 奔溃,那么在内存中事务日志缓存区最近 1 秒的数据将会丢失,这些更新将永远无法恢复。
innodb_flush_log_at_trx_commit = 2
表示事务提交时立即写入磁盘文件,但是不立即刷新到磁盘,而是每隔1秒刷新到磁盘一次,同时更新数据和索引。在这种情况下,即使 mysqld 奔溃后,位于内核缓冲区的事务日志仍然不会丢失,只有当操作系统奔溃的时候才会丢失最后 1 秒的数据。
上面提到的“写入磁盘文件”和“刷新到磁盘”,它们的区别在于前者只是将数据写入位于物理内存中的内核缓冲区,而后者是将内核缓冲区中的数据真正写入磁盘。
显然,将 innodb_flush_log_at_trx_commit 设置为 0 可以获得最佳性能,同时它的数据丢失可能性也最大。
另一个重要的配置选项是 Innodb 数据和索引的内存缓冲池大小,MySQL 提供了 innodb_buffer_pool_size 选项来设置这个数值,如果你在 MySQL 中大量使用 Innodb 类型表,则可以将缓冲池大小设置为物理内存的 80%,并持续关注它的使用率。
另外,可以这样设置 innodb_flush_method 选项:
innodb_flush_method = O_DIRECT
这样一来,innodb 将可以跳过文件系统缓冲区,提高 I/O 性能,同时凭借自身的缓冲池更加高效地工作。
相关推荐
YugaByte DB是一个用于构建分布式云服务的事务性高性能数据库。 它支持与Cassandra兼容和Redis兼容的API,以及Beta版的PostgreSQL。
事务性数据库性能测试,在数据准备完成后,进行tpc-c性能测试,竟然还报错。原因可能会有很多种,以下总结集中供参考。
PerconaFT, PerconaFT是高性能的事务性 key-value 存储 PerconaFTPerconaFT是一个高性能。事务性的key-value 存储,用于Percona服务器和MySQL的TokuDB存储引擎,在TokuMX中。PerconaFT是作为一个共享库提供的,接口...
TPC-C是一种旨在衡量联机事务处理(OLTP,又称业务处理系统)系统性能与可伸缩性的行业标准基准测试项目。 tpmC((Transaction Per Minute): TPC-C每分钟的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数...
oracle动态性能表 学习动态性能表 第一篇--v$sysstat 2007.5.23 按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图...
近日,腾讯云发布了分布式数据库解决方案(DCDB),其最明显的特性之一就是提供了高于开源分布式事务XA的...虽然分布式数据库能解决性能难题,但事务一致性(Consistency)的问题,却很难在分布式数据库上得到解决。
#资源达人分享计划#
首先,服务器的性能必须满足系统的基本需求,如海量数据的高速存取、对事务要求的快速响应、以及系统的稳定性等。其次,考虑服务器的基本指标,如结构、CPU、内存、缓存、通道、磁盘、接口、操作系统、实用软件。...
一种高性能的分布式事务及一致性复制实现.docx
所谓事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
unqlite, 事务性嵌入式数据库引擎 UnQLite事务嵌入数据库引擎 https://unqlite.org 发布 1.1.8: as系统已经决定重启UnQLite项目 。 已经经修复了所有已经知的数据损坏 Bug,并期望看到新特性( LZ压缩) 。性能改进
真实的MySQL面试题,涵盖基础查询、连接、聚合、事务、表设计等知识点,并具有一定的实际工作场景挑战性: 基础查询: 题目:查询员工表(employees)中薪资高于平均薪资的员工信息。 连接: 题目:查询员工表...
4.4缓存表和汇总表132 4.4.1物化视图134 4.4.2计数器表135 4.5加快ALTERTABLE操作的速度136 4.5.1只修改.frm文件137 4.5.2快速创建MyISAM索引139 4.6总结140 第5章创建高性能的索引141 5.1索引基础141 ...
-安全性、可靠性和性能评价.doc -操作系统基础知识.doc -程序语言基础知识.doc -存储器系统.doc -多媒体基础知识.doc -软件工程基础知识.doc -软件基础知识.doc -事务处理流程图.doc -数据库系统基础知识.doc -谈...
11.4 事务性表的性能 11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡...
11.4 事务性表的性能 11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 ...
提交到服务器上进行有效性确认的移动事务还必须对服务器事务进行有效性确认,使用向前有效性确认方法。如此早地检测数据冲突,节省了处理和通信资源。协议消除了移动只读事务和移动更新事务的冲突,使用动态调整串行...
包括数据库事务处理、MicrosoftADO.NET手动事务处理和使用MicrosoftSQLServer2000数据库的通用应用程序方案中的ADO.NET自动事务处理,重点介绍影响性能、可伸缩性和可维护性的事务处理控件的性能部分。目录简介体系...
11.4 事务性表的性能 11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡...
框架采用消息机制调用服务,速度快、灵活,通过使用缓存,解决服务调用的冥等性和消息的冥等性,在事务处理时,采用异步并行调用对应的服务,提高了性能。TJDTP是一个非常优秀的框架,优势在于提高了应用的成功率,...