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 性能,同时凭借自身的缓冲池更加高效地工作。
相关推荐
综上所述,MySQL的事务表和非事务表各有优劣,选择哪种类型取决于应用的需求,包括对数据一致性的要求、并发性能、存储空间和速度等因素。在设计数据库时,理解这些区别至关重要,以便做出最适合业务需求的决策。
2. 表级锁与行级锁:表级锁锁定整个表,行级锁只锁定特定行,行级锁能提高并发性能,但需要更复杂的管理。 3. 死锁检测与预防:当两个或更多线程相互等待对方释放资源时,会发生死锁。通过算法检测和解决死锁是必要...
从事务性数据到数据仓库数据的抽取过程是一个关键的环节,涉及到数据的完整性和性能优化。数据仓库是用于分析和报告目的的大型数据库,它需要高效地处理大量事务性数据,以便提供决策支持。以下将详细介绍这个过程中...
1. **性能考虑**:频繁地调用`SaveChanges()`可能会影响性能,可以尝试将多个更改打包在一起一次性提交。 2. **错误处理**:除了基本的try-catch结构外,还可以考虑更复杂的错误处理逻辑,比如重试机制等。 3. **...
在本文中,我们将深入探讨MSMQ的核心特性,包括事务性消息传输、单线程监控、文件发送与接收以及远程信息交互。** ### 1. 事务性消息传输 事务性消息传输是MSMQ的关键特性之一,它确保了消息的可靠性和一致性。在...
MongoDB 是一个流行的开源NoSQL数据库,以其灵活性和高性能而受到广泛应用。在“MongoDB TPCC事务性能基准测试”中,我们关注的是如何评估MongoDB在处理事务处理能力上的表现,特别是针对TPCC(Transaction ...
综上所述,本文提出的高性能分布式事务及一致性复制方案,旨在解决传统分布式数据库在满足金融及电信行业高可用性和一致性需求时的性能瓶颈问题。通过对现有技术和标准的深入分析,提出了一种融合了传统数据库事务...
软件性能测试记录表是用来系统性地记录这些测试过程和结果的重要工具。以下将详细介绍“软件性能测试记录表”的内容及其重要性,并探讨如何有效地利用此模板进行性能测试。 性能测试的目标是测量软件的响应时间、...
同时,随着GPU在数据中心和云计算领域的广泛应用,GPU事务性内存有望成为提升大数据处理和分析性能的关键技术。通过结合硬件优化和软件改进,GPU事务性内存能够帮助程序员更轻松地编写高效且正确的并行代码,推动...
PerconaFT, PerconaFT是高性能的事务性 key-value 存储 PerconaFTPerconaFT是一个高性能。事务性的key-value 存储,用于Percona服务器和MySQL的TokuDB存储引擎,在TokuMX中。PerconaFT是作为一个共享库提供的,接口...
总结来说,MySQL大表性能优化和高性能表设计规范是提升数据库TPS的关键。通过合理的表结构设计、索引优化、查询优化以及内存和存储管理,我们可以有效地应对大数据量带来的挑战,实现数据库的高效运行。在实践中,...
在SQLite3中,事务用于确保数据的一致性和完整性。默认情况下,每次数据库操作都是在一个隐式事务中进行的。然而,为了提高性能,我们可以显式地开启和提交事务。批量插入数据时,将多条INSERT语句放入一个事务内,...
Seata(Simple Extensible Autonomous Transaction Architecture)是一款由阿里巴巴开源的分布式事务处理框架,设计目标是为微服务架构提供简单易用、高性能的分布式事务解决方案。它致力于解决在大规模分布式系统中...
### 软件工程与软件系统可事务性评估 #### 第1章 简介 **软件工程**是一门综合性的学科,它结合了计算机科学、管理学等多个领域的知识,旨在采用系统化的方法来开发和维护高质量的软件产品。软件工程的研究对象...
总之,使用事务来更新多个数据表是确保数据完整性和一致性的重要手段。在设计数据库操作时,应充分考虑事务的使用,以避免可能的数据不一致和并发问题。在实际开发中,还需要根据具体需求选择合适的事务隔离级别,以...
总的来说,该方案旨在解决Paxos/Raft等协议在实际应用中的局限性,通过优化分布式事务和主节点选举过程,提供高性能、强一致性的分布式数据库服务,同时考虑了金融行业的特殊需求,如高可用性和故障恢复策略。...
然而,多核架构下的数据库系统面临扩展性问题,尤其是事务型数据库,由于大量使用共享数据结构和同步原语,导致内存访问延迟和性能瓶颈。 首先,文章提到锁管理器的优化是性能提升的关键。传统的多粒度封锁机制虽然...
为了更好地了解系统的性能,我们需要使用描述性统计方法来分析性能测试结果。描述性统计方法可以帮助我们了解系统的响应时间分布情况,从而更好地评估系统的性能。在 LoadRunner 中,我们可以使用 PERCENTILE 函数来...